程序支持STM,FSL, ST 三家公司的MCU,通用的,只要改下头文件就可以了,方便移值
- #include "st7585.h"
- #include "asc0508.h"
-
- const unsigned char hanzi[]=
- {
- /*-- 文字: S --*/
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*-- 文字: T --*/
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*-- 文字: M --*/
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*-- 文字: 8 --*/
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*-- 文字: 开 --*/
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,
- 0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00,
- 0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00,
- /*-- 文字: 板 --*/
- /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,0x24,0xE4,0x24,0x22,0x23,0xE2,0x00,0x00,
- 0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x80,0x41,0x26,0x18,0x26,0x41,0x80,0x00,
- };
- extern volatile unsigned char LCDDly;
- //=============================================================
- //延时
- //=============================================================
- void DlyMs(unsigned char nCount)
- {
- LCDDly = nCount ;
- while ( LCDDly > 0 );
- }
- //=============================================================
- //传送数据
- //=============================================================
- void LCD_WriteBus(unsigned char Value)
- { unsigned char i;
- LCD_SDA_1;
- LCD_SCL_0;
- for(i=0;i<8;i++)
- { LCD_SCL_0;
- if(Value&0x80) LCD_SDA_1; else LCD_SDA_0;
- LCD_SCL_1;
- Value=Value<<1;
- }
- LCD_SCL_1;
- LCD_SDA_1;
- }
- //=============================================================
- //写命令
- //=============================================================
- void LCD_WriteCmd(unsigned char Cmd)
- {
- LCD_CS_0;
- LCD_RS_0;
- LCD_WriteBus(Cmd);
- LCD_CS_1;
- }
- //=============================================================
- //写数据
- //=============================================================
- void LCD_WriteDat(unsigned char Dat)
- {
- LCD_CS_0;
- LCD_RS_1;
- LCD_WriteBus(Dat);
- LCD_CS_1;
- }
- /*******************************************************************************
- *函 数: LCD_SetXY(unsigned char x,unsigned char y) *
- *功 能: 移动显示指针到指定位置 *
- *参 数: X,Y 座标值 *
- *******************************************************************************/
- void LCD_SetXY(unsigned char X,unsigned char Y)
- {
- LCD_WriteCmd(0x80 | X); // row
- LCD_WriteCmd(0x40 | Y); // column
- }
- /*******************************************************************************
- *函 数: lcd_goto1(unsigned char x) *
- *功 能: 移动到第一行的指定位置 *
- *参 数: 字符在屏上的位置 ( 0 - 16 ) *
- *******************************************************************************/
- void lcd_goto1(unsigned char x){LCD_SetXY(x*6,7);} //第1行x位
- void lcd_goto2(unsigned char x){LCD_SetXY(x*6,6);} //第2行x位
- void lcd_goto3(unsigned char x){LCD_SetXY(x*6,5);} //第3行x位
- void lcd_goto4(unsigned char x){LCD_SetXY(x*6,4);} //第4行x位
- void lcd_goto5(unsigned char x){LCD_SetXY(x*6,3);} //第5行x位
- void lcd_goto6(unsigned char x){LCD_SetXY(x*6,2);} //第6行x位
- void lcd_goto7(unsigned char x){LCD_SetXY(x*6,1);} //第7行x位
- void lcd_goto8(unsigned char x){LCD_SetXY(x*6,0);} //第8行x位
- /*******************************************************************************
- *函 数: lcd_cls(unsigned int Color) *
- *功 能: 清屏 *
- *参 数: Color *
- *******************************************************************************/
- void lcd_cls(unsigned int Color)
- {
- unsigned char t;
- unsigned char k;
- LCD_SetXY(0,0);
- for(t=0;t<9;t++)
- { for(k=0;k<LCD_W;k++) { LCD_WriteDat(0x00); } }
- }
- void lcd_putc(unsigned char asc)
- {
- unsigned char line;
- for (line=0; line<5; line++)
- LCD_WriteDat(Asc0508[(asc-32)*5+line]);
- LCD_WriteDat(0x00);
- }
- void lcd_puts(char *s)
- { while (*s) { lcd_putc(*s++); } }
- void LcdWriteHanzi(unsigned char row,unsigned char page,unsigned char c)
- {
- unsigned char i;
- LCD_SetXY(row*8, page);// 列,页
- for(i=16; i<32;i++) { LCD_WriteDat(hanzi[c*32+i]); }
- LCD_SetXY(row*8, page+1);// 列,页
- for(i=0; i<16;i++) { LCD_WriteDat(hanzi[c*32+i]);}
- }
- //=============================================================
- //初始化LCD
- //=============================================================
- void lcd_init(void)
- {
- //LCD_AdjBacklight(255);
- /* Configure the LCD pins --------------------------------------------*/
- // SET_BUS_OUTPUT();
- gpio_init(LCD_CS, 1, 0);
- gpio_init(LCD_RES, 1, 0);
- gpio_init(LCD_RS, 1, 0);
- gpio_init(LCD_SDA, 1, 0);
- gpio_init(LCD_SCL, 1, 0);
- DlyMs(MS10);
- LCD_CS_0;
- LCD_RES_0;
- DlyMs(MS10);
- LCD_RES_1;
- DlyMs(MS10);
-
- LCD_WriteCmd(0x21);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
- LCD_WriteCmd(0x9C);//设置VOP值,室温下的编程范围为3.00-10.68
- LCD_WriteCmd(0x30);
- DlyMs(MS50);
- LCD_WriteCmd(0x20);//LCD功能设置:芯片活动,水平寻址,使用基本指令
- LCD_WriteCmd(0x0C);//设定显示配置:普通模式
- }
- void LcdTest(void)
- {
- lcd_init(); //初始化LCD模块
- lcd_cls(0x00); //清屏幕
- LcdWriteHanzi(0,2,0); //S
- LcdWriteHanzi(1,2,1); //T
- LcdWriteHanzi(2,2,2); //M
- LcdWriteHanzi(3,2,3); //8
- LcdWriteHanzi(4,2,4); //开
- LcdWriteHanzi(6,2,5); //发
- LcdWriteHanzi(8,2,6); //板
- lcd_goto1(0);
- lcd_puts("This is a demo.");
- lcd_goto2(0);
- lcd_puts("1234567890ABCDEFG");
- lcd_goto4(1);
- lcd_puts("1234567890ABCDEFG");
- }
复制代码
|
只知道是串行口= =