按鈕1顯示字體,按鈕2顯示圖片
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (62.99 KB, 下載次數: 29)
下載附件
2022-1-20 17:57 上傳
屏幕截圖 2022-01-20 173332.png (30.4 KB, 下載次數: 51)
下載附件
2022-1-20 17:36 上傳
單片機源程序如下:
- #include <at89x51.h>
- #define RST P2_0
- #define E P2_1
- #define RW P2_2
- #define DI P2_3
- #define CS1 P2_5
- #define CS2 P2_4
- #define LCDPORT P0
- #define BUSYSTATUS P0_7 //忙狀態位。
- #define LCDSTARTROW 0xC0 //設置起始行指令。
- #define LCDPAGE 0xB8 //設置頁指令。
- #define LCDLINE 0x40 //設置列指令。
- bit bCheckBusy()//讀忙標志位
- {
- LCDPORT=0xFF;
- RW=1;
- DI=0;
- E=1;
- E=0;
- return BUSYSTATUS;
- }
- void vWriteData(unsigned char ucData)//寫數據
- {
- while(bCheckBusy());
- LCDPORT=0xFF;
- RW=0;
- DI=1;
- LCDPORT=ucData;
- E=1;
- E=0;
- }
- void vWriteCMD(unsigned char ucCMD)//寫指令
- {
- while(bCheckBusy());
- LCDPORT=0xFF;
- RW=0;
- DI=0;
- LCDPORT=ucCMD;
- E=1;
- E=0;
- }
- void vLCDInitialize()//LCD初始化函數
- {
- CS1=1;
- CS2=1;
- vWriteCMD(0x38); //8位形式,兩行字符。
- vWriteCMD(0x0F); //開顯示。
- vWriteCMD(0x01); //清屏。
- vWriteCMD(0x06); //畫面不動,光標右移。
- vWriteCMD(LCDSTARTROW); //設置起始行。
- }
- //顯示自定義行
- //在8×128的格子里顯示自定義長度的一行
- void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)
- {
- unsigned char ucCount; //取值范圍:ucPage:0~7;ucLine:0~127;
- if(ucLine<64) //ucWidth:0~127;ucLine+ucWidth<1128。
- {
- CS1=1;
- CS2=0;
- vWriteCMD(LCDPAGE+ucPage);
- vWriteCMD(LCDLINE+ucLine);
- if((ucLine+ucWidth)<64)
- {
- for(ucCount=0;ucCount<ucWidth;ucCount++)
- vWriteData(*(ucaRow+ucCount));
- }
- else
- {
- for(ucCount=0;ucCount<64-ucLine;ucCount++)
- vWriteData(*(ucaRow+ucCount));
- CS1=0;
- CS2=1;
- vWriteCMD(LCDPAGE+ucPage);
- vWriteCMD(LCDLINE);
- for(ucCount=64-ucLine;ucCount<ucWidth;ucCount++)
- vWriteData(*(ucaRow+ucCount));
- }
- }
- else
- {
- CS1=0;
- CS2=1;
- vWriteCMD(LCDPAGE+ucPage);
- vWriteCMD(LCDLINE+ucLine-64);
- for(ucCount=0;ucCount<ucWidth;ucCount++)
- vWriteData(*(ucaRow+ucCount));
- }
- }
- //此函數將16×16漢字顯示在8×128的格子里。 漢字顯示函數
- void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap)
- {
- vShowCustomRow(ucPage,ucLine,16,ucaChinMap);
- vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16);
- }
- //此函數將8×16字符顯示在8×128的格子里。 字符顯示函數
- void vShowOneChar(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)
- {
- vShowCustomRow(ucPage,ucLine,8,ucaCharMap);
- vShowCustomRow(ucPage+1,ucLine,8,ucaCharMap+8);
- }
- //顯示圖片
- void vShowGraph(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char ucHigh,unsigned char * ucaGraph)
- {
- unsigned char ucCount;
- for(ucCount=0;ucCount<ucHigh;ucCount++)
- vShowCustomRow(ucPage+ucCount,ucLine,ucWidth,ucaGraph+ucCount*ucWidth);
- }
復制代碼
Keil代碼與Proteus仿真下載:
lcd.7z
(76.83 KB, 下載次數: 49)
2022-1-20 17:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|