




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實 驗 報 告實驗名稱: LCD1602液晶顯示實驗姓 名: 學(xué) 號: 指導(dǎo)教師: 實驗時間: 2013年6月15日 信息與通信工程學(xué)院LCD1602液晶顯示實驗1.實驗原理1.1 基本原理1.1.1 1602字符型LCD簡介 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。1.1.2 1602LCD的基本參數(shù)及引腳功能 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如下圖1-2所示:圖1-2 1602
2、LCD尺寸圖1.1602LCD主要技術(shù)參數(shù):顯示容量: 162個字符芯片工作電壓: 4.55.5V工作電流: 2.0mA(5.0V)模塊最佳工作電壓: 5.0V字符尺寸: 2.954.35(WH)mm2.引腳功能說明:1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表: 表1-3引腳接口說明表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極1.1.3 1
3、602LCD的指令說明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表1-4所示:表1-4 控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶
4、模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)讀寫操作時序如圖1-5和1-6所示:圖1-5 讀操作時序圖1-6 寫操作時序1.1.4 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表液晶顯示模塊是一個慢顯示器件,所以,在執(zhí)行每條指令之前,一定要確認模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時,要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖1-7是1602的內(nèi)部顯示地址。圖1-7 1602LCD內(nèi)部顯示地址例如,第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址
5、時要求最高位D7恒定為高電平1,所以實際寫入的數(shù)據(jù)應(yīng)該是B(40H)+B(80H)=B(C0H)。在對液晶模塊的初始化中,要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”因為1602識別的是ASCII碼,試驗可以用ASCII碼
6、直接賦值,編程中還可以用字符型常量或變量賦值,如“A”。1602通過D0D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令。1.1.5 1602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置1.2 任務(wù)1及其原理任務(wù)1:更改lcd上顯示的字符。通過更改wire 127:0 row1_val,wire 127:0 row2_val的賦值即可,注
7、意保證“”內(nèi)的字符數(shù)包括空格共16位。1.3 任務(wù)2及其原理任務(wù)2:將“LCD1602驅(qū)動模塊”文件與“LCD1602驅(qū)動測試模塊”文件合并成為一個verilog文件。首先,新建一個頂層VerilogHDL文件,將兩個文件的輸入,內(nèi)容合并,調(diào)試新的模塊,然后將管腳連接在一起,從而完成合并。1.4 任務(wù)3及其原理任務(wù)3:實現(xiàn)液晶屏的某一位完成09的循環(huán)變換,并且設(shè)置復(fù)位鍵,在循環(huán)過程中按下復(fù)位鍵循環(huán)可從0重新開始。完成本次的實驗想法是將“LCD1602驅(qū)動測試模塊”文件中wire 127:0 row1_val,wire 127:0 row2_val變量進行改動,將row1_val原本賦予的字符替
8、換為一個變量,設(shè)定新的時鐘,即循環(huán)變換的間隔時間,再通過條件語句控制循環(huán)。使能鍵的控制原理是通過對循環(huán)變換的條件進行操作實現(xiàn)的,即當(dāng)按鍵使能時循環(huán)開始,反之,則從0開始。2. 實驗流程圖09循環(huán)變換流程圖3.實驗程序3.1 任務(wù)1程序 程序更改部分:wire 127:0 row1_val = liu wupeng ; wire 127:0 row2_val = ;3.2 任務(wù)2程序 將測試模塊中的驅(qū)動部分,兩個文件的對應(yīng)命名只留其一,合并兩文件,即以下部分 / 例化LCD1602驅(qū)動 lcd1602_drive u0( .clk(CLOCK_50M), .rst_n(Q_KEY), .row1
9、_val(row1_val), .row2_val(row2_val), .lcd_data(LCD1602_DATA), .lcd_e(LCD1602_E), .lcd_rs(LCD1602_RS), .lcd_rw(LCD1602_RW);完整程序請參見附件:13.3 任務(wù)3程序 改動模塊:LCD1602驅(qū)動測試模塊,加重處為修改、添加部分module lcd1602_test( input CLOCK_50M, / 板載時鐘25MHz input Q_KEY, / 板載按鍵RST output 7:0 LCD1602_DATA, / LCD1602數(shù)據(jù)總線 output LCD1602_
10、E, / LCD1602使能 output LCD1602_RS, / LCD1602指令數(shù)據(jù)選擇 output LCD1602_RW, / LCD1602讀寫選擇 output SEL0, / LCD1602讀寫選擇 output SEL1, / LCD1602讀寫選擇 output SEL2 / LCD1602讀寫選擇 input key, /使能控制鍵 );reg 127:0 row1_val; /將原本的wire型改為reg型,保證其可變wire 127:0 row2_val = ; /將第二行賦值都是空格,實驗時顯示為空reg 7:0 a; /a變化控制reg 127:0 row1_
11、valreg 3:0 i; reg 25:0 cnt; /分頻用reg en; /使能控制assign SEL0 = 1b0; assign SEL1 = 1b0; assign SEL2 = 1b1; always (posedge CLOCK_50M,negedge Q_KEY) if (!Q_KEY) cnt = 0; else cnt = cnt + 1b1;wire lcd_clk = cnt25; /分頻模塊always (a) begin row1_val7:0=a; end /將a賦給 row1_val7:0的低8位 always (negedge key) begin if
12、(en=0) en=1; else en=0; end /使能控制模塊,下降沿有效 always (posedge lcd_clk) if (en) if(i ABCDEF -wire 127:0 row1_val = liu wupeng ;wire 127:0 row2_val = ;assign SEL0 = 1b0; assign SEL1 = 1b0; assign SEL2 = 1b1; / +/ 分頻模塊 開始/ +reg 15:0 cnt; / 計數(shù)子always (posedge clk, negedge rst_n) if (!rst_n) cnt = 0; else cn
13、t = cnt + 1b1;/ 500Khz 1MHz 皆可wire lcd_clk = cnt15; / (215 / 50M) = 1.31ms / -/ 分頻模塊 結(jié)束/ -/ +/ LCD1602驅(qū)動模塊 開始/ +/ 格雷碼編碼:共40個狀態(tài)parameter IDLE = 8h00;/ 寫指令,初始化parameter DISP_SET = 8h01; / 顯示模式設(shè)置parameter DISP_OFF = 8h03; / 顯示關(guān)閉parameter CLR_SCR = 8h02; / 顯示清屏parameter CURSOR_SET1 = 8h06; / 顯示光標(biāo)移動設(shè)置par
14、ameter CURSOR_SET2 = 8h07; / 顯示開及光標(biāo)設(shè)置/ 顯示第一行parameter ROW1_ADDR = 8h05; / 寫第1行起始地址parameter ROW1_0 = 8h04;parameter ROW1_1 = 8h0C;parameter ROW1_2 = 8h0D;parameter ROW1_3 = 8h0F;parameter ROW1_4 = 8h0E;parameter ROW1_5 = 8h0A;parameter ROW1_6 = 8h0B;parameter ROW1_7 = 8h09;parameter ROW1_8 = 8h08;pa
15、rameter ROW1_9 = 8h18;parameter ROW1_A = 8h19;parameter ROW1_B = 8h1B;parameter ROW1_C = 8h1A;parameter ROW1_D = 8h1E;parameter ROW1_E = 8h1F;parameter ROW1_F = 8h1D;/ 顯示第二行parameter ROW2_ADDR = 8h1C; / 寫第2行起始地址parameter ROW2_0 = 8h14;parameter ROW2_1 = 8h15;parameter ROW2_2 = 8h17;parameter ROW2_3
16、= 8h16;parameter ROW2_4 = 8h12;parameter ROW2_5 = 8h13;parameter ROW2_6 = 8h11;parameter ROW2_7 = 8h10;parameter ROW2_8 = 8h30;parameter ROW2_9 = 8h31;parameter ROW2_A = 8h33;parameter ROW2_B = 8h32;parameter ROW2_C = 8h36;parameter ROW2_D = 8h37;parameter ROW2_E = 8h35;parameter ROW2_F = 8h34;reg 5
17、:0 current_state, next_state; / 現(xiàn)態(tài)、次態(tài)/ FSM: always1always (posedge lcd_clk, negedge rst_n) if(!rst_n) current_state = IDLE; else current_state = next_state;/ FSM: always2alwaysbegin case(current_state) IDLE : next_state = DISP_SET; / 寫指令,初始化 DISP_SET : next_state = DISP_OFF; DISP_OFF : next_state =
18、CLR_SCR; CLR_SCR : next_state = CURSOR_SET1; CURSOR_SET1 : next_state = CURSOR_SET2; CURSOR_SET2 : next_state = ROW1_ADDR; / 顯示第一行 ROW1_ADDR : next_state = ROW1_0; ROW1_0 : next_state = ROW1_1; ROW1_1 : next_state = ROW1_2; ROW1_2 : next_state = ROW1_3; ROW1_3 : next_state = ROW1_4; ROW1_4 : next_st
19、ate = ROW1_5; ROW1_5 : next_state = ROW1_6; ROW1_6 : next_state = ROW1_7; ROW1_7 : next_state = ROW1_8; ROW1_8 : next_state = ROW1_9; ROW1_9 : next_state = ROW1_A; ROW1_A : next_state = ROW1_B; ROW1_B : next_state = ROW1_C; ROW1_C : next_state = ROW1_D; ROW1_D : next_state = ROW1_E; ROW1_E : next_st
20、ate = ROW1_F; ROW1_F : next_state = ROW2_ADDR; / 顯示第二行 ROW2_ADDR : next_state = ROW2_0; ROW2_0 : next_state = ROW2_1; ROW2_1 : next_state = ROW2_2; ROW2_2 : next_state = ROW2_3; ROW2_3 : next_state = ROW2_4; ROW2_4 : next_state = ROW2_5; ROW2_5 : next_state = ROW2_6; ROW2_6 : next_state = ROW2_7; RO
21、W2_7 : next_state = ROW2_8; ROW2_8 : next_state = ROW2_9; ROW2_9 : next_state = ROW2_A; ROW2_A : next_state = ROW2_B; ROW2_B : next_state = ROW2_C; ROW2_C : next_state = ROW2_D; ROW2_D : next_state = ROW2_E; ROW2_E : next_state = ROW2_F; ROW2_F : next_state = ROW1_ADDR; / default : next_state = IDLE
22、 ; endcaseend/ FSM: always3always (posedge lcd_clk, negedge rst_n)begin if(!rst_n) begin lcd_rs = 0; lcd_data = 8hxx; end else begin / 寫lcd_rs case(next_state) IDLE : lcd_rs = 0; / 寫指令,初始化 DISP_SET : lcd_rs = 0; DISP_OFF : lcd_rs = 0; CLR_SCR : lcd_rs = 0; CURSOR_SET1 : lcd_rs = 0; CURSOR_SET2 : lcd
23、_rs = 0; / 寫數(shù)據(jù),顯示第一行 ROW1_ADDR : lcd_rs = 0; ROW1_0 : lcd_rs = 1; ROW1_1 : lcd_rs = 1; ROW1_2 : lcd_rs = 1; ROW1_3 : lcd_rs = 1; ROW1_4 : lcd_rs = 1; ROW1_5 : lcd_rs = 1; ROW1_6 : lcd_rs = 1; ROW1_7 : lcd_rs = 1; ROW1_8 : lcd_rs = 1; ROW1_9 : lcd_rs = 1; ROW1_A : lcd_rs = 1; ROW1_B : lcd_rs = 1; ROW
24、1_C : lcd_rs = 1; ROW1_D : lcd_rs = 1; ROW1_E : lcd_rs = 1; ROW1_F : lcd_rs = 1; / 寫數(shù)據(jù),顯示第二行 ROW2_ADDR : lcd_rs = 0; ROW2_0 : lcd_rs = 1; ROW2_1 : lcd_rs = 1; ROW2_2 : lcd_rs = 1; ROW2_3 : lcd_rs = 1; ROW2_4 : lcd_rs = 1; ROW2_5 : lcd_rs = 1; ROW2_6 : lcd_rs = 1; ROW2_7 : lcd_rs = 1; ROW2_8 : lcd_rs
25、 = 1; ROW2_9 : lcd_rs = 1; ROW2_A : lcd_rs = 1; ROW2_B : lcd_rs = 1; ROW2_C : lcd_rs = 1; ROW2_D : lcd_rs = 1; ROW2_E : lcd_rs = 1; ROW2_F : lcd_rs = 1; endcase / 寫lcd_data case(next_state) IDLE : lcd_data = 8hxx; / 寫指令,初始化 DISP_SET : lcd_data = 8h38; DISP_OFF : lcd_data = 8h08; CLR_SCR : lcd_data =
26、 8h01; CURSOR_SET1 : lcd_data = 8h06; CURSOR_SET2 : lcd_data = 8h0C; / 寫數(shù)據(jù),顯示第一行 ROW1_ADDR : lcd_data = 8h80; ROW1_0 : lcd_data = row1_val127:120; ROW1_1 : lcd_data = row1_val119:112; ROW1_2 : lcd_data = row1_val111:104; ROW1_3 : lcd_data = row1_val103: 96; ROW1_4 : lcd_data = row1_val 95: 88; ROW1_5 : lcd_data = row1_val 87: 80; ROW1_6 : lcd_data = row1_val 79: 72; ROW1_7 : lcd_data = row1_val 71: 64; ROW1_8 : lcd_data = row1_val 63: 56; ROW1_9 : lcd_data = row1_val 55: 48; ROW1_A : lcd_data = row1_val 47: 40; ROW1_B : lcd_data = row1_val 39: 3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供電項目建設(shè)方案
- 2026版《全品高考》選考復(fù)習(xí)方案生物837 課時作業(yè)(三十四) 神經(jīng)沖動的產(chǎn)生、傳導(dǎo)和傳遞 含答案
- 南京稅務(wù)面試題及答案
- 客房衛(wèi)生品質(zhì)管理方案
- 小院墳頭改造方案
- 汽車美容與裝飾實訓(xùn)課件 23-0項目九任務(wù)一 汽車音響和通信設(shè)備的選裝實訓(xùn)
- 資產(chǎn)轉(zhuǎn)讓籌劃方案
- 蘇州小區(qū)消防整改方案
- 天津公司面試題及答案
- 小黃車考試題及答案
- 聯(lián)營協(xié)議合同模板電子版
- 離婚不離家協(xié)議書
- 社區(qū)干事考試試題及答案
- 2025年廣西南寧賓陽縣昆侖投資集團有限公司招聘筆試參考題庫含答案解析
- 集訓(xùn)畫室合同協(xié)議
- 魔法漢字拓展課件
- 汽車抵押合同協(xié)議
- 醫(yī)院入職培訓(xùn):醫(yī)德醫(yī)風(fēng)
- 2025年軍人離婚協(xié)議書范本
- 化妝品生產(chǎn)質(zhì)量管理體系手冊
- 娛樂行業(yè):舞蹈演員個人簡介簡歷
評論
0/150
提交評論