我给你来一个。
-
- /************* 功能说明 **************
-
- ST7920的基本驱动程序
-
- ******************************************/
-
-
- #define MAIN_Fosc 22118400UL //定义主时钟
-
- #include "STC15Fxxxx.H"
-
-
-
- sbit P_HC595_SER = P4^0; //pin 14 SER data input
- sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
- sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock
-
- sbit LCD_RS = P2^5; //定义引脚
- sbit LCD_RW = P2^6;
- sbit LCD_E = P2^7;
- sbit PSB = P2^4; //PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
- sbit LCD_RESET = P2^3; // 17---RESET L-->Enable
- #define LCD_Data P0
-
-
-
- #define Busy 0x80 //用于检测LCD状态字中的Busy标识
- void delay_ms(u16 ms);
- void DisableHC595(void);
- void WriteDataLCD(u8 WDLCD);
- void WriteCommandLCD(u8 WCLCD,BuysC);
- u8 ReadDataLCD(void);
- u8 ReadStatusLCD(void);
- void LCDInit(void);
- void LCDClear(void);
- void LCDFlash(void);
- void DisplayOneChar(u8 X, u8 Y, u8 DData);
- void DisplayListChar(u8 X, u8 Y, u8 code *DData);
- void DisplayImage (u8 code *DData);
-
- u8 code uctech[] = {"南通国芯微电子 "};
- u8 code net[] = {" www.gxwmcu.com "};
- u8 code mcu[] = {"专业制造51单片机"};
- u8 code qq[] = {" QQ: 800003751 "};
-
- //128*64点阵图形数据
- code u8 gImage_gxw[1024] = { /* 0X10,0X01,0X00,0X80,0X00,0X40, */
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X3F,0X03,0XF0,0X3F,0X03,0XF0,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0XC0,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X00,0X0C,0X00,0X18,0XFF,0XE0,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X00,0X08,0X1C,0X1C,0X1B,0X00,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X1F,0XFF,0XFE,0X0C,0X0E,0X00,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X00,0X0C,0X00,0X00,0X8C,0X60,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X04,0X0C,0X10,0X00,0XFF,0XF0,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X07,0XFF,0XF8,0X0C,0XCC,0X60,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X00,0X06,0X63,0X18,0X7E,0XCC,0X60,0X00,
- 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X06,0X33,0X98,0X0C,0XFF,0XE0,0X00,
- 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X06,0X32,0X18,0X0C,0XCC,0X60,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X05,0XD8,0X0C,0XCC,0X60,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0XFF,0X78,0X0C,0XFF,0XE0,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X08,0XD8,0X0C,0XCC,0X60,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X07,0XFF,0XF8,0X0C,0XCC,0X60,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X0C,0X18,0X0C,0XCF,0XE0,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X0C,0X18,0X3E,0X80,0X40,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X0C,0X18,0X73,0XC0,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X0D,0XF0,0X20,0X7F,0XF8,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X00,0X30,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X00,0X18,0X01,0X84,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X07,0XFF,0XFC,0X01,0XC6,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X06,0X00,0X58,0X01,0X86,0X30,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X07,0XFF,0XD8,0X7F,0XFF,0XF8,0X00,
- 0X60,0X00,0XFD,0X1F,0XF0,0X7A,0X00,0X18,0X00,0X06,0X0C,0X18,0X01,0X86,0X00,0X00,
- 0X60,0X01,0X87,0X13,0X30,0XC6,0X00,0X18,0X00,0X06,0X0C,0X18,0X01,0X86,0X00,0X00,
- 0X60,0X03,0X03,0X33,0X11,0X83,0X00,0X18,0X00,0X06,0X0C,0X18,0X00,0X40,0X00,0X00,
- 0X60,0X03,0X03,0X03,0X01,0X83,0X00,0X18,0X00,0X06,0X0C,0XD8,0X00,0X30,0X00,0X00,
- 0X60,0X03,0X80,0X03,0X03,0X80,0X00,0X18,0X00,0X06,0XFF,0XF8,0X03,0X38,0X00,0X00,
- 0X60,0X01,0XC0,0X03,0X03,0X00,0X00,0X18,0X00,0X06,0X0F,0X18,0X0B,0X98,0X80,0X00,
- 0X60,0X00,0X78,0X03,0X03,0X00,0X00,0X18,0X00,0X06,0X0D,0X98,0X0B,0X18,0XC0,0X00,
- 0X60,0X00,0X1E,0X03,0X03,0X00,0X00,0X18,0X00,0X06,0X0C,0XD8,0X1B,0X00,0X70,0X00,
- 0X60,0X00,0X07,0X03,0X03,0X00,0X00,0X18,0X00,0X06,0X0C,0X18,0X1B,0X01,0X30,0X00,
- 0X60,0X00,0X03,0X03,0X03,0X80,0X00,0X18,0X00,0X06,0X0C,0XD8,0X3B,0X01,0X30,0X00,
- 0X60,0X03,0X03,0X03,0X03,0X83,0X00,0X18,0X00,0X07,0XF7,0XB8,0X33,0X01,0X80,0X00,
- 0X60,0X03,0X03,0X03,0X01,0X82,0X00,0X18,0X00,0X06,0X00,0X18,0X03,0X01,0X80,0X00,
- 0X60,0X01,0XC6,0X03,0X01,0XC6,0X00,0X18,0X00,0X07,0XFF,0XF8,0X01,0XFF,0X80,0X00,
- 0X60,0X01,0X7C,0X07,0XC0,0X7C,0X00,0X18,0X00,0X06,0X00,0X18,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X21,0X86,0X00,0X07,0X00,0X00,0X00,0X10,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X31,0X86,0X00,0X07,0X00,0X03,0XFF,0XF8,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X65,0X66,0X00,0X02,0X00,0X00,0X00,0X68,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0XC7,0X7C,0X00,0X02,0X08,0X00,0X00,0XC0,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X95,0X6C,0X41,0XFF,0XFC,0X00,0X03,0X80,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X19,0X3D,0X6F,0XE1,0X82,0X0C,0X00,0X0E,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X3E,0XE9,0XA1,0X82,0X0C,0X00,0X0E,0X00,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X60,0X59,0X81,0X82,0X0C,0X00,0X0C,0X0C,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X6F,0XFD,0X81,0XFF,0XFC,0X1F,0XFF,0XFE,
- 0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0XE0,0X15,0X81,0X82,0X0C,0X00,0X0C,0X02,
- 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XA6,0X45,0X81,0X82,0X0C,0X00,0X0C,0X00,
- 0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0X27,0XC7,0X01,0X82,0X0C,0X00,0X0C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X26,0X47,0X01,0XFF,0XFC,0X00,0X0C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X26,0X5F,0X01,0X82,0X0B,0X00,0X0C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X26,0X77,0X01,0X02,0X03,0X00,0X0C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X26,0XEF,0X80,0X02,0X03,0X00,0X0C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X24,0X59,0XC0,0X02,0X03,0X00,0X0C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X38,0X30,0XE0,0X03,0XFF,0X80,0X7C,0X00,
- 0X00,0X21,0X02,0X10,0X21,0X02,0X10,0X00,0X38,0XE0,0X00,0X00,0X00,0X00,0X18,0X00,
- 0X00,0X3F,0X03,0XF0,0X3F,0X03,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- };
-
-
- void main(void)
- {
- P0M1 = 0; P0M0 = 0; //设置为准双向口
- P1M1 = 0; P1M0 = 0; //设置为准双向口
- P2M1 = 0; P2M0 = 0; //设置为准双向口
- P3M1 = 0; P3M0 = 0; //设置为准双向口
- P4M1 = 0; P4M0 = 0; //设置为准双向口
- P5M1 = 0; P5M0 = 0; //设置为准双向口
- P6M1 = 0; P6M0 = 0; //设置为准双向口
- P7M1 = 0; P7M0 = 0; //设置为准双向口
-
- DisableHC595(); //禁止掉学习板上的HC595显示,省电
-
- delay_ms(100); //启动等待,等LCD讲入工作状态
- LCDInit(); //LCM初始化
- delay_ms(5); //延时片刻(可不要)
- while(1)
- {
- LCDClear();
- DisplayImage(gImage_gxw);//显示图形
- delay_ms(5000);
- LCDClear();
- DisplayListChar(0,1,uctech); //显示字库中的中文数字
- DisplayListChar(0,2,net); //显示字库中的中文数字
- DisplayListChar(0,3,mcu); //显示字库中的中文
- DisplayListChar(0,4,qq); //显示字库中的中文数字
- delay_ms(5000);
- }
- }
-
-
-
- //========================================================================
- // 函数: void delay_ms(u8 ms)
- // 描述: 延时函数。
- // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2013-4-1
- // 备注:
- //========================================================================
- void delay_ms(u16 ms)
- {
- u16 i;
- do{
- i = MAIN_Fosc / 13000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
-
- void DisableHC595(void)
- {
- u8 i;
- P_HC595_SER = 1;
- for(i=0; i<20; i++)
- {
- P_HC595_SRCLK = 1;
- P_HC595_SRCLK = 0;
- }
- P_HC595_RCLK = 1;
- P_HC595_RCLK = 0; //锁存输出数据
- P_HC595_RCLK = 1;
- P_HC595_RCLK = 0; //锁存输出数据
- }
-
-
- //******************************************
- void LCD_delay(void)
- {
- NOP(10);
- }
-
-
- //写数据
- void WriteDataLCD(u8 WDLCD)
- {
- ReadStatusLCD(); //检测忙
- LCD_RS = 1;
- LCD_RW = 0;
- LCD_Data = WDLCD;
- LCD_delay();
- LCD_E = 1;
- LCD_delay();
- LCD_E = 0;
- }
-
- //写指令
- void WriteCommandLCD(u8 WCLCD,BuysC) //BuysC为0时忽略忙检测
- {
- if (BuysC) ReadStatusLCD(); //根据需要检测忙
- LCD_RS = 0;
- LCD_RW = 0;
- LCD_Data = WCLCD;
- LCD_delay();
- LCD_E = 1;
- LCD_delay();
- LCD_E = 0;
- }
-
- //读状态
- u8 ReadStatusLCD(void)
- {
- LCD_Data = 0xFF;
- LCD_RS = 0;
- LCD_RW = 1;
- LCD_delay();
- LCD_E = 1;
- LCD_delay();
- while (LCD_Data & Busy); //检测忙信号
- LCD_E = 0;
- return(LCD_Data);
- }
-
- void LCDInit(void) //LCM初始化
- {
- PSB = 1; //并口
- // PSB = 0; //SPI口
- delay_ms(10);
- LCD_RESET = 0;
- delay_ms(10);
- LCD_RESET = 1;
- delay_ms(100);
-
- WriteCommandLCD(0x30,1); //显示模式设置,开始要求每次检测忙信号
- WriteCommandLCD(0x01,1); //显示清屏
- WriteCommandLCD(0x06,1); // 显示光标移动设置
- WriteCommandLCD(0x0C,1); // 显示开及光标设置
- }
-
- void LCDClear(void) //清屏
- {
- WriteCommandLCD(0x01,1); //显示清屏
- WriteCommandLCD(0x34,1); // 显示光标移动设置
- WriteCommandLCD(0x30,1); // 显示开及光标设置
- }
-
-
- //按指定位置显示一串字符
- void DisplayListChar(u8 X, u8 Y, u8 code *DData)
- {
- u8 ListLength,X2;
- ListLength = 0;
- X2 = X;
- if(Y < 1) Y=1;
- if(Y > 4) Y=4;
- X &= 0x0F; //限制X不能大于16,Y在1-4之内
- switch(Y)
- {
- case 1: X2 |= 0X80; break; //根据行数来选择相应地址
- case 2: X2 |= 0X90; break;
- case 3: X2 |= 0X88; break;
- case 4: X2 |= 0X98; break;
- }
- WriteCommandLCD(X2, 1); //发送地址码
- while (DData[ListLength] >= 0x20) //若到达字串尾则退出
- {
- if (X <= 0x0F) //X坐标应小于0xF
- {
- WriteDataLCD(DData[ListLength]); //
- ListLength++;
- X++;
- }
- }
- }
-
- //图形显示122*32
- void DisplayImage (u8 code *DData)
- {
- u8 x,y,i;
- unsigned int tmp=0;
- for(i=0;i<9;) //分两屏,上半屏和下半屏,因为起始地址不同,需要分开
- {
- for(x=0;x<32;x++) //32行
- {
- WriteCommandLCD(0x34,1);
- WriteCommandLCD((0x80+x),1);//列地址
- WriteCommandLCD((0x80+i),1); //行地址,下半屏,即第三行地址0X88
- WriteCommandLCD(0x30,1);
- for(y=0;y<16;y++)
- WriteDataLCD(DData[tmp+y]);//读取数据写入LCD
- tmp+=16;
- }
- i+=8;
- }
- WriteCommandLCD(0x36,1); //扩充功能设定
- WriteCommandLCD(0x30,1);
- }
-
复制代码
|