基于proteus的單片機仿真lcd_第1頁
基于proteus的單片機仿真lcd_第2頁
基于proteus的單片機仿真lcd_第3頁
基于proteus的單片機仿真lcd_第4頁
基于proteus的單片機仿真lcd_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、基于proteus的51單片機仿真實例六十三、字符液晶LCD1602顯示單個字符實例1、字符液晶LCD1602顯示字符的過程:使用1602型液晶顯示字符必須解決三個問題:代縣字符ASCII標準媽的產生;液晶顯示模式的設置;字符顯示位置的指定。1)字符ASCII標準碼產生常用字符的標準ASCII碼無需人工產生,在程序中定義字符常量或字符串常量時,C語言在編譯后會自動產生其標準ASCII碼。職演講澄澄的標準ASCII碼通過單片機的IO口送入數據線使用存儲器(DDRAM),內部控制線路就會自動將字符傳送到顯示器上。2)液晶顯示模式的設置要讓液晶顯示字符,必須對有無光標、光標的移動方向、光標是否閃爍及

2、字符的移動方向等進行設置。這樣才能獲得所需的顯示效果。1602液晶顯示模式的設置是通過控制指令對內部的控制器進行控制而實現的。常用的控制指令需要查詢液晶的數據手冊獲得。3)字符顯示位置的指定想要在液晶的某一位置顯示特定的字符,則必須指定其顯示位置,顯示位置的地址需要查詢1602型LCD內部地址獲得。2、1602型LCD的讀寫操作LCD是一個慢速顯示器件,所以在寫每一條指令之前一定要先讀取LCD的忙碌狀態(當然也可以通過加入一個比較長的延時時間來避開液晶的忙狀態,但是這種方法并不合理)。如果LCD正忙于處理其他指令,就需要等待處理結束;如果不忙,再執行寫操作。為此,1602型液晶專門設了一個忙碌

3、標志位BF,該位位于從1602讀取的8位數據的最高位,如果BF為0,表示LCD處于空閑狀態,反之則處于忙碌狀態。3、1602液晶顯示一個字符的操作過程為:讀狀態-寫指令-寫數據-自動顯示。1)讀狀態要將待顯字符寫入液晶模塊,首先就要檢測LCD是否忙碌,只有在LCD處于空閑狀態的時候,才能夠將待顯字符寫入2)寫指令寫指令包括寫顯示模式控制指令和寫入地址。3)寫數據寫數據實際上是將待顯字符的標準ASCII碼寫入LCD的數據顯示存儲器(DDRAM)4)自動顯示數據寫入液晶模塊后,字符產生器(CGROM)將自動讀出字符的字形點陣數據,并將字符顯示在液晶屏上,這個過程由LCD自動完成,無需人工干預4、1

4、602液晶的初始化過程使用1602液晶顯示字符之前,需要對其顯示模式進行初始化設置,過程如此下:1)延時15ms,給液晶一段反應時間2)寫指令0x38H,尚未開始工作,所以這里不需要檢測忙信號,將液晶的顯示模式設置為“16*2顯示,5*7點陣,8位數據接口”3)延時5ms4)寫指令,不需要檢測忙信號5)延時5ms6)寫指令,不需要檢測忙信號7)延時5ms(連續設置3次,確保設置成功)8)以后每次寫指令,讀/寫數據操作都要檢測忙信號 5、在keil c51中新建工程ex51,編寫如下程序代碼,編譯并生成ex51.hex文件/用LCD顯示字符'A'#include<

5、reg51.h>    /包含單片機寄存器的頭文件#include<intrins.h>  /包含_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

6、引腳/*函數功能:延時1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒*/void delay1ms()   unsigned char i,j;   for(i=0;i<10;i+)   for(j=0;j<33;j+)    ;     /*函數功能:延時若干毫秒入口參數:n*/ void delay(unsigned char n)    unsigned

7、 char i; for(i=0;i<n;i+)    delay1ms(); /*函數功能:判斷液晶模塊的忙碌狀態返回值:result。result=1,忙碌;result=0,不忙*/ unsigned char BusyTest(void)      bit result; RS=0;       /根據規定,RS為低電平,RW為高電平時,可以讀狀態    RW=1; 

8、60;  E=1;        /E=1,才允許讀寫    _nop_();   /空操作    _nop_();    _nop_();     _nop_();   /空操作四個機器周期,給硬件反應時間     result=BF;  /將忙碌標志電平賦給result E=0; &#

9、160;  return result;  /*函數功能:將模式設置指令或顯示地址寫入液晶模塊入口參數:dictate*/void WriteInstruction (unsigned char dictate)       while(BusyTest()=1); /如果忙就等待  RS=0;                  /根據規定,RS和

10、R/W同時為低電平時,可以寫入指令  RW=0;     E=0;                   /E置低電平(根據表8-6,寫指令時,E為高脈沖,                   

11、;          / 就是讓E從0到1發生正跳變,所以應先置"0"  _nop_();  _nop_();             /空操作兩個機器周期,給硬件反應時間  P0=dictate;            /將數據

12、送入P0口,即寫入指令或地址  _nop_();  _nop_();  _nop_();  _nop_();               /空操作四個機器周期,給硬件反應時間  E=1;                   /E置

13、高電平  _nop_();  _nop_();  _nop_();  _nop_();               /空操作四個機器周期,給硬件反應時間   E=0;                  /當E由高電平跳變成低電平時

14、,液晶模塊開始執行命令 /*函數功能:指定字符顯示的實際地址入口參數:x*/ void WriteAddress(unsigned char x)      WriteInstruction(x|0x80); /顯示位置的確定方法規定為"80H+地址碼x" /*函數功能:將數據(字符的標準ASCII碼)寫入液晶模塊入口參數:y(為字符常量)*/ void WriteData(unsigned char y)     while(BusyTest(

15、)=1);     RS=1;           /RS為高電平,RW為低電平時,可以寫入數據   RW=0;   E=0;            /E置低電平(根據表8-6,寫指令時,E為高脈沖,          

16、             / 就是讓E從0到1發生正跳變,所以應先置"0"   P0=y;           /將數據送入P0口,即將數據寫入液晶模塊   _nop_();   _nop_();    _nop_();    

17、_nop_();       /空操作四個機器周期,給硬件反應時間   E=1;          /E置高電平   _nop_();   _nop_();   _nop_();  _nop_();        /空操作四個機器周期,給硬件反應時間  E=0; 

18、60;          /當E由高電平跳變成低電平時,液晶模塊開始執行命令 /*函數功能:對LCD的顯示模式進行初始化設置*/void LcdInitiate(void)   delay(15);             /延時15ms,首次寫指令時應給LCD一段較長的反應時間   WriteInstruction(0x38);

19、0; /顯示模式設置:16×2顯示,5×7點陣,8位數據接口 delay(5);   /延時5ms WriteInstruction(0x38); delay(5); WriteInstruction(0x38); delay(5); WriteInstruction(0x0f);  /顯示模式設置:顯示開,有光標,光標閃爍 delay(5); WriteInstruction(0x06);  /顯示模式設置:光標右移,字符不移 delay(5); WriteInstruction(0x01);  /清屏幕指令,將以前的顯示內容清除 de

溫馨提示

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

評論

0/150

提交評論