51微控制器1602-1
阿新 • • 發佈:2018-12-06
/************************************************************************************** * LCD1602液晶顯示實驗 * 實現現象:下載程式後插上LCD1602液晶在開發板上,即可顯示 注意事項:如果不想讓點陣模組顯示,可以將74HC595模組上的JP595短接片拔掉。 ***************************************************************************************/ #include "reg52.h" //此檔案中定義了微控制器的一些特殊功能暫存器 #include "lcd.h" typedef unsigned int u16; //對資料型別進行宣告定義 typedef unsigned charu8; u8 Disp[]=" Pechin Science "; /******************************************************************************* * 函 數 名 : main * 函式功能 : 主函式 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main(void) { u8 i; LcdInit(); for(i=0;i<16;i++) { LcdWriteData(Disp[i]); } while(1); }
1 #include "lcd.h" 2 3 /******************************************************************************* 4 * 函 數 名 : Lcd1602_Delay1ms 5 * 函式功能 : 延時函式,延時1ms 6 * 輸 入 : c 7 * 輸 出 : 無 8 * 說 名 : 該函式是在12MHZ晶振下,12分頻微控制器的延時。 9 *******************************************************************************/ 10 11 void Lcd1602_Delay1ms(uint c) //誤差 0us 12 { 13 uchar a,b; 14 for (; c>0; c--) 15 { 16 for (b=199;b>0;b--) 17 { 18 for(a=1;a>0;a--); 19 } 20 } 21 22 } 23 24 /******************************************************************************* 25 * 函 數 名 : LcdWriteCom 26 * 函式功能 : 向LCD寫入一個位元組的命令 27 * 輸 入 : com 28 * 輸 出 : 無 29 *******************************************************************************/ 30 #ifndef LCD1602_4PINS //當沒有定義這個LCD1602_4PINS時 31 void LcdWriteCom(uchar com) //寫入命令 32 { 33 LCD1602_E = 0; //使能 34 LCD1602_RS = 0; //選擇傳送命令 35 LCD1602_RW = 0; //選擇寫入 36 37 LCD1602_DATAPINS = com; //放入命令 38 Lcd1602_Delay1ms(1); //等待資料穩定 39 40 LCD1602_E = 1; //寫入時序 41 Lcd1602_Delay1ms(5); //保持時間 42 LCD1602_E = 0; 43 } 44 #else 45 void LcdWriteCom(uchar com) //寫入命令 46 { 47 LCD1602_E = 0; //使能清零 48 LCD1602_RS = 0; //選擇寫入命令 49 LCD1602_RW = 0; //選擇寫入 50 51 LCD1602_DATAPINS = com; //由於4位的接線是接到P0口的高四位,所以傳送高四位不用改 52 Lcd1602_Delay1ms(1); 53 54 LCD1602_E = 1; //寫入時序 55 Lcd1602_Delay1ms(5); 56 LCD1602_E = 0; 57 58 LCD1602_DATAPINS = com << 4; //傳送低四位 59 Lcd1602_Delay1ms(1); 60 61 LCD1602_E = 1; //寫入時序 62 Lcd1602_Delay1ms(5); 63 LCD1602_E = 0; 64 } 65 #endif 66 /******************************************************************************* 67 * 函 數 名 : LcdWriteData 68 * 函式功能 : 向LCD寫入一個位元組的資料 69 * 輸 入 : dat 70 * 輸 出 : 無 71 *******************************************************************************/ 72 #ifndef LCD1602_4PINS 73 void LcdWriteData(uchar dat) //寫入資料 74 { 75 LCD1602_E = 0; //使能清零 76 LCD1602_RS = 1; //選擇輸入資料 77 LCD1602_RW = 0; //選擇寫入 78 79 LCD1602_DATAPINS = dat; //寫入資料 80 Lcd1602_Delay1ms(1); 81 82 LCD1602_E = 1; //寫入時序 83 Lcd1602_Delay1ms(5); //保持時間 84 LCD1602_E = 0; 85 } 86 #else 87 void LcdWriteData(uchar dat) //寫入資料 88 { 89 LCD1602_E = 0; //使能清零 90 LCD1602_RS = 1; //選擇寫入資料 91 LCD1602_RW = 0; //選擇寫入 92 93 LCD1602_DATAPINS = dat; //由於4位的接線是接到P0口的高四位,所以傳送高四位不用改 94 Lcd1602_Delay1ms(1); 95 96 LCD1602_E = 1; //寫入時序 97 Lcd1602_Delay1ms(5); 98 LCD1602_E = 0; 99 100 LCD1602_DATAPINS = dat << 4; //寫入低四位 101 Lcd1602_Delay1ms(1); 102 103 LCD1602_E = 1; //寫入時序 104 Lcd1602_Delay1ms(5); 105 LCD1602_E = 0; 106 } 107 #endif 108 /******************************************************************************* 109 * 函 數 名 : LcdInit() 110 * 函式功能 : 初始化LCD屏 111 * 輸 入 : 無 112 * 輸 出 : 無 113 *******************************************************************************/ 114 #ifndef LCD1602_4PINS 115 void LcdInit() //LCD初始化子程式 116 { 117 LcdWriteCom(0x38); //開顯示 118 LcdWriteCom(0x0c); //開顯示不顯示游標 119 LcdWriteCom(0x06); //寫一個指標加1 120 LcdWriteCom(0x01); //清屏 121 LcdWriteCom(0x80); //設定資料指標起點 122 } 123 #else 124 void LcdInit() //LCD初始化子程式 125 { 126 LcdWriteCom(0x32); //將8位匯流排轉為4位匯流排 127 LcdWriteCom(0x28); //在四位線下的初始化 128 LcdWriteCom(0x0c); //開顯示不顯示游標 129 LcdWriteCom(0x06); //寫一個指標加1 130 LcdWriteCom(0x01); //清屏 131 LcdWriteCom(0x80); //設定資料指標起點 132 } 133 #endif
#ifndef __LCD_H_ #define __LCD_H_ /********************************** 當使用的是4位資料傳輸的時候定義, 使用8位取消這個定義 **********************************/ #define LCD1602_4PINS /********************************** 包含標頭檔案 **********************************/ #include<reg52.h> //---重定義關鍵詞---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif /********************************** PIN口定義 **********************************/ #define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^7; sbit LCD1602_RW=P2^5; sbit LCD1602_RS=P2^6; /********************************** 函式宣告 **********************************/ /*在51微控制器12MHZ時鐘下的延時函式*/ void Lcd1602_Delay1ms(uint c); //誤差 0us /*LCD1602寫入8位命令子函式*/ void LcdWriteCom(uchar com); /*LCD1602寫入8位資料子函式*/ void LcdWriteData(uchar dat) ; /*LCD1602初始化子程式*/ void LcdInit(); #endif