LCD1602應用實例_第1頁
LCD1602應用實例_第2頁
LCD1602應用實例_第3頁
LCD1602應用實例_第4頁
LCD1602應用實例_第5頁
免費預覽已結束,剩余14頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LCD1602 應用實例液晶顯示屏1602 的使用一、 LCD1602 顯示字符 A斧頭幫2010-05-10Proteus 仿真圖C 程序:/*實例 81:用 LCD 顯示字符 A*/#include/包含單片機寄存器的頭文件#include/包含_nop_()函數定義的頭文件sbit RS=P20;/寄存器選擇位,將RS 位定義為P2.0 引腳sbit RW=P21;/讀寫選擇位,將RW 位定義為P2.1 引腳sbit E=P22;/ 使能信號位,將E 位定義為 P2.2 引腳sbit BF=P07;/ 忙碌標志位,將 BF 位定義為P0.7 引腳/*函數功能:延時1ms(3j+2)*i=

2、(3 33+2) 10=1010(微秒 ),可以認為是1 毫秒1LCD1602 應用實例*/void delay1ms()unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+);/*函數功能:延時若干毫秒入口參數: n*/void delay(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*函數功能:判斷液晶模塊的忙碌狀態返回值: result。 result=1,忙碌 ;result=0 ,不忙*/unsigned char BusyTest(void)bit result;RS=

3、0; /根據規定, RS 為低電平, RW 為高電平時,可以讀狀態 RW=1;E=1;/E=1 ,才允許讀寫_nop_();/ 空操作_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間result=BF;/將忙碌標志電平賦給resultE=0;return result;/*函數功能:將模式設置指令或顯示地址寫入液晶模塊入口參數: dictate*/void WriteInstruction (unsigned char dictate)while(BusyTest()=1);/如果忙就等待RS=0;/ 根據規定, RS 和 R/W 同時為低電平時,可以寫入

4、指令2LCD1602 應用實例RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時,E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0_nop_();_nop_();/空操作兩個機器周期,給硬件反應時間P0=dictate;/ 將數據送入P0 口,即寫入指令或地址_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:指定字符

5、顯示的實際地址入口參數: x*/void WriteAddress(unsigned char x)WriteInstruction(x|0 x80); / 顯示位置的確定方法規定為80H+ 地址碼 x/*函數功能:將數據(字符的標準ASCII 碼 ) 寫入液晶模塊入口參數: y(為字符常量 )*/void WriteData(unsigned char y)while(BusyTest()=1);RS=1;/RS 為高電平, RW 為低電平時,可以寫入數據RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時, E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0P0

6、=y;/將數據送入P0 口,即將數據寫入液晶模塊_nop_();_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();3LCD1602 應用實例_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:對LCD 的顯示模式進行初始化設置*/void LcdInitiate(void)delay(15);/ 延時 15ms,首次寫指令時應給LCD 一段較長的反應時間WriteInstruction(0 x38);/顯示模式設

7、置:162 顯示, 5 7 點陣, 8 位數據接口delay(5);/ 延時 5msWriteInstruction(0 x38);delay(5);WriteInstruction(0 x38);delay(5);WriteInstruction(0 x0f); / 顯示模式設置:顯示開,有光標,光標閃爍delay(5);WriteInstruction(0 x06); /顯示模式設置:光標右移,字符不移delay(5);WriteInstruction(0 x01); /清屏幕指令,將以前的顯示內容清除delay(5);void main(void)/主函數LcdInitiate();/調

8、用 LCD 初始化函數WriteAddress(0 x07);/ 將顯示地址指定為第1 行第 8 列WriteData(A);/ 將字符常量 A 寫入液晶模塊/字符的字形點陣讀出和顯示由液晶模塊自動完成while(1);4LCD1602 應用實例二、 LCD1602 循環右移顯示字符串斧頭幫2010-05-10Proteus 仿真圖:C 程序:/用 LCD 循環右移顯示 Welcome to China#include/包含單片機寄存器的頭文件#include/包含_nop_()函數定義的頭文件sbit RS=P20;/寄存器選擇位,將RS 位定義為P2.0 引腳sbit RW=P21;/讀寫

9、選擇位,將RW 位定義為P2.1 引腳sbit E=P22;/ 使能信號位,將E 位定義為 P2.2 引腳sbit BF=P07;/ 忙碌標志位,將 BF 位定義為P0.7 引腳unsigned char code string =Welcome to China;/*函數功能:延時1ms(3j+2)*i=(3 33+2) 10=1010(微秒 ),可以認為是1 毫秒*/void delay1ms()5LCD1602 應用實例unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+);/*函數功能:延時若干毫秒入口參數: n*/void delay(uns

10、igned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*函數功能:判斷液晶模塊的忙碌狀態返回值: result。 result=1,忙碌 ;result=0 ,不忙*/unsigned char BusyTest(void)bit result;RS=0; /根據規定, RS 為低電平, RW 為高電平時,可以讀狀態 RW=1;E=1;/E=1 ,才允許讀寫_nop_();/ 空操作_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間result=BF;/將忙碌標志電平賦給resultE=0;return

11、 result;/*函數功能:將模式設置指令或顯示地址寫入液晶模塊入口參數: dictate*/void WriteInstruction (unsigned char dictate)while(BusyTest()=1); / 如果忙就等待RS=0;/ 根據規定, RS 和 R/W 同時為低電平時,可以寫入指令RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時,E 為高脈沖,6LCD1602 應用實例/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0_nop_();_nop_();/空操作兩個機器周期,給硬件反應時間P0=dictate;/ 將數據送入 P0 口,即寫入指令

12、或地址_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:指定字符顯示的實際地址入口參數: x*/void WriteAddress(unsigned char x)WriteInstruction(x|0 x80); / 顯示位置的確定方法規定為80H+ 地址碼 x/*函數功能:將數據(字符的標準ASCII 碼 ) 寫入液晶模塊入口參數: y(為字

13、符常量 )*/void WriteData(unsigned char y)while(BusyTest()=1);RS=1;/RS 為高電平, RW 為低電平時,可以寫入數據RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時, E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0P0=y;/將數據送入P0 口,即將數據寫入液晶模塊_nop_();_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間7LCD160

14、2 應用實例E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:對LCD 的顯示模式進行初始化設置*/void LcdInitiate(void)delay(15);/ 延時 15ms,首次寫指令時應給LCD 一段較長的反應時間WriteInstruction(0 x38);/顯示模式設置:162 顯示, 5 7 點陣, 8 位數據接口delay(5);/ 延時 5msWriteInstruction(0 x38);delay(5);WriteInstruction(0 x38);delay(5);WriteInstruction(0 x0f); / 顯示模式設置:顯

15、示開,有光標,光標閃爍delay(5);WriteInstruction(0 x06); /顯示模式設置:光標右移,字符不移delay(5);WriteInstruction(0 x01); /清屏幕指令,將以前的顯示內容清除delay(5);void main(void)/主函數unsigned char i;LcdInitiate();/調用 LCD 初始化函數delay(10);while(1)WriteInstruction(0 x01);/ 清顯示:清屏幕指令WriteAddress(0 x00);/ 設置顯示位置為第一行的第5 個字i = 0;while(stringi != 0)

16、/ 顯示字符WriteData(stringi);i+;delay(150);while(1);for(i=0;i4;i+)delay(250);8LCD1602 應用實例三、 LCD1602 顯示隨機數檢測結果斧頭幫2010-05-10Proteus 仿真圖:C 程序:/用 LCD 顯示適時檢測隨機數結果#include/ 包含單片機寄存器的頭文件#include/包含隨機函數rand() 的定義文件#include/包含_nop_()函數定義的頭文件sbit RS=P20;/寄存器選擇位,將RS 位定義為P2.0 引腳sbit RW=P21;/讀寫選擇位,將RW 位定義為P2.1 引腳sb

17、it E=P22;/ 使能信號位,將E 位定義為 P2.2 引腳sbit BF=P07;/ 忙碌標志位,將 BF 位定義為P0.7 引腳unsigned char code digit =0123456789; /定義字符數組顯示數字unsigned char code string =Test Result; /定義字符數組顯示提示信息/*函數功能:延時1ms(3j+2)*i=(3 33+2) 10=1010(微秒 ),可以認為是1 毫秒9LCD1602 應用實例*/void delay1ms()unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+)

