51 液晶1602学习
扫描二维码
随时随地手机看文章
学习1602液晶,也是把握要好其初始化的有关知识
1. RS数据命令选择端 我们的板子上连的是P10
R/W读写选择短端 我们的板子上连的是P11
E使能信号 我们的板子上连的是P12
D0-D7 我们的板子上连的是P20-P27
2. 我们只训练的写命令,所以R/W就可以一直置零
3. 基本时序操作:
写指令:RS=0 R/W=0 D0-D7=指令码 E=高脉冲
写数据:RS=1 R/W=0 D0-D7=数据 E=高脉冲
4. 初始化设置
(1)显示模式设置(通过写指令写入):0x38(设置16x2显示,5x7点,8位数据口)
(2)显示开/关及光标设置(具体详见老郭的第八节资料里的1602液晶说明.pdf第二页)
5. 数据控制
数据指针0x80+地址码(第一行是0-0x27,其中0-0x0f可以直接显示出来,后边用的滚屏时候;第二行是0x40-0x67,其中0x40-0x4f可以直接显示出来,后边用滚屏)
清屏指令(0x01)
/*2012年3月23日15:37:27只是显示两行数据,如何显示,初始化程序等显示结果为:第一行显示“HOLYSHIT!”第二行显示“Erra!”*/#include#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P1^0;sbitlcdrw=P1^1;sbitlcden=P1^2;voiddelay(uchar);//声明延时函数voidwrite_com(ucharcom);//声明写命令函数voidwrite_data(uchardate);//声明写数据函数voidinit();//声明初始化函数uchari,j;ucharcodet0[]="HOLYSHIT!";//注意此数组当为字符串时候为"",若为单个字母则直接调取写数据函数不过要加''ucharcodet1[]="Erra!";voidmain(){init();for(i=0;i<10;i++){write_data(t0[i]);delay(5);}write_com(0x80+0x40);//换行写数据,操作指针地址for(j=0;j<5;j++){write_data(t1[j]);delay(5);}while(1);//等待}voiddelay(ucharz)//延时函数{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit()//1602初始化{lcden=0;//使能1602lcdrw=0;//定为写write_com(0x38);//显示模式设置write_com(0x0f);//显示开关及光标设置write_com(0x06);write_com(0x01);//所有显示清零write_com(0x80);//数据指针初始化}voidwrite_com(ucharcom)//写指令函数{lcdrs=0;//写指令P2=com;delay(5);lcden=1;//有时序可以看出,要有一个高脉冲..delay(5);lcden=0;}voidwrite_data(uchardate)//写数据函数{lcdrs=1;//写数据P2=date;delay(5);lcden=1;//有时序可以看出,要有一个高脉冲..delay(5);lcden=0;}
/*2012年3月23日16:11:46只是显示两行数据,如何显示,初始化程序等显示结果为:第一行显示“HOLYSHIT!”第二行显示“Erra!”现将数据写到不在屏上直接显示的后边,然后采用整屏左移命令(0x18),使其整屏左移,具体的命令在老郭的第八节课件里的EN_TC1602.pdf中有说明*/#include#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P1^0;sbitlcdrw=P1^1;sbitlcden=P1^2;voiddelay(uchar);//声明延时函数voidwrite_com(ucharcom);//声明写命令函数voidwrite_data(uchardate);//声明写数据函数voidinit();//声明初始化函数uchari,j,num;ucharcodet0[]="HOLYSHIT!";//注意此数组当为字符串时候为"",若为单个字母则直接调取写数据函数不过要加''ucharcodet1[]="Erra!";voidmain(){init();for(i=0;i<10;i++){write_data(t0[i]);delay(5);}write_com(0x80+0x50);//换行写数据,操作指针地址for(j=0;j<5;j++){write_data(t1[j]);delay(5);}for(num=0;num<16;num++)//整屏左移16个位置{write_com(0x18);delay(200);}while(1);//等待}voiddelay(ucharz)//延时函数{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit()//1602初始化{lcden=0;//使能1602lcdrw=0;//定为写write_com(0x38);//显示模式设置write_com(0x0f);//显示开关及光标设置write_com(0x06);write_com(0x01);//所有显示清零write_com(0x80+0x10);//数据指针初始化到第0x80+0x10位}voidwrite_com(ucharcom)//写指令函数{lcdrs=0;//写指令P2=com;delay(5);lcden=1;//有时序可以看出,要有一个高脉冲..delay(5);lcden=0;}voidwrite_data(uchardate)//写数据函数{lcdrs=1;//写数据P2=date;delay(5);lcden=1;//有时序可以看出,要有一个高脉冲..delay(5);lcden=0;}