//***************************************************************** /* 程序功能:顯示兩行字符并且整屏左移 (程序使用在接口為4位的1602液晶) 涉及芯片:1602液晶顯示器 */ //***************************************************************** #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit rs=P2^0;//數據/命令選擇端(H/L) sbit rw=P2^1;//讀/寫選擇端(H/L) sbit en=P2^2; //使能選擇端 uchar code mingzi[]="Gui fa zhi !_! "; //定義數據mingzi【】 uchar code num[]="tel:18778434282 "; //定義數組num【】 void delay(uint time)//延時函數(運行的時間與晶振有關系) { uint i,j; for(i=time;i>0;i--) for(j=110;j>0;j--); } void write_com(uchar mingling)//命令輸入函數 { uchar gao,di; //定義高、低四位 gao=mingling&0xf0;//分出高四位 di=(mingling<<4)&0xf0;//分出低四位 //==========================================讀走高四位 P2=gao;//讓數據(mingling)高四位有效 rs=0;//rs端為低電平時,為接收命令 delay(5); en=1; //en一個高脈沖讀走高四位數據(mingling) delay(5); en=0;//把使能端拉回低電平 //============================================讀走低四位 delay(5); P2=di;//讓數據(mingling)低四位有效 rs=0;//rs端為低電平時,為接收命令 delay(5); en=1 ;//en一個高電平讀走低四位命令(mingling) delay(5); en=0;//把使能端拉回低電平 } void write_date(uchar shuju)//數據輸入函數 { uchar gao,di; gao=shuju&0xf0;//分出高四位 di=(shuju<<4)&0xf0;//分出低四位 //=======================================讀走高四位 P2=gao;//讓數據(shuju)高四位有效 rs=1;//rs端為高電平時,為接收數據 delay(5); en=1;//en一個高電平讀走低四位數據 (shuju) delay(5); en=0;//把使能端拉回低電平 //============================================讀走低四位 delay(5); P2=di;//讓數據(shuju)低四位有效 rs=1;//rs端為高電平時,為接收數據 delay(5); en=1;//en一個高電平讀走低四位數據(shuju) delay(5); en=0;//把使能端拉回低電平 } void chushihua() { rw=0;//把數據/命令選擇端先置為零 en=0;//把使能端先置為零 write_com(0x28);//設置16*12顯示,5*7點陣,4位數據接口 write_com(0x01);//清屏 write_com(0x0c);//顯示開啟,不顯示光標 write_com(0x06);//整屏不移動 } void main()//主函數 { uint i,j; chushihua();//對液晶初始化 while(1)//死循環 { write_com(0x80); for(i=0;i<16;i++) { write_date(mingzi[i]); } write_com(0x80+0x40); for(j=0;j<16;j++) { write_date(num[j]); } write_com(0x18);//寫控制字,在英文文檔里介紹。0x18為左移,0x1c為右移 } }