18、;/*函數功能:延時若干毫秒入口參數: n*/void delay(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*函數功能:判斷液晶模塊的忙碌狀態返回值: result。 result=1,忙碌 ;result=0 ,不忙*/unsigned char BusyTest(void)bit result;RS=0;/根據規定, RS 為低電平, RW 為高電平時,可以讀狀態RW=1;E=1;/E=1 ,才允許讀寫_nop_();/ 空操作_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間r

19、esult=BF;/將忙碌標志電平賦給resultE=0;/ 將 E 恢復低電平return result;/*函數功能:將模式設置指令或顯示地址寫入液晶模塊入口參數: dictate*/void WriteInstruction (unsigned char dictate)while(BusyTest()=1); / 如果忙就等待RS=0;/ 根據規定, RS 和 R/W 同時為低電平時,可以寫入指令10LCD1602 應用實例RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時,E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0_nop_();_nop_();

20、/空操作兩個機器周期,給硬件反應時間P0=dictate;/ 將數據送入P0 口,即寫入指令或地址_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:指定字符顯示的實際地址入口參數: x*/void WriteAddress(unsigned char x)WriteInstruction(x|0 x80); / 顯示位置的確定方法規定為80H+ 地

21、址碼 x/*函數功能:將數據(字符的標準ASCII 碼 ) 寫入液晶模塊入口參數: y(為字符常量 )*/void WriteData(unsigned char y)while(BusyTest()=1);RS=1;/RS 為高電平, RW 為低電平時,可以寫入數據RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時, E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0P0=y;/將數據送入P0 口,即將數據寫入液晶模塊_nop_();_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_no

22、p_();11LCD1602 應用實例_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:對LCD 的顯示模式進行初始化設置*/void LcdInitiate(void)delay(15);/ 延時 15ms,首次寫指令時應給LCD 一段較長的反應時間WriteInstruction(0 x38);/顯示模式設置:162 顯示, 5 7 點陣, 8 位數據接口delay(5);/ 延時 5ms,給硬件一點反應時間WriteInstruction(0 x38);delay(5);WriteInstru

23、ction(0 x38); / 連續三次,確保初始化成功delay(5);WriteInstruction(0 x0c);/顯示模式設置:顯示開,無光標,光標不閃爍delay(5);WriteInstruction(0 x06);/ 顯示模式設置:光標右移,字符不移delay(5);WriteInstruction(0 x01);/清屏幕指令,將以前的顯示內容清除delay(5);/*函數功能:主函數*/void main(void)unsigned char i;/定義變量 i 指向字符串數組元素unsigned int x;/定義變量,儲存檢測結果unsigned char D1,D2,D

24、3,D4,D5;/ 分別儲存采集的個位、十位、百位、千位和萬位數字LcdInitiate();/ 調用 LCD 初始化函數delay(10);/ 延時 10ms,給硬件一點反應時間WriteAddress(0 x02);/ 從第 1 行第 3 列開始顯示i = 0;/ 指向字符數組的第1 個元素while(stringi != 0)WriteData(stringi);i+;/指向下字符數組一個元素while(1)/ 無限循環x=rand();/模擬數據采集/返回一個 0 到 32767 之間的為隨機數,對rand 的相繼調用將產生相同序列的隨機數12LCD1602 應用實例D1=x%10;/

25、 計算個位數字D2=(x%100)/10;/ 計算十位數字D3=(x%1000)/100;/ 計算百位數字D4=(x%10000)/1000;/ 計算千位數字D5=x/10000;/ 計算萬位數字WriteAddress(0 x45);/ 從第 2 行第 6 列開始顯示WriteData(digitD5);/將萬位數字的字符常量寫入LCDWriteData(digitD4);/將千位數字的字符常量寫入LCDWriteData(digitD3);/將百位數字的字符常量寫入LCDWriteData(digitD2);/將十位數字的字符常量寫入LCDWriteData(.);/ 將小數點的字符常量寫

26、入LCDWriteData(digitD1);/將個位數字的字符常量寫入LCDfor(i=0;i4;i+)/延時 1s(每 1s 采集一次數據)delay(250);/ 延時 250ms四、 LCD1602 電子時鐘的設計斧頭幫2010-05-11Proteus 仿真圖:13LCD1602 應用實例程序:/*液晶時鐘設計功能:簡易時鐘,顯示時分秒,利用中斷定時器0進行時間參數的確定,每一秒并不精確等于實際一秒,誤差只有幾微秒到幾十微秒斧頭幫 2010.5.11*/#include/ 包含單片機寄存器的頭文件#include/包含隨機函數 rand() 的定義文件#include/包含 _nop

27、_() 函數定義的頭文件sbit RS=P20;/寄存器選擇位,將RS 位定義為 P2.0 引腳sbit RW=P21;/ 讀寫選擇位,將RW 位定義為P2.1 引腳sbit E=P22;/ 使能信號位,將E 位定義為 P2.2 引腳sbit BF=P07;/忙碌標志位,將 BF 位定義為P0.7 引腳unsigned char code digit =0123456789;/定義字符數組顯示數字unsigned char code string =BeiJing Time; /定義字符數組顯示提示信息unsigned char count;/ 定義變量統計中斷累計次數unsigned cha

28、r s,m,h;/ 定義變量儲存秒、分鐘和小時/*函數功能:延時1ms(3j+2)*i=(3 33+2) 10=1010(微秒 ),可以認為是1 毫秒*/void delay1ms()unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+);/*函數功能:延時若干毫秒入口參數: n*/void delay(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*函數功能:判斷液晶模塊的忙碌狀態返回值: result。 result=1,忙碌 ;result=0 ,不忙*/14LCD1602 應

29、用實例unsigned char BusyTest(void)bit result;RS=0;/根據規定, RS 為低電平, RW 為高電平時,可以讀狀態RW=1;E=1;/E=1 ,才允許讀寫_nop_();/空操作_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間result=BF;/將忙碌標志電平賦給resultE=0;/將 E 恢復低電平return result;/*函數功能:將模式設置指令或顯示地址寫入液晶模塊入口參數: dictate*/void WriteInstruction (unsigned char dictate)while(Busy

30、Test()=1);/ 如果忙就等待RS=0;/ 根據規定, RS 和 R/W 同時為低電平時,可以寫入指令RW=0;E=0;/E 置低電平 (根據表 8-6,寫指令時,E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0_nop_();_nop_();/ 空操作兩個機器周期,給硬件反應時間P0=dictate;/將數據送入P0 口,即寫入指令或地址_nop_();_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間E=

31、0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:指定字符顯示的實際地址入口參數: x*/void WriteAddress(unsigned char x)15LCD1602 應用實例WriteInstruction(x|0 x80); / 顯示位置的確定方法規定為80H+ 地址碼 x/*函數功能:將數據(字符的標準ASCII 碼 ) 寫入液晶模塊入口參數: y(為字符常量 )*/void WriteData(unsigned char y)while(BusyTest()=1);RS=1;/RS 為高電平, RW 為低電平時,可以寫入數據RW=0;E=0;/E 置低

32、電平 ( 根據表 8-6,寫指令時, E 為高脈沖,/ 就是讓 E 從 0 到 1 發生正跳變,所以應先置0P0=y;/ 將數據送入P0 口,即將數據寫入液晶模塊_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應時間E=1;/E 置高電平_nop_();_nop_();_nop_();_nop_();/ 空操作四個機器周期,給硬件反應時間E=0;/ 當 E 由高電平跳變成低電平時,液晶模塊開始執行命令/*函數功能:對LCD 的顯示模式進行初始化設置*/void LcdInitiate(void)delay(15);/ 延時 15ms,首次寫指令時應

33、給LCD 一段較長的反應時間WriteInstruction(0 x38);/顯示模式設置:16 2 顯示, 5 7 點陣, 8 位數據接口delay(5);/ 延時 5ms,給硬件一點反應時間WriteInstruction(0 x38);delay(5);WriteInstruction(0 x38);/連續三次,確保初始化成功delay(5);WriteInstruction(0 x0c);/顯示模式設置:顯示開,無光標,光標不閃爍delay(5);WriteInstruction(0 x06);/顯示模式設置:光標右移,字符不移delay(5);WriteInstruction(0 x

34、01);/清屏幕指令,將以前的顯示內容清除delay(5);16LCD1602 應用實例/*函數功能:顯示小時*/void DisplayHour()unsigned char i,j;i=h/10;/取整運算,求得十位數字j=h%10;/取余運算,求得各位數字WriteAddress(0 x44);/寫顯示地址,將十位數字顯示在第2 行第 5 列WriteData(digiti);/ 將十位數字的字符常量寫入LCDWriteData(digitj);/ 將個位數字的字符常量寫入LCD/*函數功能:顯示分鐘*/void DisplayMinute()unsigned char i,j;i=m/10;/ 取整運算,求得十位數字j=m%10;/ 取余運算,求得各位數字WriteAddress(0 x47);/寫顯示地址,將十位數字顯示在第2 行第 8 列WriteData(digiti);/ 將十位數字的字符常量寫入LCDWriteData(digitj);/ 將個位數字的字符常量寫入LCD/*函數功能:顯示秒*/void DisplaySecond()unsigned char i,j;i=s/10;/ 取整運算,求得十位數字j=s%10;/取余運算,求得各位數字WriteAddress(0 x4a);/寫顯示地址,將十位數字顯示在第2 行第

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論