當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 熱搜器件
[導(dǎo)讀]1LCD 1602簡(jiǎn)介L(zhǎng)CD1602可顯示兩行,每行16個(gè)字符,不能顯示漢字。16腳的LCD 1602帶背光,14腳的不帶背光。2LCD1602 端口引腳不一一記錄手冊(cè)上面是咋個(gè)描述LCD 1602的了。記錄一下操作過程,下圖是LCD 1602在51單片機(jī)上

1LCD 1602簡(jiǎn)介

LCD1602可顯示兩行,每行16個(gè)字符,不能顯示漢字。16腳的LCD 1602帶背光,14腳的不帶背光。

2LCD1602 端口引腳

不一一記錄手冊(cè)上面是咋個(gè)描述LCD 1602的了。記錄一下操作過程,下圖是LCD 1602在51單片機(jī)上面的連線。

 

圖1 LCD 與單片機(jī)接線圖

D0-D7引腳連接在單片機(jī)的P0端口。

[plain] view plaincopyprint?LCD_RS = P1^0;

LCD_RW = P1^1;

LCD_EN = P2^5;

查看LCD 1602手冊(cè),得到LCD引腳組合的含義如下:

表格1:LCD操作模式

模式

輸入

輸出

讀狀態(tài)

RS=0,RW=H,EN為高變低脈沖

輸出:D0~D7個(gè)狀態(tài)值

讀數(shù)據(jù)

RS=1,RW=1,EN為高變低脈沖

輸出:

寫指令

RS=0,RW=0,D0--D7=數(shù)據(jù),EN由高脈沖變?yōu)榈兔}沖

輸出D0--D7狀態(tài)值

寫數(shù)據(jù)

RS=1, RW=0, D0--D7=數(shù)據(jù),EN由高脈沖變?yōu)榈兔}沖

輸出D0--D7狀態(tài)值

[!--empirenews.page--]

可以參照?qǐng)D1的接線圖對(duì)這些模式和輸入輸出做出相應(yīng)的理解。模式、輸入都是跟單片機(jī)I/O端口相連的端口。輸出是使LCD顯示的內(nèi)容。在編寫程序時(shí),可以先設(shè)置LCD顯示內(nèi)容的格式(初始化LCD),然后再對(duì)LCD進(jìn)行讀寫操作。這些過程由LCD跟單片機(jī)相連的I/O端口來完成。

3LCD 1602的操作時(shí)序

查看LCD 1602手冊(cè),以LCD寫操作時(shí)序?yàn)槔涗浽趯?duì)LCD操作的過程中需要注意到的延遲語句的編寫,否則可能導(dǎo)致對(duì)LCD的操作失敗。

 

圖2 LCD的寫操作時(shí)序

根據(jù)表一LCD的操作時(shí)序可知,在RS,RW,E(N),DB7.0(D0-D7)滿足一定時(shí)序的高低電平條件時(shí)就可以對(duì)LCD進(jìn)行寫操作。變化都不是瞬間的,在對(duì)RS等置高置低時(shí),RS等變高變低有一個(gè)下劃的過度時(shí)間,如果這種過渡的時(shí)間超過單片機(jī)內(nèi)一條或幾條指令的執(zhí)行時(shí)間,則這種時(shí)序就有可能會(huì)被錯(cuò)開。如現(xiàn)在對(duì)LCD進(jìn)行寫操作,將RS置高,RW置低,準(zhǔn)備好DB7.0數(shù)據(jù),E由高變低等操作由以下代碼完成:

[plain] view plaincopyprint?LCD_RS = 1;

LCD_RW = 0;

DB7_0 = ‘A’;

LCD_EN = 1;

LCD_EN = 0;

RS在高電平時(shí)選擇數(shù)據(jù)寄存器,在低電平時(shí)選擇指令寄存器。

RW在高電平時(shí)進(jìn)行讀操作,在低電平時(shí)進(jìn)行寫操作。

E(N)為使能端,當(dāng)E(N)端由高電平跳變?yōu)榈碗娖綍r(shí),LCD模塊執(zhí)行命令。

DB7.0為8位雙向數(shù)據(jù)。

其中LCD_RS等都是單片機(jī)控制LCD RS等端口的引腳,如果(^-^)只有RS端徹底變?yōu)?的時(shí)間超過以上的所有代碼執(zhí)行時(shí)間,則在E低脈沖到來之時(shí),RS還是低電平,所以由于RS的電平不滿足條件對(duì)LCD的寫操作將會(huì)失敗。當(dāng)然,傳說LCD的電平變化時(shí)間比指令執(zhí)行時(shí)間快,但是為了可靠穩(wěn)定,在程序中肯定需要等待對(duì)應(yīng)的端口徹底變?yōu)樾枰娖綍r(shí)再寫其它端口的值。就這么等待太長(zhǎng)時(shí)間肯定是會(huì)為程序的執(zhí)行結(jié)果帶來影響,只需要等待端口的電平能完全變化的時(shí)間即可。手冊(cè)中有說明的:

 

