51 液晶1602學(xué)習(xí)
學(xué)習(xí)1602液晶,也是把握要好其初始化的有關(guān)知識(shí)
1. RS數(shù)據(jù)命令選擇端 我們的板子上連的是P10
R/W讀寫選擇短端 我們的板子上連的是P11
E使能信號(hào) 我們的板子上連的是P12
D0-D7 我們的板子上連的是P20-P27
2. 我們只訓(xùn)練的寫命令,所以R/W就可以一直置零
3. 基本時(shí)序操作:
寫指令:RS=0 R/W=0 D0-D7=指令碼 E=高脈沖
寫數(shù)據(jù):RS=1 R/W=0 D0-D7=數(shù)據(jù) E=高脈沖
4. 初始化設(shè)置
?。?)顯示模式設(shè)置(通過寫指令寫入):0x38(設(shè)置16x2顯示,5x7點(diǎn),8位數(shù)據(jù)口)
?。?)顯示開/關(guān)及光標(biāo)設(shè)置(具體詳見老郭的第八節(jié)資料里的1602液晶說明.pdf第二頁(yè))
5. 數(shù)據(jù)控制
數(shù)據(jù)指針0x80+地址碼(第一行是0-0x27,其中0-0x0f可以直接顯示出來,后邊用的滾屏?xí)r候;第二行是0x40-0x67,其中0x40-0x4f可以直接顯示出來,后邊用滾屏)
清屏指令(0x01)
/*2012年3月23日15:37:27只是顯示兩行數(shù)據(jù),如何顯示,初始化程序等顯示結(jié)果為:第一行顯示“HOLYSHIT!”第二行顯示“Erra!”*/#include#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P1^0;sbitlcdrw=P1^1;sbitlcden=P1^2;voiddelay(uchar);//聲明延時(shí)函數(shù)voidwrite_com(ucharcom);//聲明寫命令函數(shù)voidwrite_data(uchardate);//聲明寫數(shù)據(jù)函數(shù)voidinit();//聲明初始化函數(shù)uchari,j;ucharcodet0[]="HOLYSHIT!";//注意此數(shù)組當(dāng)為字符串時(shí)候?yàn)?",若為單個(gè)字母則直接調(diào)取寫數(shù)據(jù)函數(shù)不過要加''ucharcodet1[]="Erra!";voidmain(){init();for(i=0;i<10;i++){write_data(t0[i]);delay(5);}write_com(0x80+0x40);//換行寫數(shù)據(jù),操作指針地址for(j=0;j<5;j++){write_data(t1[j]);delay(5);}while(1);//等待}voiddelay(ucharz)//延時(shí)函數(shù){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit()//1602初始化{lcden=0;//使能1602lcdrw=0;//定為寫write_com(0x38);//顯示模式設(shè)置write_com(0x0f);//顯示開關(guān)及光標(biāo)設(shè)置write_com(0x06);write_com(0x01);//所有顯示清零write_com(0x80);//數(shù)據(jù)指針初始化}voidwrite_com(ucharcom)//寫指令函數(shù){lcdrs=0;//寫指令P2=com;delay(5);lcden=1;//有時(shí)序可以看出,要有一個(gè)高脈沖..delay(5);lcden=0;}voidwrite_data(uchardate)//寫數(shù)據(jù)函數(shù){lcdrs=1;//寫數(shù)據(jù)P2=date;delay(5);lcden=1;//有時(shí)序可以看出,要有一個(gè)高脈沖..delay(5);lcden=0;}
/*2012年3月23日16:11:46只是顯示兩行數(shù)據(jù),如何顯示,初始化程序等顯示結(jié)果為:第一行顯示“HOLYSHIT!”第二行顯示“Erra!”現(xiàn)將數(shù)據(jù)寫到不在屏上直接顯示的后邊,然后采用整屏左移命令(0x18),使其整屏左移,具體的命令在老郭的第八節(jié)課件里的EN_TC1602.pdf中有說明*/#include#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P1^0;sbitlcdrw=P1^1;sbitlcden=P1^2;voiddelay(uchar);//聲明延時(shí)函數(shù)voidwrite_com(ucharcom);//聲明寫命令函數(shù)voidwrite_data(uchardate);//聲明寫數(shù)據(jù)函數(shù)voidinit();//聲明初始化函數(shù)uchari,j,num;ucharcodet0[]="HOLYSHIT!";//注意此數(shù)組當(dāng)為字符串時(shí)候?yàn)?",若為單個(gè)字母則直接調(diào)取寫數(shù)據(jù)函數(shù)不過要加''ucharcodet1[]="Erra!";voidmain(){init();for(i=0;i<10;i++){write_data(t0[i]);delay(5);}write_com(0x80+0x50);//換行寫數(shù)據(jù),操作指針地址for(j=0;j<5;j++){write_data(t1[j]);delay(5);}for(num=0;num<16;num++)//整屏左移16個(gè)位置{write_com(0x18);delay(200);}while(1);//等待}voiddelay(ucharz)//延時(shí)函數(shù){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit()//1602初始化{lcden=0;//使能1602lcdrw=0;//定為寫write_com(0x38);//顯示模式設(shè)置write_com(0x0f);//顯示開關(guān)及光標(biāo)設(shè)置write_com(0x06);write_com(0x01);//所有顯示清零write_com(0x80+0x10);//數(shù)據(jù)指針初始化到第0x80+0x10位}voidwrite_com(ucharcom)//寫指令函數(shù){lcdrs=0;//寫指令P2=com;delay(5);lcden=1;//有時(shí)序可以看出,要有一個(gè)高脈沖..delay(5);lcden=0;}voidwrite_data(uchardate)//寫數(shù)據(jù)函數(shù){lcdrs=1;//寫數(shù)據(jù)P2=date;delay(5);lcden=1;//有時(shí)序可以看出,要有一個(gè)高脈沖..delay(5);lcden=0;}