12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这个程序写得很好,自己也是看的别人写的很好的程序,但是它代码不够完整,注释不详细,经过自己的修改加以完善。

另外我发现很多的测试代码都没有附上测试代码效果图,在本人的代码下面有自己拍的效果图,填补不足之处。

自己在找资料的过程中花掉很多的财富值,如果大家看得起该代码请评五分加以下载,在下感激不尽!
/*******************************************
程序名称:12864液晶经典驱动程序(带中文字库)
功能:12864测试程序
修改作者:王程
修改时间:2014年2月5日23:22:32
********************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
// P0 为数据口
sbit LCD_RS=P2^0; //数据、命令选择端口
sbit LCD_RW=P2^1; //液晶读写控制
sbit LCD_EN=P2^2; //液晶使能控制
sbit PSB = P2^4; //模式选择1为并行0为串行
sbit RES = P2^5;//复位端口低电平复位,上电之前进行复位,为了稳定!unsigned char code DAT[] = "我爱我家"; //测试显示的汉字,下面的A为测试显示的英文
/*******************************************
函数名称:Delay_1ms (晶振为12M)
功能:延时约1ms的时间
参数:无
返回值:无
********************************************/
void delay_1ms(uint x)
{
uint i,j;
for(j = 0;j < x;j++)
for(i=0;i<110;i++);
}
/*******************************************
函数名称:write_cmd
功能:向液晶中写控制命令
参数:cmd--控制命令
返回值:无
********************************************/
void write_cmd(uchar cmd)
{
uchar lcdtemp = 0;
LCD_RS=0;
LCD_RW=1;
do //经典判忙方式,精简{
LCD_EN=1;
delay_1ms(2);
lcdtemp = P0;
LCD_EN=0;
}
while(lcdtemp & 0x80);
LCD_RW=0;
P0 = cmd;
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*******************************************
函数名称:write_data
功能:向液晶中写显示数据
参数:dat--显示数据
返回值:无
********************************************/ void write_data(uchar dat)
{
uchar lcdtemp = 0;
LCD_RS=0;
LCD_RW=1;
do //经典判忙方式
{
LCD_EN=1;
delay_1ms(2);
lcdtemp = P0;
LCD_EN=0;
}
while(lcdtemp & 0x80);
LCD_RS=1;
LCD_RW=0;
P0 = dat;
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*******************************************
函数名称:lcd_int
功能:初始化液晶模块
参数:无
返回值:无
********************************************/
void lcd_int(void)
{
delay_1ms(40); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式delay_1ms(1); //延时
RES=0; //复位
delay_1ms(1); //延时
RES=1; //复位置高
delay_1ms(10);
write_cmd(0x30); //基本指令集
delay_1ms(5);
write_cmd(0x30); //基本指令集
delay_1ms(5);
write_cmd(0x08); // 地址归位
delay_1ms(5);
write_cmd(0x10); //光标设置
delay_1ms(5);
write_cmd(0x0c); //整体显示打开,游标关闭
delay_1ms(5);
write_cmd(0x01); //清除显示
delay_1ms(5);
write_cmd(0x06); //游标右移
delay_1ms(5);
write_cmd(0x80); //设定显示的起始地址
delay_1ms(5);
}
函数名称:main
功能:测试1602初始化函数模块
参数:无
返回值:无
********************************************/
void main()
{
uchar i;
char *a = DAT;//使用指针,指向字符串地址
lcd_int();
write_data('A'); //每个显示都是用的两个字节,必须写两次
write_data(' ');//再写一次,不然乱显示(如果不加就再显示一个别的字母)for(i=0;i<8;i++)
{
write_data(*a);//将地址当作数据传给12864
a++;//一个汉字传送两次,因为一个汉字占用两个字节,两次传完
}
write_cmd(0x90);//一行显示八个汉字,第一行0x80-87,第二行0x90开始
a = DAT;
for(i=0;i<8;i++)
{
write_data(*a);
a++;
}
while(1); //停住,不然重复的初始化显示,作为测试用
}
/*******************************************
代码测试效果图片两两张
由于曝光度影响,拍了两张
********************************************/。

相关文档
最新文档