版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、實 驗 報 告實驗名稱: LCD1602液晶顯示實驗姓 名: 學 號: 指導教師: 實驗時間: 2013年6月15日 信息與通信工程學院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,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如下圖1-2所示:圖1-2 1602LCD尺寸圖1.1602L
2、CD主要技術參數(shù):顯示容量: 162個字符芯片工作電壓: 4.55.5V工作電流: 2.0mA(5.0V)模塊最佳工作電壓: 5.0V字符尺寸: 2.954.35(WH)mm2.引腳功能說明:1602LCD采用標準的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 1602LCD的指令說明及時
3、序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表1-4所示:表1-4 控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控制0000001DCB5光標或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作、屏幕和光標
4、的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)讀寫操作時序如圖1-5和1-6所示:圖1-5 讀操作時序圖1-6 寫操作時序1.1.4 1602LCD的RAM地址映射及標準字庫表液晶顯示模塊是一個慢顯示器件,所以,在執(zhí)行每條指令之前,一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時,要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖1-7是1602的內(nèi)部顯示地址。圖1-7 1602LCD內(nèi)部顯示地址例如,第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電
5、平1,所以實際寫入的數(shù)據(jù)應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中,要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”因為1602識別的
6、是ASCII碼,試驗可以用ASCII碼直接賦值,編程中還可以用字符型常量或變量賦值,如“A”。1602通過D0D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令。1.1.5 1602LCD的一般初始化(復位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設置寫指令08H:顯示關閉寫指令01H:顯示清屏寫指令06H:顯示光標移動設置寫指令0CH:顯示開及光標設置1.2 任務1及其原理任務1:更改lcd上顯示的字符。通過更改wire 127:0 row1_val,wire 12
7、7:0 row2_val的賦值即可,注意保證“”內(nèi)的字符數(shù)包括空格共16位。1.3 任務2及其原理任務2:將“LCD1602驅(qū)動模塊”文件與“LCD1602驅(qū)動測試模塊”文件合并成為一個verilog文件。首先,新建一個頂層VerilogHDL文件,將兩個文件的輸入,內(nèi)容合并,調(diào)試新的模塊,然后將管腳連接在一起,從而完成合并。1.4 任務3及其原理任務3:實現(xiàn)液晶屏的某一位完成09的循環(huán)變換,并且設置復位鍵,在循環(huán)過程中按下復位鍵循環(huán)可從0重新開始。完成本次的實驗想法是將“LCD1602驅(qū)動測試模塊”文件中wire 127:0 row1_val,wire 127:0 row2_val變量進行改
8、動,將row1_val原本賦予的字符替換為一個變量,設定新的時鐘,即循環(huán)變換的間隔時間,再通過條件語句控制循環(huán)。使能鍵的控制原理是通過對循環(huán)變換的條件進行操作實現(xiàn)的,即當按鍵使能時循環(huán)開始,反之,則從0開始。2. 實驗流程圖09循環(huán)變換流程圖3.實驗程序3.1 任務1程序 程序更改部分:wire 127:0 row1_val = liu wupeng ; wire 127:0 row2_val = 2009081206 ;3.2 任務2程序 將測試模塊中的驅(qū)動部分,兩個文件的對應命名只留其一,合并兩文件,即以下部分 / 例化LCD1602驅(qū)動 lcd1602_drive u0( .clk(CL
9、OCK_50M), .rst_n(Q_KEY), .row1_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 任務3程序 改動模塊:LCD1602驅(qū)動測試模塊,加重處為修改、添加部分module lcd1602_test( input CLOCK_50M, / 板載時鐘25MHz input Q_KEY, / 板載按鍵RST output 7:0 LCD1602_DATA,
10、 / LCD1602數(shù)據(jù)總線 output LCD1602_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 = ; /將第二行賦值都是空格,實驗時顯示為空re
11、g 7:0 a; /a變化控制reg 127:0 row1_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位
12、always (negedge key) begin if (en=0) en=1; else en=0; end /使能控制模塊,下降沿有效 always (posedge lcd_clk) if (en) if(i 0123456789ABCDEF -wire 127:0 row1_val = liu wupeng ;wire 127:0 row2_val = 2009081206 ;assign SEL0 = 1b0; assign SEL1 = 1b0; assign SEL2 = 1b1; / +/ 分頻模塊 開始/ +reg 15:0 cnt; / 計數(shù)子always (posed
13、ge clk, negedge rst_n) if (!rst_n) cnt = 0; else cnt = 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; / 顯示模式設置parameter DISP_OFF = 8h03; / 顯示關閉parameter CLR_SCR = 8h02
14、; / 顯示清屏parameter CURSOR_SET1 = 8h06; / 顯示光標移動設置parameter CURSOR_SET2 = 8h07; / 顯示開及光標設置/ 顯示第一行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
15、;parameter ROW1_7 = 8h09;parameter ROW1_8 = 8h08;parameter 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
16、_1 = 8h15;parameter ROW2_2 = 8h17;parameter ROW2_3 = 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;pa
17、rameter ROW2_E = 8h35;parameter ROW2_F = 8h34;reg 5: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_SE
18、T : next_state = DISP_OFF; DISP_OFF : next_state = 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 = ROW
19、1_3; ROW1_3 : next_state = ROW1_4; ROW1_4 : next_state = 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 = ROW
20、1_D; ROW1_D : next_state = ROW1_E; ROW1_E : next_state = 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 : ne
21、xt_state = ROW2_6; ROW2_6 : next_state = ROW2_7; ROW2_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 : ne
22、xt_state = ROW1_ADDR; / default : next_state = IDLE ; 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_
23、rs = 0; CURSOR_SET1 : lcd_rs = 0; CURSOR_SET2 : lcd_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
24、 = 1; ROW1_A : lcd_rs = 1; ROW1_B : lcd_rs = 1; ROW1_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
25、 : lcd_rs = 1; ROW2_7 : lcd_rs = 1; ROW2_8 : lcd_rs = 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 = 8h3
26、8; DISP_OFF : lcd_data = 8h08; CLR_SCR : lcd_data = 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 = row
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科貿(mào)職業(yè)學院《機能實驗學》2023-2024學年第一學期期末試卷
- 廣東警官學院《居住區(qū)規(guī)劃原理》2023-2024學年第一學期期末試卷
- 廣東江門中醫(yī)藥職業(yè)學院《連鎖經(jīng)營管理》2023-2024學年第一學期期末試卷
- 廣東環(huán)境保護工程職業(yè)學院《軟件基礎實踐》2023-2024學年第一學期期末試卷
- 廣東工商職業(yè)技術大學《工程材料實驗》2023-2024學年第一學期期末試卷
- 廣東第二師范學院《企業(yè)管理學概論》2023-2024學年第一學期期末試卷
- 共青科技職業(yè)學院《工程管理專業(yè)外語》2023-2024學年第一學期期末試卷
- 贛南師范大學科技學院《兒童文學與寫作》2023-2024學年第一學期期末試卷
- 贛南科技學院《用戶體驗設計》2023-2024學年第一學期期末試卷
- 《迪士尼產(chǎn)業(yè)鏈分析》課件
- 結(jié)腸鏡檢查前腸道準備
- 健康狀況與風險評估智慧樹知到期末考試答案2024年
- 2023-2024學年統(tǒng)編版高中語文選擇性必修中冊《屈原列傳》檢測卷(含答案)
- 創(chuàng)業(yè)基礎知識競賽題庫及答案
- (高清版)TDT 1063-2021 國土空間規(guī)劃城市體檢評估規(guī)程
- 國有企業(yè)股權(quán)轉(zhuǎn)讓規(guī)定
- 收費站一站一品方案
- 2024年保險考試-車險查勘定損員筆試歷年真題薈萃含答案
- 2024屆湖南省長沙市高三新高考適應性考試生物試題(含答案解析)
- 少數(shù)民族介紹水族
- 2024年四川省普通高中學業(yè)水平考試(思想政治樣題)
評論
0/150
提交評論