2037.基于MCS51單片機(jī)與LCD液晶顯示器的接口技術(shù).doc_第1頁
2037.基于MCS51單片機(jī)與LCD液晶顯示器的接口技術(shù).doc_第2頁
2037.基于MCS51單片機(jī)與LCD液晶顯示器的接口技術(shù).doc_第3頁
2037.基于MCS51單片機(jī)與LCD液晶顯示器的接口技術(shù).doc_第4頁
2037.基于MCS51單片機(jī)與LCD液晶顯示器的接口技術(shù).doc_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

??飘厴I(yè)設(shè)計(jì)(論文) 設(shè)計(jì)題目: 基于基于 mcs51 單單片機(jī)與片機(jī)與 lcd 液晶液晶顯顯示器的接口示器的接口 技技術(shù)術(shù) 系 部: 信息工程系信息工程系 專 業(yè): 電電子信息工程子信息工程 班 級(jí): 電電子信息子信息 姓 名: 學(xué) 號(hào): : 指導(dǎo)教師: 職 稱 講師講師 2009 年 6 月 南京 摘 要 lcd 液晶顯示已經(jīng)是人機(jī)界面的關(guān)鍵技術(shù)。本文對基于單片機(jī)的 lcd 液晶顯示器控制 技術(shù)進(jìn)行了研究。 本文闡明用單片機(jī)(stc89c52)控制 lcd1602 顯示屏的方法。首先本文研究了 lcd1602 液晶屏(hd44780)的點(diǎn)陣顯示原理及字庫代碼獲取方法,隨后通過在 proteus 仿真軟件上構(gòu)建相關(guān)的仿真電路,并連接在 keil 軟件上編寫、編輯及編譯生成的相關(guān)的. hex 驅(qū)動(dòng)程序進(jìn)行電路仿真,成功仿真出對所需內(nèi)容的循環(huán)顯示。編程語言主要使用的是 匯編。在成功模擬仿真后本文進(jìn)一步進(jìn)行了在單片機(jī)開發(fā)板上的程序燒錄。本文所描述 的設(shè)計(jì)產(chǎn)品實(shí)際制作是基于原理圖生成的 pcb 板,最后通過購買元件、元件測試、電路 焊接、產(chǎn)品調(diào)試完成了本次設(shè)計(jì)的全部過程。 關(guān)鍵詞 :lcd,單片機(jī),顯示屏,驅(qū)動(dòng),掃描,仿真,設(shè)計(jì) abstractabstract lcd liquid crystal display is the key to man-machine interface technology. in this paper, based on single-chip lcd liquid crystal display control technology is studied. this article set out to use single-chip microcomputer (stc89c52) control method lcd1602 display. first of all, this paper lcd1602 lcd (hd44780) and the principle of the dot matrix display font access method code, followed by proteus simulation software circuit simulation to build relevant and connected to the keil software to prepare, edit and compile the relevant generating . hex driver circuit simulation, the success of the simulation cycle required to display the content. the main programming language used was compiled. after the success of simulation in this paper for further development in the single-chip on-board procedures for burning. this paper describes the design of the actual production of products is based on the schematic diagram of the pcb board to generate, and finally through the purchase of components, component testing, circuit welding, product testing was completed the design of the whole process. keywordskeywords: lcd,singlechip,display,drive,scan,simulation,design 目目 錄錄 摘摘 要要 iiii 1 1 緒論緒論 1 1 1.1 液晶顯示器在單片機(jī)系統(tǒng)中的應(yīng)用 .1 1.2 液晶顯示器的優(yōu)點(diǎn) .1 2 2 lcd1602lcd1602 液晶顯示器的顯示原理液晶顯示器的顯示原理3 3 2.1 液晶顯示原理簡介 .3 2.2 1602 字符型 lcd 簡介 4 2.3 lcd1602 的基本參數(shù)及引腳功能 .4 2.4 lcd1602 的 ram 地址映射及標(biāo)準(zhǔn)字庫表 .6 2.5 lcd1602 的一般初始化(復(fù)位)過程 13 3 3 電路軟件模擬及仿真電路軟件模擬及仿真 1414 3.1 keil及 proteus使用介紹 .14 3.2 lcd1602 入門程序的實(shí)現(xiàn) 16 3.3 字符型液晶顯示模塊與單片機(jī)的連接18 3.4 字符型液晶顯示模塊應(yīng)用 23 3.5 液晶模塊顯示的拓展提高26 4 4 硬件電路原理圖及程序的燒寫硬件電路原理圖及程序的燒寫 2929 4.1 硬件電路原理圖及硬件圖29 4.2 程序的燒寫方法及演示30 結(jié)結(jié) 論論 3232 致致 謝謝 3333 參參 考考 文文 獻(xiàn)獻(xiàn) 3434 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 1 頁 1 1 緒論緒論 當(dāng)今是一個(gè)信息化的時(shí)代,信息的重要性是不言而喻的,獲取手段顯得尤其重 要。人們所接受的信息有 70%來自于人的視覺,無論用何種方式獲取的信息最終需要 有某種顯示方式來表示。在當(dāng)代顯示技術(shù)中,主流的有 led 顯示屏及 lcd 液晶顯示, 而在這些顯示技術(shù)中,尤其以液晶顯示器 lcd(liquid crystal display)為代表的平 板顯示器發(fā)展最快、應(yīng)用最廣。lcd 是典型的光電器件,它以材料科學(xué)為基礎(chǔ),綜合 利用了精密機(jī)械、光電及計(jì)算機(jī)技術(shù),并正在微機(jī)械、微光學(xué)、纖維光學(xué)等前沿領(lǐng) 域研究基礎(chǔ)上,向高集成化、智能化方向發(fā)展。 1.11.1 液晶顯示器在單片機(jī)系統(tǒng)中的應(yīng)用液晶顯示器在單片機(jī)系統(tǒng)中的應(yīng)用 在日常生活中,我們對液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn) 品的通用器件,如在計(jì)算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到, 顯示的主要是數(shù)字、專用符號(hào)和圖形。在單片機(jī)的人機(jī)交流界面中,一般的輸出方 式有以下幾種:發(fā)光管、led 數(shù)碼管、液晶顯示器。發(fā)光管和 led 數(shù)碼管比較常用, 軟硬件都比較簡單,在小型智能化電子產(chǎn)品中,普通的 7 段 led 數(shù)碼管只能顯示數(shù) 字,若要顯示英文字母或圖像漢字,則必須使用液晶顯示器,所以本課題重點(diǎn)研究 液晶顯示器。 1.21.2 液晶顯示器的優(yōu)點(diǎn)液晶顯示器的優(yōu)點(diǎn) 在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn): 1.1.1 顯示質(zhì)量高 由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光, 而不像陰極射線管顯示器(crt)那樣需要不斷刷新新亮點(diǎn)。因此,液晶顯示器畫質(zhì) 高且不會(huì)閃爍。 1.1.2 數(shù)字式接口 液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡單可靠,操作更加方。 1.1.3 體積小、重量輕 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 2 頁 液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)到顯示的目的,在重量 上比相同顯示面積的傳統(tǒng)顯示器要輕得多。 1.1.4 功耗低 相對而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng) ic 上,因而耗電 量比其它顯示器要少得多。 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 3 頁 2 2 lcd1602lcd1602 液晶顯示器的顯示原理液晶顯示器的顯示原理 2.12.1 液晶顯示原理簡介液晶顯示原理簡介 2.1.1 液晶顯示原理 液晶顯示的原理是利用液晶的物理特性, 通過電壓對其顯示區(qū)域進(jìn)行控制,有 電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成 電路直接驅(qū)動(dòng)、易于實(shí)現(xiàn)全彩色顯示的特點(diǎn),目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、 數(shù)字?jǐn)z像機(jī)、pda 移動(dòng)通信工具等眾多領(lǐng)域。 2.1.2 液晶顯示器的分類 液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式 lcd、字符式 lcd、點(diǎn)陣式 lcd 等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果 根據(jù)驅(qū)動(dòng)方式來分,可以分為靜態(tài)驅(qū)動(dòng)(static)、單純矩陣驅(qū)動(dòng)(simple matrix)和主動(dòng)矩陣驅(qū)動(dòng)(active matrix)三種。 2.1.3 液晶顯示器各種圖形的顯示原理: 線段的顯示 點(diǎn)陣圖形式液晶由 mn 個(gè)顯示單元組成,假設(shè) lcd 顯示屏有 64 行,每行有 128 列,每 8 列對應(yīng) 1 字節(jié)的 8 位,即每行由 16 字節(jié),共 168=128 個(gè)點(diǎn)組成,屏上 6416 個(gè)顯示單元與顯示 ram 區(qū) 1024 字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng) 位置的亮暗對應(yīng)。例如屏的第一行的亮暗由 ram 區(qū)的 000h00fh 的 16 字節(jié)的內(nèi) 容決定,當(dāng)(000h)=ffh 時(shí),則屏幕的左上角顯示一條短亮線,長度為 8 個(gè)點(diǎn);當(dāng) (3ffh)=ffh 時(shí),則屏幕的右下角顯示一條短亮線;當(dāng)(000h)=ffh,(001h) =00h,(002h)=00h,(00eh)=00h,(00fh)=00h 時(shí),則在屏幕的頂部顯示 一條由 8 段亮線和 8 條暗線組成的虛線。這就是 lcd 顯示的基本原理。 字符的顯示 用 lcd 顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋€(gè)字符由 68 或 88 點(diǎn)陣組成,既 要找到和顯示屏幕上某幾個(gè)位置對應(yīng)的顯示 ram 區(qū)的 8 字節(jié),還要使每字節(jié)的不同 位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“0”的不亮。這樣一來就組成某 個(gè)字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控 制器工作在文本方式,根據(jù)在 lcd 上開始顯示的行列號(hào)及每行的列數(shù)找出顯示 ram 對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 4 頁 漢字的顯示 漢字的顯示一般采用圖形的方式,事先從微機(jī)中提取要顯示的漢字的點(diǎn)陣碼 (一般用字模提取軟件),每個(gè)漢字占 32b,分左右兩半,各占 16b,左邊為 1、3、5右邊為 2、4、6根據(jù)在 lcd 上開始顯示的行列號(hào)及每行的列數(shù)可找 出顯示 ram 對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加 1, 送第二個(gè)字節(jié),換行按列對齊,送第三個(gè)字節(jié)直到 32b 顯示完就可以 lcd 上得 到一個(gè)完整漢字。 2.22.2 16021602 字符型字符型 lcdlcd 簡介簡介 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式 lcd,目前 常用 16*1,16*2,20*2 和 40*2 行等的模塊。下面以長沙太陽人電子有限公司的 1602 字符型液晶顯示器為例,介紹其用法。一般 1602 字符型液晶顯示器實(shí)物如圖 2.2.1: 圖 2.2.1 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 5 頁 2.32.3 lcd16021602 的基本參數(shù)及引腳功能的基本參數(shù)及引腳功能 市面上 1602 字符液晶顯示屏絕大多數(shù)是基于 hd44780 液晶芯片的,控制原理是 完全相同的,因此 hd44780 寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符 型液晶。字符型 lcd 通常有 14 條引腳線或 16 條引腳線的 lcd,多出來的 2 條線是背 光電源線 vcc(15 腳)和地線 gnd(16 腳),其控制原理與 14 腳的 lcd 完全一樣,外形 尺寸和引腳接口信號(hào)說明分別如圖 2.3.1 和表 2.3.1 所示1 1: 圖 2.3.1 表 2.3.1 1602lcd 主要技術(shù)參數(shù): 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 6 頁 表 2.3.2 引腳接口說明: 第 1 腳:vss 為地電源。 第 2 腳:vdd 接 5v 正電源。 第 3 腳:vl 為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比 度最高,對比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè) 10k 的電位器調(diào)整對 比度。 第 4 腳:rs 為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。 第 5 腳:r/w 為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng) rs 和 r/w 共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng) rs 為低電平 r/w 為高電平 時(shí)可以讀忙信號(hào),當(dāng) rs 為高電平 r/w 為低電平時(shí)可以寫入數(shù)據(jù)。 第 6 腳:e 端為使能端,當(dāng) e 端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。 第 714 腳:d0d7 為 8 位雙向數(shù)據(jù)線。 第 15 腳:背光源正極。 第 16 腳:背光源負(fù)極。 2.42.4 lcd16021602 的的 ramram 地址映射及標(biāo)準(zhǔn)字庫表地址映射及標(biāo)準(zhǔn)字庫表 hd44780 內(nèi)置了 ddram、cgrom 和 cgram。 ddram 就是顯示數(shù)據(jù) ram,用來寄存待顯示的字符代碼。共 80 個(gè)字節(jié),其地址 和屏幕的對應(yīng)關(guān)系如表 2.4.1: 表 2.4.1 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 7 頁 也就是說想要在 lcd1602 屏幕的第一行第一列顯示一個(gè)“a“字,就要向 ddram 的 00h 地址寫入“a”字的代碼就行了。但具體的寫入是要按 lcd 模塊的指令格式來進(jìn) 行的,后面將會(huì)提到。我們很容易發(fā)現(xiàn)每一行有 40 個(gè)地址,在 1602 中我們就用前 16 個(gè)就行了。第二行也一樣用前 16 個(gè)地址。對應(yīng)如表 2.4.2: ddram 地址與顯示位置的對應(yīng)關(guān)系 表 2.4.2 我們知道文本文件中每一個(gè)字符都是用一個(gè)字節(jié)的代碼記錄的。一個(gè)漢字是用 兩個(gè)字節(jié)的代碼記錄。在 pc 上我們只要打開文本文件就能在屏幕上看到對應(yīng)的字符 是因?yàn)樵诓僮飨到y(tǒng)里和 bios 里都固化有字符字模。什么是字模?就代表了是在點(diǎn)陣 屏幕上點(diǎn)亮和熄滅的信息數(shù)據(jù)。例如“a”字的字模: 01110 10001 10001 10001 11111 10001 10001 上圖左邊的數(shù)據(jù)就是字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“”代表 0,用“” 代表 1??闯鍪莻€(gè)“a”字了嗎?在文本文件中“a”字的代碼是 41h,pc 收到 41h 的 代碼后就去字模文件中將代表 a 字的這一組數(shù)據(jù)送到顯卡去點(diǎn)亮屏幕上相應(yīng)的點(diǎn), 你就看到“a”這個(gè)字了。 剛才我說了想要在 lcd1602 屏幕的第一行第一列顯示一個(gè)“a“字,就要向 ddram 的 00h 地址寫入“a”字的代碼 41h 就行了,可 41h 這一個(gè)字節(jié)的代碼如何才能讓 lcd 模塊在屏幕的陣點(diǎn)上顯示“a”字呢?同樣,在 lcd 模塊上也固化了字模存儲(chǔ)器, 這就是 cgrom 和 cgram。hd44780 內(nèi)置了 192 個(gè)常用字符的字模,存于字符產(chǎn)生器 cgrom(character generator rom)中,另外還有 8 個(gè)允許用戶自定義的字符產(chǎn)生 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 8 頁 ram,稱為 cgram(character generator ram)。圖 2.4.1 說明了 cgrom 和 cgram 與字 符的對應(yīng)關(guān)系。 圖 2.4.12 2 從上圖可以看出,“a”字的對應(yīng)上面高位代碼為 0100,對應(yīng)左邊低位代碼為 0001,合起來就是 01000001,也就是 41h。可見它的代碼與我們 pc 中的字符代碼是 基本一致的。字符代碼 0x000x0f 為用戶自定義的字符圖形 ram(對于 5x8 點(diǎn)陣的字 符,可以存放 8 組,5x10 點(diǎn)陣的字符,存放 4 組),就是 cgram 了。 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 9 頁 0x200x7f 為標(biāo)準(zhǔn)的 ascii 碼,0xa00xff 為日文字符和希臘文字符,其余字 符碼(0x100x1f 及 0x800x9f)沒有定義。 如果要對 ddram 的內(nèi)容和地址進(jìn)行具體操作,首先就要了解 hd44780 的指令集 及其設(shè)置說明。該指令集及其對 ddram 的內(nèi)容和地址進(jìn)行操作的指令如下。 共 11 條指令2 2: 1.清屏指令 表 2.4.3 功能: 清除液晶顯示器,即將 ddram 的內(nèi)容全部填入“空白“的 ascii 碼 20h; 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; 將地址計(jì)數(shù)器(ac)的值設(shè)為 0。 2.光標(biāo)歸位指令 表 2.4.4 功能: 把光標(biāo)撤回到顯示器的左上方; 把地址計(jì)數(shù)器(ac)的值設(shè)置為 0; 保持 ddram 的內(nèi)容不變。 3.進(jìn)入模式設(shè)置指令 表 2.4.5 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 10 頁 功能:設(shè)定每次定入 1 位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個(gè)字 符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名 設(shè)置 i/d 0=寫入新數(shù)據(jù)后光標(biāo)左移 1=寫入新數(shù)據(jù)后光標(biāo)右移 s 0=寫入新數(shù)據(jù)后顯示屏不移動(dòng) 1=寫入新數(shù)據(jù)后顯示屏整體右移 1 個(gè)字符 4.顯示開關(guān)控制指令 表 2.4.6 功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。 位名 設(shè)置 d 0=顯示功能關(guān) 1=顯示功能開 c 0=無光標(biāo) 1=有光標(biāo) b 0=光標(biāo)閃爍 1=光標(biāo)不閃爍 5.設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令 表 2.4.7 功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下: s/c r/l 設(shè)定情況 0 0 光標(biāo)左移 1 格,且 ac 值減 1 0 1 光標(biāo)右移 1 格,且 ac 值加 1 1 0 顯示器上字符全部左移一格,但光標(biāo)不 動(dòng) 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 11 頁 1 1 顯示器上字符全部右移一格,但光標(biāo)不 動(dòng) 6.功能設(shè)定指令 表 2.4.8 功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下: 位名 設(shè)置 dl 0=數(shù)據(jù)總線為 4 位 1=數(shù)據(jù)總線為 8 位 n 0=顯示 1 行 1=顯示 2 行 f 0=57 點(diǎn)陣/每字符 1=510 點(diǎn)陣/每字符 7.設(shè)定 cgram 地址指令 表 2.4.9 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的 cgram 的地址。 8.設(shè)定 ddram 地址指令 表 2.4.10 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的 cgram 的地址。 9.讀取忙信號(hào)或 ac 地址指令 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 12 頁 表 2.4.11 功能: 讀取忙碌信號(hào) bf 的內(nèi)容,bf=1 表示液晶顯示器忙,暫時(shí)無法接收單片機(jī) 送來的數(shù)據(jù)或指令;當(dāng) bf=0 時(shí),液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令; 讀取地址計(jì)數(shù)器(ac)的內(nèi)容。 10.數(shù)據(jù)寫入 ddram 或 cgram 指令一覽 表 2.4.12 功能: 將字符碼寫入 ddram,以使液晶顯示屏顯示出相對應(yīng)的字符; 將使用者自己設(shè)計(jì)的圖形存入 cgram。 11.從 cgram 或 ddram 讀出數(shù)據(jù)的指令一覽 表 2.4.13 功能:讀取 ddram 或 cgram 中的內(nèi)容。 基本操作時(shí)序: 讀狀態(tài) 輸入:rs=l,rw=h,e=h 輸出:db0db7=狀態(tài)字 寫指令 輸入:rs=l,rw=l,e=下降沿脈沖,db0db7=指令碼 輸出: 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 13 頁 無 讀數(shù)據(jù) 輸入:rs=h,rw=h,e=h 輸出:db0db7=數(shù)據(jù) 寫數(shù)據(jù) 輸入:rs=h,rw=l,e=下降沿脈沖,db0db7=數(shù)據(jù) 輸出: 無 2.52.5 lcd16021602 的一般初始化(復(fù)位)過程的一般初始化(復(fù)位)過程 延時(shí) 15ms 寫指令 38h(不檢測忙信號(hào)) 延時(shí) 5ms 寫指令 38h(不檢測忙信號(hào)) 延時(shí) 5ms 寫指令 38h(不檢測忙信號(hào)) 以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號(hào) 寫指令 38h:顯示模式設(shè)置 寫指令 08h:顯示關(guān)閉 寫指令 01h:顯示清屏 寫指令 06h:顯示光標(biāo)移動(dòng)設(shè)置 寫指令 0ch:顯示開及光標(biāo)設(shè)置 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 14 頁 3 3 電路軟件模擬及仿真電路軟件模擬及仿真 3.13.1 keilkeil 及及 proteusproteus 使用介紹使用介紹 單片機(jī)編程及仿真軟件有很多種,本課程設(shè)計(jì)主要使用的是 keil 及 proteus, 下面對兩種軟件的使用大體介紹下。 3.1.1keilkeil 中驅(qū)動(dòng)程序的實(shí)現(xiàn)4 4 為了能使 keil 成功與 proteus 連接,其關(guān)鍵就是在 keil 中編寫驅(qū)動(dòng)程序并生 成.hex 文件。圖 3.1.1 用紅線圈住的部分為生成.hex 文件必做步驟,圖 3.1.2 為軟 件中一些常用的項(xiàng)或注意點(diǎn)。 圖 3.1.1 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 15 頁 圖 3.1.2 3.1.2proteusproteus 中.hex.hex 文件的導(dǎo)入5 5 在 proteus 中連接好仿真電路圖以后,就要開始向單片機(jī)中導(dǎo)入生成的.hex 文 件。雙擊單片機(jī),會(huì)出現(xiàn)圖 3.1.3 所示圖形,點(diǎn)擊 program file 里面用紅線圈住的 文件夾樣式的按鈕,然后從保存的文件夾中導(dǎo)入.hex 文件,再點(diǎn)擊 ok 鍵,就可以進(jìn) 行模擬仿真了。 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 16 頁 圖 3.1.3 3.23.2 lcd1602lcd1602 入門程序的實(shí)現(xiàn)入門程序的實(shí)現(xiàn) 液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的 忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地 址,也就是告訴模塊在哪里顯示字符,圖 3.2.1 為 1602 顯示要用到的地址。 圖 3.2.1 例如第二行第一個(gè)字符的地址是 40h,那么是否直接寫入 40h 就可以將光標(biāo)定位 在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位 d7 恒定 為高電平 1 所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是 01000000b(40h)+10000000b(80h) 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 17 頁 =11000000b(c0h)。 為了直觀的說明這個(gè)問題,我用 lcd1602 入門的一個(gè)程序來顯示一個(gè)字符。還 是以 a 字為例,實(shí)現(xiàn)在第二行第一個(gè)字符的位置顯示一個(gè) a 字。我們已經(jīng)知道 a 字 的代碼是 41h,所以代碼 41h 和 c0h 是本程序的關(guān)鍵。詳細(xì)程序如下: rs equ p3.7;確定具體硬件的連接方式 rw equ p3.6 ;確定具體硬件的連接方式 e equ p3.5 ;確定具體硬件的連接方式 mov p1,#00000001b acall enable;調(diào)用寫入命令子程序 mov p1,#00111000b acall enable ;調(diào)用寫入命令子程序 mov p1,#00001111b acall enable ;調(diào)用寫入命令子程序 mov p1,#00000110b acall enable ;調(diào)用寫入命令子程序 mov p1,#0c0h acall enable ;調(diào)用寫入命令子程序 mov p1,#01000001b setb rs clr rw;準(zhǔn)備寫入數(shù)據(jù) clr e;執(zhí)行顯示命令 acall delay ;判斷液晶模塊是否忙? setb e;顯示完成,程序停車 ajmp $ enable: clr rs clr rw clr e acall delay setb e ret delay: 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 18 頁 mov p1,#0f0h clr rs setb rw clr e nop setb e jb p1.7,delay ret end 將本程序輸入單片機(jī)后,仿真效果如圖 3.2.1: 圖 3.2.1 3.33.3 字符型液晶顯示模塊與單片機(jī)的連接 單片機(jī)與液晶顯示器的連接方法有兩種。一:直接訪問方式;二:間接控制方 式。一:直接訪問方式模擬接口電路見圖 3.3.12 2: 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 19 頁 圖 3.3.1 直接訪問方式的驅(qū)動(dòng)子程序如下: a15 = e的選通信號(hào)a9 = r/w a8 = rs com equ 20h ; 指令寄存器 dat equ 21h ; 數(shù)據(jù)寄存器 cw_add equ 8000h ; 指令口寫地址 cr_add equ 8200h ; 指令口讀地址 dw_add equ 8100h ; 數(shù)據(jù)口寫地址 dr_add equ 8300h ; 數(shù)據(jù)口讀地址 1、讀bf和ac值 pr0: push dph push dpl push acc mov dptr,#cr_add ; 設(shè)置指令口讀地址 movx a,dptr ; 讀bf和ac值 mov com,a ; 存入com 單元 pop acc pop dpl pop dph ret 2、寫指令代碼子程序 pr1: push dph push dpl 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 20 頁 push acc mov dptr,#cr_add ; 設(shè)置指令口讀地址 pr11: movx a,dptr jb acc.7,pr11 ; 判bf=0? 是繼續(xù) mov a,com mov dptr,#cw_add ; 設(shè)置指令口寫地址 movx dptr,a ; 寫指令代碼 pop acc pop dpl pop dph ret 3、寫顯示數(shù)據(jù)子程序 pr2: push dph push dpl push acc mov dptr,#cr_add ; 設(shè)置指令口讀地址 pr21: movx a,dptr jb acc.7,pr21 ; 判bf=0? 是繼續(xù) mov a,dat mov dptr,#dw_add ; 設(shè)置數(shù)據(jù)口寫地址 movx dptr,a ; 寫數(shù)據(jù) pop acc pop dpl pop dph ret 4、讀顯示數(shù)據(jù)子程序 pr3: push dph push dpl push acc mov dptr,#cr_add ; 設(shè)置指令口讀地址 pr31: movx a,dptr jb acc.7,pr31 ; 判bf=0? 是繼續(xù) 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 21 頁 mov dptr,#dr_add ; 設(shè)置數(shù)據(jù)口讀地址 movx a,dptr ; 讀數(shù)據(jù) mov dat,a ; 存入dat 單元 pop acc pop dpl pop dph ret 二:間接控制方式 間接控制方式(4位總線)是利用hd44780所具有的4位數(shù)據(jù)總線的功能簡化電路接 口的一種接口方式實(shí)用電路如圖3.3.2: 圖 3.3.2 間接控制方式的驅(qū)動(dòng)子程序如下 rs equ p3.3 ; 寄存器選擇信號(hào) r/w equ p3.4 ; 讀/寫選擇信號(hào) e equ p3.5 ; 使能信號(hào) 1、讀bf和ac值 pr0: push acc mov p1,#0ffh ; p1置位, 準(zhǔn)備讀 clr rs ; rs=0 setb r/w ; r/w=1 setb e ; e=1 mov com,p1 ; 讀bf和ac6-4值 clr e ; e=0 mov p1,#0ffh ; p1置位, 準(zhǔn)備讀 setb e ; e=1 mov a,p1 ; 讀ac3-0值 clr e ; e=0 swap a ; 轉(zhuǎn)換成 8位數(shù)據(jù) anl a,#0fh anl com,#0f0h 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 22 頁 orl a,com mov com,a ; 送入com 單元 pop acc ret 2、寫指令代碼子程序 pr1: push acc clr rs ; rs=0 setb r/w ; r/w=1 pr11: mov p1,#0ffh ; p1置位, 準(zhǔn)備 讀 setb e ; e=1 mov a,p1 ; 讀bf和ac6-4值 clr e ; e=0 mov c,acc.7 ; bf?進(jìn)位位c setb e ; e=1 clr e ; e=0 (讀ac3-0值) jc pr11 ; 判別bf=1? 是轉(zhuǎn) clr r/w ; r/w=0 mov p1,com ; 寫入指令代碼高 4位 setb e ; e=1 clr e ; e=0 mov a,com ; 寫入指令代碼低 4位 swap a mov p1,a setb e ; e=1 clr e ; e=0 pop acc ret 3、寫顯示數(shù)據(jù)子程序 pr2: push acc clr rs ; rs=0 setb r/w ; r/w=1 pr21: mov p1,#0ffh ; p1置位, 準(zhǔn)備 讀 setb e ; e=1 mov a,p1 ; 讀bf和ac6-4值 clr e ; e=0 mov c,acc.7 ; bf?進(jìn)位位c setb e ; e=1 clr e ; e=0 (讀ac3-0值) jc pr21 ; 判別bf=1? 是轉(zhuǎn) setb rs ; rs=1 clr r/w ; r/w=0 mov p1,dat ; 寫入數(shù)據(jù)高 4位 setb e ; e=1 clr e ; e=0 mov a,dat ; 寫入數(shù)據(jù)低 4位 swap a mov p1,a setb e ; e=1 clr e ; e=0 pop acc ret 4、讀顯示數(shù)據(jù)子程序 pr3: push acc clr rs ; rs=0 setb r/w ; r/w=1 pr31: mov p1,#0ffh ; p1置位, 準(zhǔn)備 讀 setb e ; e=1 mov a,p1 ; 讀bf和ac6-4值 clr e ; e=0 mov c,acc.7 ; bf?進(jìn)位位c setb e ; e=1 學(xué)院 2009 屆??粕厴I(yè)設(shè)計(jì) 第 23 頁 clr e ; e=0 (讀ac3-0值) jc pr31 ; 判別bf=1? 是轉(zhuǎn) setb rs ; rs=1 setb r/w ; r/w=1 mov p1,#0ffh ; p1置位, 準(zhǔn)備讀 setb e ; e=1 mov com,p1 ; 讀數(shù)據(jù)高 4位 clr e ; e=0 mov p1,#0ffh ; p1置位, 準(zhǔn)備讀 setb e ; e=1 mov a,p1 ; 讀數(shù)據(jù)低 4位 clr e ; e=0 swap a ; 轉(zhuǎn)換成 8位 anl a,#0fh anl dat,#0f0h orl a,dat mov dat,a ; 數(shù)據(jù)送入dat 單元 pop acc ret 3.4 字符型液晶顯示模塊應(yīng)用字符型液晶顯示模塊應(yīng)用 在本章前兩節(jié),已詳細(xì)介紹了液晶顯示模塊與單片機(jī)的連接方法及入門程序的 實(shí)現(xiàn),本節(jié)進(jìn)一步深入研究,要求液晶模塊在直接訪問模式下實(shí)現(xiàn)光標(biāo)左移,使其 兩行顯示一句話,顯示內(nèi)容為“i love my school jmi is my home!”。 相關(guān)內(nèi)容如下: 這個(gè)程序用于實(shí)現(xiàn) lcd1602 的光標(biāo)右移 顯示功能。直接訪問方式的驅(qū)動(dòng)子程序 如下: ;a15=e 的選通信號(hào),a9=r/w,a8=rs com equ 30h ;指令寄存器 dat equ 31h ;數(shù)據(jù)寄存器 cw_add equ 8000h ;指令口寫地址 rs,r/w 為 00 cr_add equ 8200h ;指令口讀地址 rs,r/w 為 01 dw_add equ 8100h ;數(shù)據(jù)口寫地址 rs,r/w 為 10 dr_add equ 8300h ;數(shù)據(jù)口讀地址 rs,r/w 為 11 main: mov sp,#60h mov p3,#0c7h acall init cycle:acall write acall delay mov com,#01h acall pr1 sjmp cycle;寫指令代碼子程序 pr1: push dph push dpl push acc mov dptr,#cr_add ;設(shè)置指令口讀地 址 pr11: movx a,dptr jb acc.7,pr11 ;判 bf=0?是繼續(xù) mov a,com mov dptr,#cw_add ;設(shè)置指令口寫地 址 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 24 頁 movx dptr,a ;寫指令代碼 pop acc pop dpl pop dph ret ;寫顯示數(shù)據(jù)子程序 pr2: push dph push dpl push acc mov dptr,#cr_add ;設(shè)置指令口讀地 址 pr21: movx a,dptr jb acc.7,pr21 ;判 bf=0?是繼續(xù) mov a,dat ;不忙時(shí)寫入數(shù)據(jù) mov dptr,#dw_add ;置數(shù)據(jù)口寫地址 movx dptr,a ;寫數(shù)據(jù) pop acc pop dpl pop dph ret ;直接訪問方式下的初始化子程序 init: mov a,#38h ;功能設(shè)置,單行顯 示,8 位數(shù)據(jù)口,30h 為單行顯示 mov dptr,#cw_add ;寫指令口地址 設(shè)置 mov r2,#03h ;循環(huán)量=3 此循 環(huán)必要,不可刪除 intk: movx dptr,a ;寫指令代碼 lcall delay ;調(diào)延時(shí)子程序 djnz r2,intk ;為什么要寫這么多次? ? mov com,#01h ;清屏 lcall pr1 ;寫入指令 mov com,#06h ;設(shè)置輸入方式,ac 自動(dòng) 增 1,畫面不動(dòng) lcall pr1 ;寫入指令 mov com,#0eh ;設(shè)置顯示方式,光標(biāo)開, 閃爍關(guān) lcall pr1 ;寫入指令 ;mov com,#18h ;設(shè)置光標(biāo),畫面位移 ;lcall pr1 ret ;逐字依次輸入方式演示程序段 write:mov com,#80h ;設(shè)置 ddram 第一 行顯示地址 lcall pr1 ;寫入指令 mov dptr,#tab0 ;設(shè)置數(shù)據(jù)首地址 mov r2,#0 wrin0:mov a,r2 movc a,a+dptr ;取待寫數(shù)據(jù) mov dat,a ;把取到的數(shù)據(jù)存入數(shù)據(jù)寄 存器 lcall pr2 ;調(diào)用寫數(shù)據(jù)子程序 lcall delay ;延時(shí) inc r2 cjne r2,#16,wrin0 ;25 字符顯示完? mov com,#0c0h acall pr1 wrin1:mov a,r2 movc a,a+dptr ;取待寫數(shù)據(jù) mov dat,a ;把取到的數(shù)據(jù)存入數(shù)據(jù)寄 存器lcall pr2 ;調(diào)用寫數(shù)據(jù)子程序 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì) 第 25 頁 lcall delay ;延時(shí) inc r2 cjne r2,#32,wrin1 ;25 符顯示完? ret delay:mov r7,#200 d02: mov r6,#200 d01: nop nop nop djnz r6,d01 djnz r7,d02 ret 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì)第 26 頁 tab0:db i,20h,l,o,v,e,20h,m,y,20h,s,c,h,o,o,l db 20h,j,m,i,20h,i,s,20h,m,y,20h,h,o,m,e,! ;i love my school jmi is my home! end 其仿真效果圖如圖 3.4.1 所示: 圖 3.4.1 3.53.5 液晶模塊顯示的拓展提高液晶模塊顯示的拓展提高 平時(shí)我們利用液晶顯示模塊顯示的字符都是芯片內(nèi)部自帶的,而 hd44780 芯片允許 我們自定義一部分字符。所以本節(jié)主要對液晶顯示器的接口技術(shù)稍微拓展提高,使其能 夠顯示帶有自定義字符的本次論文答辯時(shí)間“2009 年 6 月 9 日”等字符。 首先舉例說明自定義字符實(shí)現(xiàn)的方法。以“月”字為例: 01111 01001 01111 01001 01111 01001 10001 00000 根據(jù)上圖容易看出“月”字代碼為:0fh,09h,0fh,09h,0fh,09h,11h,00h。其他字符 如“年” 、 “日”代碼可根據(jù)此方法類推。 再次回到本次拓展提高所要的程序代碼部分。這個(gè)程序用于實(shí)現(xiàn) lcd1602 的光標(biāo)右 移顯示功能。可以循環(huán)顯示。 直接訪問方式的驅(qū)動(dòng)子程序如下: ;a15=e 的選通信號(hào),a9=r/w,a8=rscom equ 30h ;指令寄存器 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì)第 27 頁 dat equ 31h ;數(shù)據(jù)寄存器 cw_add equ 8000h ;指令口寫地址 rs,r/w 為 00 cr_add equ 8200h ;指令口讀地址 rs,r/w 為 01 dw_add equ 8100h ;數(shù)據(jù)口寫地址 rs,r/w 為 10 dr_add equ 8300h ;數(shù)據(jù)口讀地址 rs,r/w 為 11 main: mov sp,#60h mov p3,#0c7h acall init acall cg_write cycle:acall cgdisp acall delay mov com,#01h acall pr1 sjmp cycle ;寫指令代碼子程序 pr1: push dph push dpl push acc mov dptr,#cr_add ;設(shè)置指令口讀地 址 pr11: movx a,dptr jb acc.7,pr11 ;判 bf=0?是繼續(xù) mov a,com mov dptr,#cw_add ;設(shè)置指令口寫地 址 movx dptr,a ;寫指令代碼 pop acc pop dpl pop dph ret ;寫顯示數(shù)據(jù)子程序 pr2: push dph push dpl push acc mov dptr,#cr_add ;設(shè)置指令口讀地 址 pr21: movx a,dptr jb acc.7,pr21 ;判 bf=0?是繼續(xù) mov a,dat ;不忙時(shí)寫入數(shù)據(jù) mov dptr,#dw_add ;置數(shù)據(jù)口寫地址 movx dptr,a ;寫數(shù)據(jù) pop acc pop dpl pop dphret ;直接訪問方式下的初始化子程序 init: mov a,#30h ;功能設(shè)置,單 行顯示,8 位數(shù)據(jù)口,30h 為單行顯示 mov dptr,#cw_add ;寫指令口地址設(shè) 置 mov r2,#03h ;循環(huán)量=3 此循 環(huán)必要,不可刪除 intk: movx dptr,a ;寫指令代 碼 lcall delay ;調(diào)延時(shí)子程序 djnz r2,intk ;為什么要寫這么多 次? mov com,#01h ;清屏 lcall pr1 ;寫入指令 mov com,#06h ;設(shè)置輸入方式, ac 自動(dòng)增 1,畫面不動(dòng) lcall pr1 ;寫入指令 mov com,#0ch ;設(shè)置顯示方式, 光標(biāo)開,閃爍關(guān) lcall pr1 ;寫入指令 ret ;寫 cgram 子程序 cg_write: movcom,#40h ;設(shè)置 cgram 地址 lcall pr1 mov r2,#64 ;循環(huán)量設(shè)置 mov r3,#00h mov dptr,#cgtab ;設(shè)置字模數(shù)據(jù)首地 址 cg1: mov a,r3 movc a,a+dptr mov dat,a lcall pr2 inc r3 djnz r2,cg1 ret ;自定義字符顯示演示程序段 cgdisp: movdptr,#tabdy1 ;設(shè)置 學(xué)院 2009 屆專科生畢業(yè)設(shè)計(jì)第 28 頁 字表首地址 mov r2,#0 ;循環(huán)量設(shè)置 loop1: mov a,r2 movc a,a+dptr ;取字符代碼 mov dat,a lcall pr2 ;寫數(shù)據(jù) inc r2 cjne r2,#5,loop1 ret delay:mov r7,#200 d02: mov r6,#200 d01: ;nop ;nop nop djnz r6,d01 djnz r7,d02 ret tabdy1: db 2009,00h,6,01h,9,02h ,fenglei cgtab: db 08h,1fh,04h,0fh,0ah,1fh,02h,02h ;“年”代碼=00h db 0fh,09h,0fh,09h,0fh,09h,11h,00h ;“月”代碼=01h db 1fh,11h,11h,1fh,11h,11h,1fh,00h ;“日”代碼=02h db 11h,0ah,04h,1fh,04h,1fh,04h,

溫馨提示

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

評論

0/150

提交評論