圖3 LCD初始化圖

雖然需要等待的時(shí)間對(duì)于人類來說實(shí)在是可以忽略不計(jì),但在LCD類中來說卻是必須的。如果沒有這些等待,那么就有可能遇不到LCD與你寫入內(nèi)容的邂逅或者出現(xiàn)偶爾成功偶爾失敗的場(chǎng)景。

在每次讀/寫指令后都應(yīng)該等待一段時(shí)間來等待LCD 端口電平的徹底變化,可用keil軟件模擬一段時(shí)間,用5ms(等待時(shí)間小于5ms者)等時(shí)間代替需要等待的時(shí)間都是可以的。

4 LCD1602的指令集 相關(guān)

LCD指令集筆記

在LCD 1602指令集中,對(duì)LCD來說有四種意思:

(1) RS和RW都為0時(shí)表示對(duì)LCD寫指令操作,包括寫入LCD的顯示模式和設(shè)定LCD地址的指令。.顯示模式包括清屏、地址歸為、顯示狀態(tài)、進(jìn)入點(diǎn)設(shè)定、功能設(shè)定、游標(biāo)顯示模式操作;關(guān)于地址的操作包括設(shè)定CGRAM地址、設(shè)定DDRAM地址。

(2) 當(dāng)RS=0,RW=1時(shí),表示讀LCD狀態(tài),此時(shí)可以讀取LCD忙信號(hào),同時(shí)可以讀取地址計(jì)數(shù)器的值。忙信號(hào)的狀態(tài)用來確定LCD內(nèi)部動(dòng)作是否完成,若在LCD內(nèi)部出于忙狀態(tài)時(shí)對(duì)LCD進(jìn)行讀寫操作將會(huì)失敗。

(3)當(dāng)RS=1時(shí),若RW=0表示寫數(shù)據(jù)操作,若RW=1表示讀數(shù)據(jù)操作。

CGRAM

CGRAM為L(zhǎng)CD模塊內(nèi)部的字符發(fā)生存儲(chǔ)器,里面存了不同的點(diǎn)陣字符圖形,包括阿拉伯?dāng)?shù)字,英文大小寫字符等。每個(gè)字符都有一個(gè)固定的代碼,如‘A’的代碼是01000001,(41H),需要顯示‘A’時(shí)只需要將地址為41H中的點(diǎn)陣圖形顯示出來就可以看見‘A’了。具體字符點(diǎn)陣圖查看手冊(cè)為全宜。

LCD1602顯示屏內(nèi)部顯示地址表

輸入顯示字符地址,也就是告訴LCD在哪里顯示字符。LCD供兩行,第一行可立即顯示字符的地址為00H—0FH,第二行可立即顯示字符的地址為40H—67H,如果在其它地址中顯示字符,需要通過移屏指令[00011000:整屏左移光標(biāo)跟著移動(dòng); 00011100:整屏右移光標(biāo)跟著移動(dòng)]將它們移入可顯示區(qū)域方可正確顯示。當(dāng)要在00H處顯示字符時(shí),寫入的地址應(yīng)為00H + 80H(因?yàn)橹肔CD顯示位置時(shí)要求D7位始終為1,手冊(cè)中‘置數(shù)據(jù)存儲(chǔ)器地址’指令)

5 LCD 1602程序編寫

LCD初始化

[plain] view plaincopyprint?//----------------------- ---------

//寫命令,初始化端口設(shè)置LCD顯示模式

//----------------------- ---- ----

void LCD_mode_init()

{

LCD_EN = L;

//等待LCD電路完全接通

delay_ms( DELAY_TIME_FOR_INIT );

//P0= 00111000設(shè)置16x2顯示,5x7點(diǎn)庫(kù),8位數(shù)據(jù)端口

write_command( 0x38 );

delay_ms( DELAY_TIME );

//LCD開顯示,顯示光標(biāo),光標(biāo)閃爍

write_command( 0x0f );

//讀寫字符后地址指針、光標(biāo)加1,整屏顯示不移動(dòng)

write_command( 0x06 );

//清顯示,便對(duì)LCD寫入

write_command( 0x01 );

}

根據(jù)圖3,當(dāng)LCD電路接通之時(shí),需要用約15ms的時(shí)間來讓LCD VDD電壓達(dá)4.5V,雖然在開啟單片機(jī)電源的時(shí)候程序還未執(zhí)行到初始化程序就已經(jīng)過了15ms讓LCD VDD電源達(dá)4.5V。但也有可能程序中只包含了LCD程序,初始化被放在了最前面,15ms的時(shí)間足以讓單片機(jī)運(yùn)行很多指令了(可以由單片機(jī)的機(jī)器周期和一條指令執(zhí)行的機(jī)器周期數(shù)比較一下),為了防止在LCDVDD電源未達(dá)4.5V時(shí)單片機(jī)程序已經(jīng)執(zhí)行到設(shè)置LCD顯示模式的指令,就在進(jìn)入LCD初始化程序時(shí)等待15ms的時(shí)間,讓LCD電源初始化完畢。

