今天使用Proteus自行繪制一個原理圖,用來學習LCD602,在Proteus中是沒有LCD1602的,所有使用了Lm06l來替代
1)按照我最初的想法是,在第一行顯示 who am I 在第二行顯示 china的
遇到的問題是,無法在第二行顯示數(shù)據(jù),write_com(0xC0);經(jīng)過我自行調(diào)試發(fā)現(xiàn)問題出現(xiàn)在這里,
我把這句代碼刪除掉之后,china是跟在who am I 后面顯示的
LCD.png (38.72 KB, 下載次數(shù): 67)
下載附件
電路原理圖
2019-4-20 21:50 上傳
下面是代碼
- #include<reg51.h>
- #include<string.h>
- #define uint unsigned int
- #define uchar unsigned char
-
- void init(void);
- void write_com(uchar com); //寫命令函數(shù)
- void write_data(uint date); //寫數(shù)據(jù)函數(shù)
- void delay(int z);
- sbit lcdrs =P2^7; //液晶屏數(shù)據(jù)/命令選擇端
- sbit lcdrw =P2^6; //液晶屏讀寫端
- sbit lcden =P2^5; //使能端
- void delay(int z) //延時1ms
- {
- int i,j;
- for(i=0;i<z;i++)
- for(j=0;j<110;j++);
- }
- void write_com(uchar com) //寫命令函數(shù)
- {
- lcdrs = 0;
- lcdrw = 0;
- P0 = com;
- delay(5);
- lcden = 0;
- delay(5);
- lcden = 1;
-
- }
- void write_data(uchar date ) //寫數(shù)據(jù)函數(shù)
- {
- lcdrs = 1;
- lcdrw = 0;
- P0 = date;
- delay(5);
- lcden = 0;
- delay(5);
- lcden = 1;
- }
- void init(void)
- {
- lcden = 0;//默認使能端是低電平
- lcdrw = 0;
- write_com(0x38);//顯示模式設置
- write_com(0x0f);// 開顯示,顯示光標,光標閃爍
- write_com(0x06);//當讀或者寫一個字符后地址加一,且光標加一
- //write_com(0x07)當讀或者寫一個字符后地址加一,且光標加一,且寫一個字符,整屏顯示左移
- write_com(0x80);
- }
- void main()
- {
- int mun1,mun2,i,j;
- uchar table1[20]="Who am I";
- uchar table2[20]="china";
-
- mun1 = strlen(table1);
- mun2 = strlen(table2);
- init();
- for(i=0;i<mun1;i++)
- {
- write_data(table1[i]);
- delay(200);
- }
-
- //重新設置顯示指針
- write_com(0xc0);//把指針移到第二行去顯示,如果沒有這句那么china會接在who am i 后面顯示,會發(fā)生字符被吞的現(xiàn)象
-
- for(j=0;j<mun2;j++)
- {
- write_data(table2[j]);
- delay(200);
- }
-
- while(1);
- }
復制代碼
|