1、头文件 #ifndef _LCD12846_H_ #define _LCD12864_H_ #define uchar unsigned char #define uint unsigned int void LCD12864_Delay(uint z); void LCD12864_SendByte(uchar zdata); void LCD12864_WriteCom(uchar com); void LCD12864_WriteDate(uchar date); void LCD12864_Init(); void LCD12864_CleanScans(); void LCD12864_SetPos(uchar x,uchar y); void LCD12864_DisplayString(uchar *s); #endif 2、C文件 #include <reg52.h> #include "LCD12864.h" //LCD12864端口定义 //sbit LCD12864_CS = P3^5;//片选信号 sbit LCD12864_SID = P2^6;//数据信号 sbit LCD12864_SCLK = P2^7;//时钟信号 //sbit LCD12864_RST = P3^7;//复位信号 /******************************************************************** * 名称 : LCD12864_Delay() * 功能 : 延时 * 输入 : z * 输出 : 无 ***********************************************************************/ void LCD12864_Delay(uint z) { // uchar i; // while(z --) for(i = 0;i < 120;i ++); uint a,b; for(a=0; a<z; a++) for(b=0; b<120; b++); } /******************************************************************** * 名称 : LCD12864_sendbyte * 功能 : 按照液晶的串口通信协议,发送数据 * 输入 : zdata * 输出 : 无 ***********************************************************************/ void LCD12864_SendByte(uchar zdata) { uchar i; for(i = 0;i < 8;i ++) { if((zdata<<i) & 0x80) { LCD12864_SID = 1; } else { LCD12864_SID = 0; } LCD12864_SCLK = 0; LCD12864_SCLK = 1; } } /******************************************************************** * 名称 : LCD12864_write_com() * 功能 : 写串口指令,分三字节写完 * 输入 : com * 输出 : 无 ***********************************************************************/ void LCD12864_WriteCom(uchar com) { //LCD12864_CS = 1;//打开片选,高电平有效 LCD12864_SendByte(0xf8); //第一字节 LCD12864_SendByte(com & 0xf0); //第二字节 LCD12864_SendByte((com << 4) & 0xf0);//第三字节 } /******************************************************************** * 名称 : LCD12864_write_date() * 功能 : 写串口指令 * 输入 : date * 输出 : 无 ***********************************************************************/ void LCD12864_WriteDate(uchar date) { //LCD12864_CS = 1; //打开片选 LCD12864_SendByte(0xfa);//第一字节 LCD12864_SendByte(date & 0xf0); //第二字节 LCD12864_SendByte((date << 4) & 0xf0);//第三字节 } /******************************************************************** * 名称 : LCD12864_init() * 功能 : 12864初始化函数 * 输入 : com * 输出 : 无 ***********************************************************************/ void LCD12864_Init() { //LCD12864_RST = 0; LCD12864_Delay(100); //LCD12864_RST = 1; LCD12864_Delay(100); //LCD12864_WriteCom(0x34);//扩充指令集动作 ,绘图不显示 LCD12864_WriteCom(0x30);//基本指令集动作, 绘图不显示 LCD12864_WriteCom(0x0c);//开显示,不显示游标和游标位置 LCD12864_WriteCom(0x01);//清屏 LCD12864_Delay(100); } /******************************************************************** * 名称 :LCD_clean_scans() * 功能 : 清屏 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void LCD12864_CleanScans() { LCD12864_WriteCom(0x01);//清屏 } /******************************************************************** * 名称 : LCD12864_pos() * 功能 : 设定显示位置 * 输入 : x,y * 输出 : 无 ***********************************************************************/ void LCD12864_SetPos(uchar x,uchar y) { uchar pos; if(x == 0) x = 0x80; else if(x == 1) x = 0x90; else if(x == 2) x = 0x88; else if(x == 3) x = 0x98; pos = x + y; LCD12864_WriteCom(pos);//显示地址 } /******************************************************************** * 名称 : LCD12864_dishz() * 功能 : 显示字符串 * 输入 : *s * 输出 : 无 ***********************************************************************/ void LCD12864_DisplayString(uchar *s) { uchar i = 0; while(s[i] != '/0') { LCD12864_WriteDate(s[i]); i++; LCD12864_Delay(5); } }