




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
一、關于LCD1602:在編寫LCD1602程序前,我們必須了解其手冊上一些非常重要的信息,如果這些信息不能理解透徹,編程可能會遇到或多或少的問題,在此先大致歸納幾點。1 管腳:1602共16個管腳,但是編程用到的主要管腳不過三個,分別為:RS(數(shù)據(jù)命令選擇端),R/W(讀寫選擇端),E(使能信號);以后編程便主要圍繞這三個管腳展開進行初始化,寫命令,寫數(shù)據(jù)。以下具體闡述這三個管腳:RS為寄存器選擇,高電平選擇數(shù)據(jù)寄存器,低電平選擇指令寄存器。R/W為讀寫選擇,高電平進行讀操作,低電平進行寫操作。E端為使能端,后面和時序聯(lián)系在一起。除此外,D0D7分別為8位雙向數(shù)據(jù)線。2 操作時序:信號真值表RSR/WEN操作說明0010寫入指令D0D7011讀出的D0D7狀態(tài)字1010寫入D0D7數(shù)據(jù)111讀出D0D7數(shù)據(jù)注:關于E=H脈沖開始時初始化E為0,然后置E為1,再清0.讀取狀態(tài)字時,注意D7位,D7=1,禁止讀寫操作;D7=0,允許讀寫操作;所以對控制器每次進行讀寫操作前,必須進行讀寫檢測。(即后面的讀忙子程序)3指令集:LCD_1602 初始化指令小結(jié):0x38 設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口0x01 清屏0x0f 開顯示,顯示光標,光標閃爍0x08 關閉顯示0x0e 開顯示,顯示光標,光標不閃爍0x0c 開顯示,不顯示光標0x06 地址加1,當寫入數(shù)據(jù)的時候光標右移0x02 地址計數(shù)器AC=0;(此時地址為0x80) 光標歸原點,但是DDRAM中斷內(nèi)容不變0x18 光標和顯示一起向左移動 4顯示地址:LCD1602內(nèi)部RAM顯示緩沖區(qū)地址的映射圖,000F、404F分別對應LCD1602的上下兩行的每一個字符,只要往對應的RAM地址寫入要顯示字符的ASCII代碼,就可以顯示出來。5讀寫時序:時序圖1602手冊中有,這里不引用了。時序圖很重要,編程就是根據(jù)時序圖設置寄存器,讓LCD工作。二、LCD1602程序編寫流程:LCD1602在了解完以上信息后便可以編寫,這里我們把程序分為以下幾步:1定義LCD1602管腳,包括RS,R/W,E。這里定義是指這些管腳分別接在單片機哪些I/O口上?,F(xiàn)舉例如下:sbit RS=P20;sbit RW=P21;sbit EN=P22;2顯示初始化,在這一步進行初始化及設置顯示模式等操作,包括以下步驟:設置顯示方式 延時 清理顯示緩存 設置顯示模式通常推薦的初始化過程如下:寫指令38H延時5ms(以上不檢測忙信號)(以下要檢測忙信號)寫指令38H寫指令08H 關閉顯示寫指令01H 顯示清屏寫指令06H 光標移動設置寫指令0cH 顯示開及光標設置3設置顯示地址(寫顯示字符的位置)。4寫顯示字符的數(shù)據(jù)。三、LCD1602各子程序模塊及主程序編寫:現(xiàn)在按照上面編寫程序的流程,給出各子程序模塊及主程序的例子。1頭文件,宏定義,定義管腳等:#include#include #define uchar unsigned char#define uint unsigned intsbit RS=P20;sbit RW=P21;sbit EN=P22;uchar code table0=QQ:80359842; /此條語句為顯示字符串時定義的字符串數(shù)組2LCD基本初始化子程序:void LCD1602()EN=0;RS=1;RW=1;P0=0xff; /這里P0為與LCD D0D7相連的I/O口3讀忙子程序:void read_busy()P0=0xff;RS=0;RW=1;EN=1;while(P0&0x80); /P0和10000000相與,D7位若不為0,停在此處EN=0; /若為0跳出進入下一步;這條語句的作用就是檢測D7位/若忙在此等待,不忙跳出讀忙子程序執(zhí)行讀寫指令4寫指令寫數(shù)據(jù)子程序:void write(uchar i,bit j) /其中j=0,寫指令;j=1,寫數(shù)據(jù);read_busy();P0=i; RS=j;RW=0;EN=1;EN=0;5延時子程序:void delay(uint t) /功能為提供初始化等其他子程序中的延時t msuchar i;for(;t0;t-)for(i=0;i120;i+);6LCD初始化子程序:void init() /完全按照要求初始化流程來,中間省略了一步寫指令38Hdelay(15);write(0x38,0);delay(5);write(0x38,0);write(0x08,0);write(0x01,0);write(0x06,0);write(0x0c,0);7顯示單個字符子程序:void display_lcd_byte(uchar y,uchar x,uchar z) /Y=0,1(起始行)X=015(起始列)Z=想寫字符的ASCII碼 if(y) /是否顯示在第二行(若在第一行Y=0,不進入IF語句,若在第二行,進入IF語句 x+=0x40; /第二行起始地址加上列數(shù)為字符顯示地址x+=0x80; /設置數(shù)據(jù)指針位置write(x,0); write(z,1); /寫入數(shù)據(jù)8顯示字符串子程序:void display_lcd_text(uchar y,uchar x,uchar table) /Y,X同上字符顯示,table字符串數(shù)組 uchar z=0;uchar t;t=strlen(table)+x; / 求得字符串長度加上起始列位置while(xt) /功能為LCD顯示到字符串最后一個字符,防止字符串 /沒有16個字符,從而不夠位產(chǎn)生亂碼;display_lcd_byte(y,x,tablez); /逐位顯示數(shù)組內(nèi)字符x+;z+;9主程序:主程序里除了放入初始化程序外就是加入自己編寫的顯示子程序,根據(jù)你所要的不用功能可以編寫各種類型的顯示子程序,這里不做詳細介紹,以下舉例為顯示一個字符和顯示字符串的顯示子程序。void main()LCD1602();init();display_lcd_byte(0,0,A); / 顯示一個字符display_lcd_text(1,3,table); / 顯示字符串while(1);到此,讓LCD1602顯示的操作流程和編程思想基本可以告一段落了, 但是1602的功能實現(xiàn)遠不止這些。利用1602你可以做出動態(tài)效果的顯示,并且除了顯示一般字符外,1602還支持自定義字符等等其他一些功能,下面在最后簡單介紹下顯示動態(tài)效果和自定義字符。一、顯示動態(tài)效果:顯示動態(tài)效果包括讓一個字符或字符串原位置閃爍,或者前后移動等等。其實動態(tài)效果原理很簡單,就是簡單的利用延時。例如讓字符原位置閃爍,可以認為是先讓1602顯示字符,延時一段時間后,可以顯示空格或者直接清屏操作都可以達到讓字符消失不見的效果,再延時一段時間后再讓1602顯示這個字符。同理,讓字符前后移動也是這樣,例如讓字符在第一個位置顯示,延時一段時間后讓其在后面第二個位置顯示,只要顯示地址加1,然后顯示即可。字符串也是同樣的道理。在這里補充一點就是如何讓字符串從1602第16個地址外進入,動態(tài)向前移動。其實可以通過顯示地址表我們知道起始位置開始后1602一行只能顯示16個字符,但是一行的地址卻遠遠不止16個。大家可以看到第一行顯示地址是從0027,然而能顯示在1602可見范圍的只有000F,后面的位置其實就是起到一個緩沖的作用,你完全可以讓字符數(shù)據(jù)存在在10地址后的RAM中,只不過,我們無法看到就是了,如果存在10前的地址我們就能看到顯示。因此,我們可以先把顯示起始地址設在10地址后的某一個位置,然后讓字符顯示地址每次加1,當加到0F時,我們就可以看到字符串第一個字符出現(xiàn)在1602的最末一位,然后繼續(xù)向前移動。下面給出一段字符串移動顯示的例子:void display_lcd_byte(uchar y,uchar x,uchar z)if(y)x+=0x40;x+=0x80;write(x,0);write(z,1);void display_lcd_text(uchar y,uchar x,uchar table)uchar z=0;uchar t;t=strlen(table)+x;while(x=0;i-) /這里的循環(huán)就是為了字符串從后往前顯示display_lcd_text(0,i,table0); /i減一次,首個字符就往前去一位delay(200);while(1);二、顯示自定義字符:要想顯示自定義字符,首先就得取得想要的圖形或者字符的字模數(shù)組,可以通過手動提取的方法,取得相應的字模。如下圖所示,對應一個字符顯示區(qū)域。每8個字節(jié),組成一個點陣數(shù)組。要想讓某一格子顯示就讓那一位為1,每行自定義5位,全白為0x00;全黑為0x1f。一共8行,每行一位數(shù)據(jù)。將生成的點陣數(shù)組保存到CGRAM存儲器中,生成自定義字符。1602內(nèi)部CGRAM用于自定義的字符點陣的存儲,總共64字節(jié)。由上一步點陣提取可知,每一個字符由8個字節(jié)數(shù)據(jù)組成。所以64字節(jié)CGRAM存儲器,能夠存儲8組自定義字符的點陣數(shù)組。按照CGRAM地址劃分為 07為第一組,815為第二組,依次類推5663為第8組數(shù)據(jù)。CHARACTER CODE是數(shù)據(jù)的顯示地址,0-7的范圍,能存儲8位自定義的字符。(能存八個自定義,每個字符存放的)CGRAM ADDRESS是存儲數(shù)據(jù)的地址,從0-63共64個字節(jié).存儲64個數(shù)據(jù)。我們寫入的數(shù)據(jù)是0x400x7F,共128位。(把字符數(shù)組內(nèi)的8個數(shù)送進這8個地址,每存完一個字符的8位,下次地址直接轉(zhuǎn)到0x48)CGRAM DATA 字模每一行5位數(shù)據(jù)存內(nèi)部常用字符顯示時,顯示編碼是從0x20開始的。0x000x0F是專門留給自定義字符顯示的。0x000x07和0x080x0F內(nèi)容是一樣的。例如:調(diào)用0x01 位置和0x09位置,顯示的內(nèi)容是一樣的。LCD1602自定義顯示字符的方式共四步,如下面所示:1.設置向CGRAM中存入這個數(shù)據(jù).初始地址是0x40。然后存一位向后加8,總共能存8位自定義的字符。2.然后可以把自定義的數(shù)據(jù)送入到LCD的CGRAM中。3.向LCD寫指令,送入需要顯示數(shù)據(jù)的地址。4.向LCD寫指令,把顯示的數(shù)據(jù)指向LCD的CGRAM存儲的位置,顯示出自定義字符。舉例如下:1.建立一個字符數(shù)組;uch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司提成策劃方案(3篇)
- 推門聽課活動方案(3篇)
- 醫(yī)院食堂人群管理制度
- 室內(nèi)小房改造方案(3篇)
- 停水設備檢修方案(3篇)
- 醫(yī)院設備故障管理制度
- 建安企業(yè)倉儲管理制度
- 關于餐廳衛(wèi)生管理制度
- 物業(yè)地面改造方案(3篇)
- 危險崗位應急管理制度
- 炊事員安全試題及答案
- 計算機基礎考試知識試題及答案集
- 2025年下半年北京市昌平區(qū)東小口鎮(zhèn)招聘擬聘用易考易錯模擬試題(共500題)試卷后附參考答案
- 馬幫運輸協(xié)議書
- 山東省棗莊市市中學區(qū)五校聯(lián)考2025屆七年級數(shù)學第二學期期末考試模擬試題含解析
- 2025年中考道德與法治三輪沖刺:人工智能+文化建設 考題含答案
- 數(shù)字智慧方案未來醫(yī)院智慧孿生和空間創(chuàng)新
- 福建廈門雙十中學2025屆物理八下期末質(zhì)量跟蹤監(jiān)視試題含解析
- 2025年消防執(zhí)業(yè)資格考試題庫(消防應急救援裝備)消防設備操作規(guī)程試題
- 2024-2025學年四川省成都市高一語文下學期期末考試試卷(含答案)
- 制藥生產(chǎn)管理培訓
評論
0/150
提交評論