兩個C51單片機的測試程序,一個是連接八條數據線的,另一個是連接四條數據線的。附件里有原程序和proteus仿真文件。
Snap3.jpg (68.49 KB, 下載次數: 87)
下載附件
2019-6-27 15:50 上傳
Snap4.jpg (60.25 KB, 下載次數: 83)
下載附件
2019-6-27 15:50 上傳
單片機源程序如下:
- /*=========================================================
- LCD2004模擬口線接線方式 連接線圖: =
- ---------------------------------------------------- =
- | LCM-----51 | LCM-----51 | LCM------51 | | =
- ---------------------------------------------------| =
- | | RS -------P3.5 | | =
- | | RW------- GND | | =
- | | E --------P3.4 | | =
- | | | | =
- | DB4-----P0.4 | | | =
- | DB5-----P0.5 | | | =
- | DB6-----P0.6 | | | =
- | DB7-----P0.7 | | | =
- ---------------------------------------------------- =
- [注:AT89S51 使用 11.0592M 晶體震蕩器] =
- =========================================================*/
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LCM_RS=P3^5; //定義引腳
- sbit LCM_E =P3^4;
- sbit LED =P2^5;//LED 的輸出鎖存端
- sbit dula =P2^6;//數碼管的段鎖存端 74HC573
- sbit wela =P2^7;//數碼管的位鎖存端
- #define LCM_Data P0
- #define Busy 0x80 //用于檢測 LCM 狀態字中的 Busy 標識
- uchar num;
- uchar code table0[]="ABCDEFGHIJKLMNOPQRST";
- uchar code table1[]="01234567890123456789";
- uchar code table2[]="UVWXYZ!@#%&?+<[>]*-;";
- uchar code table3[]="abcdefghijklmnopqrst";
- void delay(uint z)//延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- //寫數據 RS=H,RW=L,D0~D7=數據,E=高脈沖
- void WriteDataLCM(uchar Data)
- {
- LCM_RS = 1;
- LCM_E = 0;
- LCM_Data =(Data & 0xF0);
- LCM_E = 1;
- delay(5);
- LCM_E = 0;
- LCM_Data =(Data & 0x0F)<<4;
- LCM_E = 1;
- delay(5);
- LCM_E = 0;
- }
- //寫指令 RS=L,RW=L,D0~D7=指令碼,E=高脈沖
- void WriteCommandLCM(uchar Command)
- {
- delay(5); //短暫延時,代替檢測忙狀態
- LCM_RS = 0;
- LCM_E = 0;
- LCM_Data =( Command & 0xF0);
- LCM_E = 1;
- delay(5);
- LCM_E = 0;
- LCM_Data =( Command & 0x0F )<<4;
- LCM_E = 1;
- delay(5);
- LCM_E = 0;
- }
- //讀數據 RS=H,RW=H,E=H
- //讀狀態 RS=L,RW=H,E=H
- //由于不要檢測忙,所以讀數據和讀狀態兩個函數省略
- void LCMInit(void) //LCM 初始化
- {
- WriteCommandLCM(0x03);
- delay(5);
- WriteCommandLCM(0x02);
- delay(5);
- WriteCommandLCM(0x28); //顯示模式設置,開始要求每次檢測忙信號
- WriteCommandLCM(0x0C);
- WriteCommandLCM(0x06); // 顯示光標移動設置
- WriteCommandLCM(0x01);
- delay(5);
- }
- void main(void)
- {
- LED=0; //將LED的鎖存端關閉
- dula=0;//將數碼管的段鎖存端關閉
- wela=0;//將數碼管的位鎖存端關閉
- LCMInit(); //LCM 初始化
- //第一行顯示
- WriteCommandLCM(0x80+0x00);
- for(num=0;num<20;num++)
- {
- WriteDataLCM(table0[num]);
- delay(250);
- }
- //第二行顯示
- WriteCommandLCM(0x80+0x40);
- for(num=0;num<20;num++)
- {
- WriteDataLCM(table1[num]);
- delay(250);
- }
- //第三行顯示
- WriteCommandLCM(0x80+0x14);
- for(num=0;num<20;num++)
- {
- WriteDataLCM(table2[num]);
- delay(250);
- }
- //第四行顯示
- WriteCommandLCM(0x80+0x54);
- for(num=0;num<20;num++)
- -----限于篇幅余下內容下載附件----------
復制代碼
所有資料51hei提供下載:
2004液晶測試程序.rar
(79.32 KB, 下載次數: 49)
2019-6-27 15:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|