版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1602液晶顯示器資料字符液晶在實際的產(chǎn)品中運用的也比較多了,前幾天留意了一下,發(fā)現(xiàn)宿舍門前的自動售水機就是采用的1602液晶進行顯示的。而且對于單片機的學習而言,掌握1602的用法是每一個學習者必然要經(jīng)歷的過程。在此,我將使用1602過程中遇到的問題以及感受記錄下來,希望能夠給初學者帶來一點指導,少走一點彎路。所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個字符。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。1602液晶的正面(綠色背光,黑色字體)1602液晶背面(1602液晶的正面(綠色背光,黑色字體)1602液晶背面(綠色背光,黑色字體)另一種1602液晶模塊,顯示屏是藍色字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,引腳定義如下表所示:
?引腳號,引腳名='電平''輸入/輸出?作用'1Uss電源地2Ucc電源(,卯)3Uee時比調(diào)整電壓’4RS:0,1-;輸入:'歉煽-5R/W;0/1-;輸入:既向L施寫入捐今或數(shù)據(jù)仁從司D讀取信息6E:;輸入:使能信號,,間博取信息,(下降沿)執(zhí)容指令?’'7:0/1』'?輸入/輸出數(shù)據(jù)總線1詢頃最低位)SDB1'0/1'?輸入/輸出教據(jù)總線linel9DB2'0/1'輸入/輸出數(shù)據(jù)總線1赤210'0/1'輸入/輸出.教據(jù)總線lines11睥'0/1'輸入/輸出.-數(shù)據(jù)總線1比斗12DB5=0/1*'輸入/輸出教據(jù)總線出成'13刷匚0/1''輸入/輸出’數(shù)據(jù)總線linefi'14DB7!0/1』'?輸入/輸出數(shù)據(jù)總線line7(>高位)'15A+Ucc-LCD背光電源止拔16K'接弛UD背光電源負極HD44780內(nèi)置了DDRAM、CGROM和CGRAM。DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。共80個字節(jié),其地址和屏幕的對應(yīng)關(guān)系如下表:顯示位苴1234567i?*B■*4D。。舶忡地址第一行目1H曜H購H明H06H■■?"27H第二行4W41H42K斗3H46H■-...?P67H也就是說想要在LCD1602屏幕的第一行第一列顯示一個"A"字,就要向DDRAM的00H地址寫入紡”字的代碼就行了。但具體的寫入是要按LCD模塊的指令格式來進行的,后面我會說到的。那么一行可有40個地址呀?是的,在1602中我們就用前16個就行了。第二行也一樣用前16個地址。對應(yīng)如下:DDRAM地址與顯示位置的對應(yīng)關(guān)系
TOC\o"1-5"\h\z:3QH02H船HMHS5H明HM7H購H39H舶H賽BH如H:EIDH施H或FH::USH41HU2H43HU4HUSHU6H47HA8HN9HNAHNOH4CH也DHNEH>lFH:IJ(事實上我們往DDRAM里的00H地址處送一個數(shù)據(jù),譬如0x31(數(shù)字1的代碼)并不能顯示1出來。這是一個令初學者很容易出錯的地方,原因就是如果你要想在DDRAM的00H地址處顯示數(shù)據(jù),則必須將00H加上80H,即80H,若要在DDRAM的01H處顯示數(shù)據(jù),則必須將01H加上80H即81H。依次類推。大家看一下控制指令的的8條:DDRAM地址的設(shè)定,即可以明白是怎么樣的一回事了)1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如下表所示,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”CGROM中字符碼與字字符字模關(guān)系對照表00010010001101Q10110011110001001101D101111001101111D:-?ooo:(1)■xxxOOOl(2)□|7|T|^|a■xxxOO1Z■xxxOO11?:':-:xxxO102■xxxOl01■:5)■:e)jockxOI12JOCKXOI11■:3jja)w1012(2)(4)"ISIBIRIbld#|3|C|S|c|s|$l4|D|T|d|t|?i|5|E|U|e|u|&|6|F|U|f|u|?|?|G|W|g|w|<|8|H|K|h|x|WIIlYlil』+l;IK|E|k|{|」l。廳匡E■Initiate?rl?lt|0FJOCKdlOZJOOW1110■:S:'CTXXXX1111,KIL|¥|1|I|^l?IOLIoH■y|U|7?|n\61111pq6-■■-EHXilR■.I.T.上表中的字符代碼與我們PC中的字符代碼是基本一致的。因此我們在向DDRAM寫C51字符代碼程序時甚至可以直接用P1='A'這樣的方法°PC在編譯時就把"先轉(zhuǎn)為41H代碼了。字符代碼0x00?0x0F為用戶自定義的字符圖形RAM(對于5X8點陣的字符,可以存放8組,5X10點陣的字符,存放4組),就是CGRAM了。后面我會詳細說的。0x20?0x7F為標準的ASCII碼,0xA0?0xFF為日文字符和希臘文字符,其余字符碼(0x10?0x1F及0x80?0x9F)沒有定義。那么如何對DDRAM的內(nèi)容和地址進行具體操作呢,下面先說說HD44780的指令集及其設(shè)置說明,請瀏覽該指令集,并找出對DDRAM的內(nèi)容和地址進行操作的指令。共11條指令:共11條指令:1.清屏指令:指令功能指令編朋3而/msR/WDB7DB&DB5DB4DB3DB2DB1DBQ清屏11-611功能:<1>清除液晶顯示器,即將DDRAM的內(nèi)容全部填入"空白"的ASCII碼20H;<2>光標歸位,即將光標撤回液晶顯示屏的左上方;<3>將地址計數(shù)器(AC)的值設(shè)為0。2.光標歸位指令:指令功能指令編碼41/ms:R§:R/WDB?DBi&;DB5DBUDB3:DB2DB1DBS'光標歸位1X1-64功能:<1>把光標撤回到顯示器的左上方;<2>把地址計數(shù)器(AC)的值設(shè)置為0;<3>保持DDRAM的內(nèi)容不變。3.進入模式設(shè)置指令:指令功能指令編碼.矚/USASR/WDB7DB6DB5DB4DB3DB2DB1DBQ進入模式設(shè)置.S.S.S.S.S.0.0.1S40功能:設(shè)定每次定入1位數(shù)據(jù)后光標的移位方向,并且設(shè)定每次寫入的一個字符是否移動。參數(shù)設(shè)定的情況如下所示:
位名設(shè)置I/D0=寫入新數(shù)據(jù)后光標左移1=寫入新數(shù)據(jù)后光標右移S0=寫入新數(shù)據(jù)后顯示屏不移動1=寫入新數(shù)據(jù)后顯示屏整體右移1個字符4.顯示開關(guān)控制指令::指令功能?指令編曲/USRSR/WBB7DB5BB4涵DB1DB0顯不開關(guān)控制0000001DC岫功能:控制顯示器開/關(guān)、光標顯示/關(guān)閉以及光標是否閃爍。參數(shù)設(shè)定的情況如下:位名設(shè)置D0=顯示功能關(guān)1=顯示功能開C0=無光標1=有光標B0=光標閃爍1=光標不閃爍5.設(shè)定顯示屏或光標移動方向指令:指令功能'指令編明/usRSR/WDB7PB6PB5DBADBSDBZDBiiDB0設(shè)定墾小屏或光標移動方向000001S/tR/L4?功能:使光標移位或使整個顯示屏幕移位。參數(shù)設(shè)定的情況如下:S/CR/L設(shè)定情況00光標左移1格,且AC值減101光標右移1格,且AC值加110顯示器上字符全部左移一格,但光標不動11顯示器上字符全部右移一格,但光標不動6.功能設(shè)定指令:指令功能指令編明ss/usRSR/WDB7DB6DB5DBADBSDB2DBiiDB0'功能設(shè)定0000'1PLNFNK列功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:位名設(shè)置DL0=數(shù)據(jù)總線為4位1=數(shù)據(jù)總線為8位
7.設(shè)定CGRAM地址指令::指令功能'指令編鋼執(zhí)行時間&RSR/WDB7DB6DBSDB2郵1。網(wǎng)設(shè)定CGKAM…地址0001CGRAM的弛址S位)4?功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址。8.設(shè)定DDRAM地址指令:指令功能'捐令編朗執(zhí)i#'/usRSR/WDB7DD6DB5D眄DBSDB2DBtlDBS.設(shè)定&&RAH…地址.0.01CGRAH的地址口位)0=顯示1行0=5x70=顯示1行0=5x7點陣/每字符1=顯示2行1=5x10點陣/每字符(注意這里我們送地址的時候應(yīng)該是0x80+Address,這也是前面說到寫地址命令的時候要加上0x80的原因)9.讀取忙信號或AC地址指令::指令功能■指令編鋼執(zhí)行時間&RSR/WDB7DB6DBSDB4DB3DB2DBfl讀眼忙碌信號曲的地tit01的內(nèi)容“位)4?功能:<1>讀取忙碌信號BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時無法接收單片機送來的數(shù)據(jù)或指令;當BF=0時,液晶顯示器可以接收單片機送來的數(shù)據(jù)或指令;<2>讀取地址計數(shù)器(AC)的內(nèi)容。10.數(shù)據(jù)寫入DDRAM或CGRAM指令一覽:指令功能指令編明執(zhí)行時何&RSR/WDD?D盼DBSDB4DB3DB2郵1D再數(shù)據(jù)寫入到麗時或CGRAM1要寫入的數(shù)據(jù)D7-D04?功能:<1>將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符;<2>將使用者自己設(shè)計的圖形存入CGRAM。11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽:指令功能指令編明執(zhí)行時何&RSR/WDD?D盼DBSDB4DB3DB2郵1D再從際麗時或出:數(shù)據(jù)11要讀出的數(shù)據(jù)07-084?功能:讀取DDRAM或CGRAM中的內(nèi)容?;静僮鲿r序:讀狀態(tài)輸入:RS=L,RW=H,E=H輸出:DB0?DB7=狀態(tài)字寫指令輸入:RS=L,RW=L,E=下降沿脈沖,DB0?DB7=指令碼輸出:無讀數(shù)據(jù)輸入:RS=H,RW=H,E=H輸出:DB0?DB7=數(shù)據(jù)寫數(shù)據(jù)輸入:RS=H,RW=L,E=下降沿脈沖,DB0?DB7=數(shù)據(jù)輸出:無呵呵,看到這么多的控制指令希望你沒有頭暈。其實這么多的指令剛開始的時候沒有必要全部掌握,隨著學習的深入可以再嘗試去用更復雜的控制指令。下面讓我們一起驅(qū)動1602的液晶吧。下面是我的液晶的連接圖,用的是那種藍底白字的液晶,其實藍底白字和那種綠底黑字的液晶唯一的區(qū)別就是顏色的問題,至于用哪種液晶,就看各位自己的喜好咯。這就是我做測試用的最小系統(tǒng),單片機是STC89C516,晶振為12M。液晶為藍底白字的那種1602。
當我們硬件連接錯誤,或者程序錯誤時就會出現(xiàn)下圖這種情況,就是上排顯示16的白色的塊(藍底黑字的液晶則顯示的是16個黑塊)。下面我們來驅(qū)動1602吧在1602的上排顯示“LCD1602checkok”下排顯示“studyup”程序中沒有用到忙檢測,而是用的是延時函數(shù)來替代忙檢測#include<reg52.h>//包含頭文件,這個嘛,就不用多說了??#defineuintunsignedint〃預定義一下#defineucharunsignedcharsbitrs=P3A5;//1602的數(shù)據(jù)/指令選擇控制線sbitrw=P3A6;//1602的讀寫控制線sbiten=P3A7;//1602的使能控制線/*P2口接1602的D0~D7,注意不要接錯了順序,我以前可在這上面吃過虧?*/ucharcodetable[]="LCD1602checkok";〃要顯示的內(nèi)容1放入數(shù)組tablelucharcodetable1[]="studyup";〃要顯示的內(nèi)容2放入數(shù)組table1voiddelay(uintn)//延時函數(shù){uintx,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}voidlcd_wcom(ucharcom)//1602寫命令函數(shù){rs=0;〃選擇指令寄存器rw=0;〃選擇寫P2=com;〃把命令字送入P2delay(5);〃延時一小會兒,讓1602準備接收數(shù)據(jù)en=1;//使能線電平變化,命令送入1602的8位數(shù)據(jù)口en=0;}voidlcd_wdat(uchardat)//1602寫數(shù)據(jù)函數(shù){rs=1;〃選擇數(shù)據(jù)寄存器rw=0;//選擇寫P2=dat;〃把要顯示的數(shù)據(jù)送入P2delay(5);〃延時一小會兒,讓1602準備接收數(shù)據(jù)en=1;〃使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口en=0;}voidlcd_init()//1602初始化函數(shù){lcd_wcom(0x38);//8位數(shù)據(jù),雙列,5*7字形lcd_wcom(0x0c);〃開啟顯示屏,關(guān)光標,光標不閃爍lcd_wcom(0x06);〃顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位lcd_wcom(0x01);〃清屏}voidmain()〃主函數(shù){ucharn,m=0;lcd_init();〃液晶初始化lcd_wcom(0x80);〃顯示地址設(shè)為80H(即00H,)上排第一位for(m=0;m<16;m++)//將table[]中的數(shù)據(jù)依次寫入1602顯示{lcd_wdat(table[m]);delay(200);}lcd_wcom(0x80+0x44);//重新設(shè)定顯示地址為0xc4,即下排第5位for(n=0;n<8;n++)//將table1[]中的數(shù)據(jù)依次寫入1602顯示{lcd_wdat(table1[n]);delay(200);}while(1);〃動態(tài)停機}
程序?qū)懞煤鬅龑戇M單片機,現(xiàn)在讓我們看看效果吧這就是顯示的效果,你做成功了嗎?下面讓我們來看看如何顯示一個自定義的字符吧我們從CGROM表上可以看到,在表的最左邊是一列可以允許用戶自定義的CGRAM,從上往下看著是16個,實際只有8個字節(jié)可用。它的字符碼是00000000-00000111這8個地址,表的下面還有8個字節(jié),但因為這個CGRAM的字符碼規(guī)定0-2位為地址,3位無效,4-7全為零。因此CGRAM的字符碼只有最后三位能用也就是8個字節(jié)了。等效為0000X111,X為無效位,最后三位為000-111共8個。如果我們要想顯示這8個用戶自定義的字符,操作方法和顯示CGROM的一樣,先設(shè)置DDRAM位置,再向DDRAM寫入字符碼,例如紡”就是41H。現(xiàn)在我們要顯示CGRAM的第一個自定義字符,就向DDRAM寫入00000000B(00H),如果要顯示第8個就寫入00000111(08H),簡單吧!好!現(xiàn)在我們來看怎么向這八個自定義字符寫入字模。有個設(shè)置CGRAM地址的指令大家還記得嗎?趕快再找出來看看。指專攻能指令編媽/usnsR/WDB7DB6瞄5睥DB30B2設(shè)定CGRAH地址0o1冊岫地址(植,從這個指令可以看出指令數(shù)據(jù)的高2位已固定是01,只有后面的6位是地址數(shù)據(jù),而這6位中的高3位就表示這八個自定義字符,最后的3位就是字模數(shù)據(jù)的八個地址了。例如第一個自定義字符的字模地址為01000000-01000111八個地址。我們向這8個字節(jié)寫入字模數(shù)據(jù),讓它能顯示出"°C”地址:01000000數(shù)據(jù):00010000圖示:OOO?OOOO0100000100000110OOOOOBBO0100001000001001OOOOBOOB0100001100001000OOOOBOOO0100010000001000OOOOBOOO0100010100001001OOOOBOOB0100011000000110OOOOOBBO0100011100000000OOOOOOOO下面我們寫一段程序讓這8個自定義字符顯示出一個心的圖案:(由于上面那個顯示程序已經(jīng)有很詳細的注釋了,因此這個程序只對與上個程序不同的地方寫注釋)#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitrs=P3A5;sbitrw=P3A6;sbiten=P3A7;ucharcodetable[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心圖案/*ucharcodetable1[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//字符。C*/voiddelay(uintn){uintx,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}voidlcd_wcom(ucharcom){rs=0;rw=0;P2=com;delay(5);en=1;en=0;}voidlcd_wdat(uchardat){rs=1;rw=0;P2=dat;delay(5);en=1;en=0;}voidlcd_init(){lcd_wcom(0x38);lcd_wcom(0x0c);lcd_wcom(0x06);lcd_wcom(0x01);}voidmain(){charm=0;lcd_init();lcd_wcom(0x40);〃設(shè)定CGRAM地址for(m=0;m<64;m++)〃將心型代碼寫入CGRAM中{lcd_wdat(table[m]);}lcd_wcom(0x85);〃設(shè)定上排的顯示位置f
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽理工大學《產(chǎn)品創(chuàng)新設(shè)計》2021-2022學年第一學期期末試卷
- 合同到期了單位不續(xù)簽通知模板
- 2024年拉薩駕駛員客運資格證模擬考試題及答案詳解
- 2024簡單版機動車借款抵押合同
- 2024服裝制作合同
- 2024防水材料采購合同
- 2024深圳建設(shè)工程技術(shù)咨詢合同樣本
- 2024光伏發(fā)電安裝合同范本光伏發(fā)電安裝合同范本
- 2024教師聘用合同
- 2024幼兒園裝修改造工程施工合同
- 幼兒園繪本故事:《老虎拔牙》 課件
- 2021年上半年《系統(tǒng)集成項目管理工程師》真題
- 一個冬天的童話 遇羅錦
- GB/T 706-2008熱軋型鋼
- 實驗六 雙子葉植物莖的初生結(jié)構(gòu)和單子葉植物莖的結(jié)構(gòu)
- GB/T 25032-2010生活垃圾焚燒爐渣集料
- GB/T 13610-2020天然氣的組成分析氣相色譜法
- 《彩虹》教案 省賽一等獎
- 2023年湖南建筑工程初中級職稱考試基礎(chǔ)知識
- 沈陽機場航站樓擴建工程安裝施工組織設(shè)計
- 司法考試:證據(jù)法
評論
0/150
提交評論