lcd1602的三種顯示模式仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
2(FWTRT20}K8YYNQKJYLVWK.png (42.92 KB, 下載次數: 76)
下載附件
2020-11-27 13:14 上傳
51hei截圖20201127130458.png (43.27 KB, 下載次數: 61)
下載附件
2020-11-27 13:14 上傳
51hei截圖20201127131035.png (41.72 KB, 下載次數: 80)
下載附件
2020-11-27 13:14 上傳
單片機源程序如下:
- #include <reg51.h>
- #define uc unsigned char
- #define ui unsigned int
- #define out P0
- sbit rs=P2^0;
- sbit rw=P2^1;
- sbit e=P2^2;
- void prime(void); //初始化函數
- void busy(void); //檢查忙標志位函數
- void command(uc com); //寫命令
- void wdata(uc dat); //寫數據
- void string(ui ad,uc *s); //指針直接輸入顯示函數(ad=行列位置,*s=字符)
- //void tu(ui h,ui l,ui d); //顯示單位字符函數(h=行,l=列,d=字符)
- //void display(ui h,ui l,ui z);//顯示三位數字字符函數 (h=行,l=列,z=字符)
- void delay(int x); //延遲函數
- void delay(x) //延遲函數
- {int i;
- while(x)
- {
- for(i=0;i<125;i++);
- x--;
- }
- }
- void busy(void) //檢查忙標志位函數
- {uc dt;
- do
- {dt=0xff;
- e=0;
- rs=0;
- rw=1;
- e=1;
- dt=out;
- }while(dt&0x80);
- e=0;
- }
- void command(uc com) //寫命令
- {busy();
- e=0;
- rs=0;
- rw=0;
- out=com;
- e=1;
- delay(1);
- e=0;
- delay(1);
- }
- void wdata(uc dat) //寫數據
- {busy();
- e=0;
- rs=1;
- rw=0;
- out=dat;
- e=1;
- delay(1);
- e=0 ;
- delay(1);
-
- }
- void prime(void) //初始化函數
- {command(0x38); //功能設置:5*7點陣,8位數據接口
- command(0x01); //清屏
- command(0x06); //顯示模式設置
- command(0x0c); //顯示開關及光標設置
- delay(1);
- }
- void string(ui ad,uc *s) //指針直接輸入顯示函數(ad=行列位置,*s=字符)
- {command(ad); //行列設置0x85:字符在第二行第五列開始顯示,0xcc:字符在第二行第十二列開始顯示。
- while(*s>0)
- {
- wdata(*s++);
- delay(10);
- }
- }
- //void display(ui h,ui l,ui z) //顯示單位字符函數(h=行,l=列,d=字符)
- //{ if(h==1) //如果h=1就在第一行
- // {
- // command(0x80+l); //l為多少就從哪里顯示
- // }
- // if(h==2) //如果h=2就在第二行
- // {
- // command(0xc0+l);
- // }
- // wbata(z); //只能輸入一個字符(可以是lcd1602可以顯示的任意字符)
- //}
- //void tu(ui h,ui l,ui d) //顯示三位數字字符函數(h=行,l=列,z=字符)
- //{ display(h,l,d/100%10+'0'); //只能顯示數字
- // display(h,l+1,d/10%10+'0');
- // display(h,l+2,d%10+'0');
- //}
- main()
- {prime();
- while(1)
- {ui a=121,b=567;
- string(0x80,"Come on");
- string(0xc0,"No question");
- // display(1,0,'1');
- // display(2,15,'A');
- // tu(1,0,b);
- // tu(2,0,a);
- delay(1000);
- command(0x01);
- delay(1);
- }
- }
復制代碼
所有資料51hei提供下載:
LCD1602.zip
(69.38 KB, 下載次數: 22)
2020-11-27 13:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|