寫指令

[plain] view plaincopyprint?//-------- -----

//寫命令

//--------- ----

void write_command( uchar command )

{

while( lcd_busy() );

LCD_RS = L;

LCD_RW = L;

delay_ms(DELAY_TIME);

P0 = command;

//等待數(shù)據(jù)穩(wěn)定

delay_ms(DELAY_TIME);

LCD_EN = H;

//讓使能位保持到一,負(fù)脈沖跳變

delay_ms( DELAY_TIME );

LCD_EN = L;

delay_ms( DELAY_TIME );[!--empirenews.page--]

}

寫指令前首先要檢查L(zhǎng)CD內(nèi)部操作是否已經(jīng)完成,LCD的BF位(D7)為高電平表示忙,為低電平表示空閑。同理,在對(duì)每一個(gè)端口設(shè)置高低電平后,同樣需要一段時(shí)間來等待電平的徹底變化。

寫數(shù)據(jù)

[plain] view plaincopyprint?//-----------------------

//寫數(shù)據(jù),寫LCD顯示內(nèi)容

//-----------------------

void write_data( uchar wdata )

{

while( lcd_busy() );

LCD_RS = H;

LCD_RW = L;

LCD_EN = L;

P0 = wdata;

//等待DB0-DB7數(shù)據(jù)穩(wěn)定

delay_ms( DELAY_TIME );

LCD_EN = H;

//讓使能位充分達(dá)到1

delay_ms( DELAY_TIME );

LCD_EN = L;

delay_ms( DELAY_TIME );

}

檢測(cè)LCD忙信號(hào)

[plain] view plaincopyprint?//--------------------

//檢測(cè)LCD的忙信號(hào)

//--------------------

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delay_ms( DELAY_TIME );

result = (bit)(P0&0x80);

LCD_EN = 0;

return result;

}

在檢測(cè)LCD忙信號(hào)的同時(shí),還可以設(shè)置一下原本該低或該高的位的狀態(tài)。P0端口是連接到D0—D6端口的I/O引腳,0x80就是用來檢測(cè)D7位狀態(tài)的數(shù)據(jù)。

延遲函數(shù)

[plain] view plaincopyprint?//-------- -----

//延遲函數(shù)

//--------- ----

void delay_ms( uint ms )

{

uint i, j;

for(i = ms; i > 0; i--){

for(j = 110; j > 0; j--){

;

}

}

}

根據(jù)單片機(jī)的晶振和keil執(zhí)行指令的時(shí)間計(jì)算,以上延遲函數(shù)約延遲ms 毫秒的時(shí)間。DELAY_TIME的宏值為5,表示延遲5毫秒的時(shí)間。LCD有的端口不需要延遲這么長(zhǎng)的時(shí)間,這個(gè)可以調(diào)試到適合相應(yīng)端口最適合的延遲時(shí)間即可。借助手冊(cè)和枚舉調(diào)試法。

運(yùn)行結(jié)果

將初始化函數(shù)放置在main函數(shù)中后,將LCD的顯示地址設(shè)置在第一行第一列(此指令在寫指令集中,可調(diào)用write_command( 0x80)來完成),然后寫字符到LCD第一行中。再將顯示地址跳到第二行,地址后移需要顯示字符傳長(zhǎng)度個(gè)單位,寫入顯示的字符傳,對(duì)整個(gè)屏幕移位(由寫指令集中指令完成,移字符傳長(zhǎng)度那么多位,移完一個(gè)停留的時(shí)間需要長(zhǎng)點(diǎn),如200ms左右的時(shí)間)。

然后讓程序等待,只為L(zhǎng)CD操作演示^-^。

程序的效果為:首先在第一行顯示了指定的字符串。當(dāng)移入第二行字符串時(shí),由于是整個(gè)屏幕的移動(dòng),所以第一行字符串也隨之移入了屏幕的左邊。

現(xiàn)將兩行的字符串顯示在LCD屏幕之上,不采取移動(dòng)的操作。

 

6 總結(jié)

電平變化時(shí)不是瞬間的,需要用延遲函數(shù)來等待相應(yīng)位徹底的編程預(yù)期的電平。這是跟寫其它程序的一個(gè)區(qū)別。每逢遇到對(duì)硬件引腳電平的置位時(shí),都需要結(jié)合手冊(cè)看看對(duì)應(yīng)引腳的靈敏度,若高出指令執(zhí)行時(shí)間徐許多數(shù)量級(jí)就不用延遲語句,否則應(yīng)當(dāng)考慮用延遲語句來等待。應(yīng)該走進(jìn)硬件的操作時(shí)序世界中去才能編寫好它們的程序。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