|
本人親測,絕對沒有問題,如果不對,請注意你的端口定義,而且數據口只能用P0,我用的是89S52,12M,祝大家好運!- #include <regx52.h>
- #include <intrins.h>
- #include <string.h>
- #define uchar unsigned char //自定義關鍵字
- #define BUSY_FLAG P0_7 //液晶模塊忙標志
- #define MPU_RS_CH P2_7 //寄存器選擇輸入 RS
- #define MPU_RW_CH P2_6 //讀寫控制 RW
- #define MPU_ENABLE P2_5 //使能控制 E
- #define MPU_PS_CH P3_6 //串/并傳輸控制 PSB
- #define MPU_RESET P3_7 //液晶復位控制 RST
- #define LCD_DATA P0 //液晶數據口 P0
- #define LOW 0 //低電平
- #define HIGH 1 //高電平
- #define OFF 0 //邏輯關
- #define ON 1 //邏輯開
- //-----------------------------------------------
- //液晶模塊指令集定義
- #define cClearDisplay 0x01 //清顯示指令
- #define cEntryModeSet 0x06 //設置輸入模式
- #define cDisplayOnCtrl 0x0c //設置開顯控制
- #define cFunctionSetB 0x30 //功能設定(基本指令)
- #define cFunctionSetE 0x34 //功能設定(擴充指令)
- //-----------------------------------------------
- void checkLcdBusy (void)
- {
- LCD_DATA = 0xff;
- MPU_RS_CH = LOW;
- MPU_RW_CH = HIGH;
- MPU_ENABLE = HIGH;
- while (BUSY_FLAG);
- MPU_ENABLE = LOW;
- }
- //===============================================
- void delayMs (uchar ms)
- {
- uchar i;
- while (--ms)
- for (i = 0; i < 125; i++);
- }
- //===============================================
- void delaySec (uchar sec)
- {
- uchar i;
- while (--sec)
- for (i = 0; i < 200; i++)
- delayMs (6);
- }
- //===============================================
- void lcdWriteCommand (uchar Command)
- {
- checkLcdBusy();
- MPU_RS_CH = LOW;
- MPU_RW_CH = LOW;
- LCD_DATA = Command;
- MPU_ENABLE = HIGH;
- delayMs(1);
- MPU_ENABLE = LOW;
- }
- //===============================================
- void lcdClear (void)
- {
- lcdWriteCommand(cClearDisplay);
- }
- //===============================================
- void lcdInit (void) //初始化LCD子程序
- {
- MPU_RESET = LOW;
- delayMs(40);
- MPU_RESET = HIGH;
- delayMs(1);
- MPU_PS_CH = HIGH;
- lcdWriteCommand(cFunctionSetE);
- lcdWriteCommand(cFunctionSetB);
- lcdClear();
- lcdWriteCommand(cEntryModeSet);
- lcdWriteCommand(cDisplayOnCtrl);
- }
- //===============================================
- void lcdWriteData (uchar Data)
- {
- checkLcdBusy();
- MPU_RS_CH = HIGH;
- MPU_RW_CH = LOW;
- LCD_DATA = Data;
- MPU_ENABLE = HIGH;
- delayMs(1);
- MPU_ENABLE = LOW;
- }
- //===============================================
- void dispString (uchar X, Y, speed, uchar *msg)
- {
- if (X == 0) X = 0x80;
- else if (X == 1) X = 0x90;
- else if (X == 2) X = 0x88;
- else if (X == 3) X = 0x98;
- Y = X + Y;
- lcdWriteCommand(Y);
- while (*msg)
- {
- lcdWriteData(*msg++);
- delayMs(speed);
- }
- }
- //===============================================
- void main (void)
- {
- lcdInit (); lcdClear();
- while(1)
- {
- dispString(0, 0, 100, "西安建筑科技大學"); delaySec(1);
- dispString(1, 0, 100, "雁塔路中段13號"); delaySec(1);
- dispString(2, 1, 100, "冶金工程學院"); delaySec(1);
- dispString(3, 1, 100, "材料加工工程"); delaySec(6);
- lcdClear();
- dispString(0, 1, 100, "單片機開發"); delaySec(1);
- dispString(1, 0, 100, "電子設備研究開發"); delaySec(1);
- dispString(2, 1, 100, "工業過程模擬"); delaySec(1);
- dispString(3, 0, 100, "結構有限元分析"); delaySec(6);
- lcdClear();
- dispString(0, 0, 100, "聯系人:crasyboye"); delaySec(1);
- dispString(1, 0, 100, "電話:02982203875"); delaySec(1);
- dispString(2, 0, 100, "手機:13519198625"); delaySec(1);
- dispString(3, 1, 100, "共同學習共同進步"); delaySec(6);
- lcdClear();
- }
- }
復制代碼
|
|