第2章 單片機(jī)輸入輸出應(yīng)用_第1頁(yè)
第2章 單片機(jī)輸入輸出應(yīng)用_第2頁(yè)
第2章 單片機(jī)輸入輸出應(yīng)用_第3頁(yè)
第2章 單片機(jī)輸入輸出應(yīng)用_第4頁(yè)
第2章 單片機(jī)輸入輸出應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩146頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章單片機(jī)輸入輸出應(yīng)用流水燈設(shè)計(jì)矩陣鍵盤(pán)設(shè)計(jì)LCD液晶設(shè)計(jì)數(shù)碼管設(shè)計(jì)

2.1單片機(jī)并行輸入輸出端口結(jié)構(gòu)知識(shí)51系列單片機(jī)一般采用40只引腳的雙列直插式(DIP——DualIn-linePackage)封裝結(jié)構(gòu)引腳定義及功能DIP引腳分布電源及晶振引腳(共4只)控制引腳(共4只)端口引腳(共32只)三類(lèi)

并行輸入/輸出電路結(jié)構(gòu)P0.0

P0.1

P0.2P0.3P0.4P0.5P0.6P0.7P1.0

P1.1

P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P3.0

P3.1

P3.2P3.3P3.4P3.5P3.6P3.74個(gè)8位并行I/O口:P0,P1,P2,P3;均可作為雙向I/O端口使用。

P0:訪問(wèn)片外擴(kuò)展存儲(chǔ)器時(shí),

復(fù)用為低8位地址線和數(shù)據(jù)線

P2:高8位地址線。P1:雙向I/O端口

P3:第二功能1

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

313029282726252424222180318051875189C51P0~P3小結(jié)P0~P3口都可作為準(zhǔn)雙向通用I/O口。1.其中只有P0口需要外接上拉電阻(10kΩ)

;2.在需要擴(kuò)展片外設(shè)備時(shí),P2口可作為其地址線接口,3.P0口可作為其地址線/數(shù)據(jù)線復(fù)用接口,此時(shí)它是真正的雙向口。

2.2LED流水燈項(xiàng)目設(shè)計(jì)項(xiàng)目任意模式霓虹燈顯示

各顯示模式字之間無(wú)任何變化規(guī)律,無(wú)法采用移位指令和循環(huán)結(jié)構(gòu)的程序來(lái)實(shí)現(xiàn)。應(yīng)該采用什么結(jié)構(gòu)的程序呢?任務(wù)i=0 P0.7=1 P0.6=1 P0.5=1 P0.4=0 P0.3=0 P0.2=1 P0.1=1 P0.0=1 LED7滅 LED6滅 LED5滅 LED4亮 LED3亮

LED2滅 LED1滅 LED0滅i=1 P3.7=1 P3.6=1 P3.5=0 P3.4=1 P3.3=1 P3.2=0 P3.1=1 P3.0=1 LED7滅 LED6滅 LED5亮

LED4滅 LED3滅 LED2亮

LED1滅 LED0滅i=2 P3.7=1 P3.6=0 P3.5=1 P3.4=1 P3.3=1 P3.2=1 P3.1=0 P3.0=1 LED7滅 LED6亮

LED5滅 LED4滅 LED3滅 LED2滅 LED1亮

LED0滅i=3 P3.7=0 P3.6=1 P3.5=1 P3.4=1 P3.3=1 P3.2=1 P3.1=1 P3.0=0

LED7亮

LED6滅 LED5滅 LED4滅 LED3滅 LED2滅 LED1滅 LED0亮動(dòng)手做——畫(huà)出硬件電路圖

單片機(jī)有4個(gè)8位的I/O口P0、P1、P2、P3,任意一個(gè)I/O口都可以用來(lái)控制8個(gè)LED燈的亮滅顯示,該任務(wù)采用P0口的控制8個(gè)LED燈,電路如圖所示。Proteus的元件有RESPACK-8等,1為公共引腳,其它位每個(gè)電阻的另一個(gè)引腳為避免連線復(fù)雜,Proteus可以采用網(wǎng)絡(luò)標(biāo)號(hào),就是需要連接的兩個(gè)點(diǎn)或更多的點(diǎn)用相同的網(wǎng)絡(luò)標(biāo)號(hào)標(biāo)上,就與各點(diǎn)之間的連線等效了。CPU的微操作必須在統(tǒng)一的時(shí)鐘控制下才能正確進(jìn)行,微調(diào)電容:C1、C2≈5~40pF晶振:石英晶體封裝

MCS-51的時(shí)鐘頻率為6~12MHz可選不同的晶振需要通過(guò)單片機(jī)引腳接入晶振元件或外部時(shí)鐘內(nèi)部時(shí)鐘方式1.時(shí)鐘電路時(shí)鐘電路

單片機(jī)本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)該在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格的按時(shí)序進(jìn)行工作。時(shí)鐘電路用于產(chǎn)生單片機(jī)所需要的時(shí)鐘信號(hào)。時(shí)序的定時(shí)單位:時(shí)鐘振蕩周期P、機(jī)器周期、指令周期1個(gè)機(jī)器周期=12個(gè)時(shí)鐘振蕩周期1個(gè)指令周期約為1~4個(gè)機(jī)器周期復(fù)位的概念:使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作。復(fù)位方法:必須使RST/VPD加上持續(xù)兩個(gè)機(jī)器周期以上的高電平。復(fù)位后的初始狀態(tài):

PC=0000HP0~P3=0FFH,SP=07H

其他SFR均為00H,片內(nèi)RAM為任意狀態(tài)2.復(fù)位與復(fù)位電路(Resetcircuit)單片機(jī)復(fù)位條件:必須使RST引腳持續(xù)2微秒高電平(外部時(shí)鐘12MHz)需要進(jìn)行復(fù)位的場(chǎng)合:上電復(fù)位(開(kāi)機(jī)、掉電后重新上電)按鍵復(fù)位(例如發(fā)生故障后、死機(jī)時(shí))3.LED發(fā)光限流電路//功能:采用數(shù)組實(shí)現(xiàn)的任意變化的霓虹廣告燈控制程序#include<reg51.h> //包含頭文件REG51.H#defineucharunsignedchar//定義數(shù)據(jù)類(lèi)型voiddelay(ucharx); //延時(shí)函數(shù)聲明voidmain() //主函數(shù){uchari;uchardisplay[]={0xe7,0xdb,0xbd,0x7e};while(1){for(i=0;i<4;i++){P0=display[i]; //顯示字送P0口

delay(250);delay(250);

//延時(shí)

}}}程序設(shè)計(jì)/****************延時(shí)函數(shù)t(ms)*************/voiddelay(unsignedchart){ unsignedcharj,k; for(j=0;j<t;j++) { for(k=0;k<255;k++){} }}KeilC規(guī)定16進(jìn)制數(shù)必須以0x開(kāi)頭,比如0x1表示一個(gè)16進(jìn)制數(shù),比如0xfe就是代表十六進(jìn)制數(shù)fe,用二進(jìn)制表示就是11111110。數(shù)組分為一維、二維、三維和多維數(shù)組等,常用的是一維、二維和字符數(shù)組。(1)一維數(shù)組的定義格式如下:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式];例如“chara[5];”即定義字符數(shù)組a,有5個(gè)元素。(2)數(shù)組元素的一般形式為:數(shù)組名[下標(biāo)]

例如:tab[5]、num[i+j]、a[i++]都是合法的數(shù)組元素。(3)數(shù)組初始化賦值的一般形式為:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式]={值,值……值};例如:intnum[10]={0,1,2,3,4,5,6,7,8,9};動(dòng)手做——proteus仿真從PROTEUS中選取如下元器件:(1)AT89C51,單片機(jī);(2)RES,電阻;(3)CAP、CAP-ELEC,電容、電解電容;(4)LED,發(fā)光二極管。放置元器件、電源和地,設(shè)置參數(shù),連線,最后進(jìn)行電氣規(guī)則檢查,將目標(biāo)代碼文件.hex加載到AT89C51單片機(jī)中,電路仿真

//流水燈項(xiàng)目拓展一:采用數(shù)組實(shí)現(xiàn)8個(gè)LED燈的中間2個(gè)燈先亮后滅,并向外展開(kāi),再向內(nèi)收縮。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明voidmain(){uchari;uchardisplay[]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb};//數(shù)組while(1) { for(i=0;i<6;i++) { P0=display[i];//P0口輸出控制流水燈

delay(250);delay(250);//延時(shí)500ms } }}//流水燈項(xiàng)目拓展二:采用數(shù)組實(shí)現(xiàn)8個(gè)LED燈的自上而下點(diǎn)亮。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明voidmain(){uchari;uchardisplay[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};while(1) { for(i=0;i<8;i++) { P0=display[i];//P0口輸出控制流水燈

delay(250);delay(250);//延時(shí)500ms } }}

2.3數(shù)碼管顯示項(xiàng)目設(shè)計(jì)項(xiàng)目1.數(shù)碼管的結(jié)構(gòu)共陽(yáng)極

共陰極

VCCGND共陽(yáng)極數(shù)碼管顯示注意Com端接Vcc,低電平點(diǎn)亮數(shù)碼管共陰極數(shù)碼管顯示注意Com端接GND,高電平點(diǎn)亮數(shù)碼管2.LED數(shù)碼管的字型編碼字型00011111字型碼dpgfedcba01101101十六進(jìn)制:0x6d共陰極

共陰(陽(yáng))數(shù)碼管碼表動(dòng)手做——畫(huà)出硬件電路圖

數(shù)碼管靜態(tài)顯示需要合適的驅(qū)動(dòng)電流,單片機(jī)輸出口的輸出電流會(huì)顯得不夠用,所以一般會(huì)使用74HC573鎖存器作為驅(qū)動(dòng),并且采用300Ω的限流電阻接數(shù)碼管。74HC573的OE引腳在使用時(shí)通常與GND連接在一起,通過(guò)LE來(lái)選擇鎖存器的鎖存與使用狀態(tài)。LE為高電平時(shí),鎖存器信號(hào)輸入端接受信號(hào)發(fā)送到輸出端,LE為低電平時(shí),輸入信號(hào)鎖存在芯片內(nèi),D0--D7為信號(hào)輸入端,Q1-Q7為信號(hào)輸出端。靜態(tài)數(shù)碼管顯示程序設(shè)計(jì)如下。#include<reg51.h>sbitLE=P2^0;//P2.0管腳命名為L(zhǎng)Evoidmain(void){ LE=1;//鎖存器數(shù)據(jù)透明

P0=0x7d;//七段碼,顯示6 LE=0;//鎖存器數(shù)據(jù)鎖存

while(1);}靜態(tài)數(shù)碼管項(xiàng)目仿真調(diào)試結(jié)果為顯示“6”。動(dòng)手做——proteus仿真項(xiàng)目拓展:在數(shù)碼管上循環(huán)顯示十六個(gè)字符0~F程序設(shè)計(jì)如下。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明sbitLE=P2^0;voidmain(void){ uchari; ucharled[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰七段碼表數(shù)組

for(i=0;i<16;i++) { LE=1;//鎖存器數(shù)據(jù)透明

P0=led[i];//七段碼顯示

LE=0;//鎖存器數(shù)據(jù)鎖存

delay(250);delay(250);delay(250);delay(250); }}

2.4動(dòng)態(tài)數(shù)碼管顯示項(xiàng)目設(shè)計(jì)項(xiàng)目動(dòng)態(tài)數(shù)碼管的顯示是指數(shù)碼管不是一直點(diǎn)亮顯示的,而是間歇點(diǎn)亮顯示的。數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上數(shù)碼管不是一直點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一個(gè)穩(wěn)定的顯示,不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。動(dòng)態(tài)數(shù)碼管項(xiàng)目設(shè)計(jì)任務(wù)為:?jiǎn)纹瑱C(jī)控制P口輸出,用6個(gè)數(shù)碼管動(dòng)態(tài)顯示某數(shù)字及字符,如顯示電流1.255A的數(shù)字和字符為“1.255A”。動(dòng)手做——畫(huà)出硬件電路圖

74LS138譯碼器:Y0Y7

?

?

?

?譯碼使能端譯碼輸入端譯碼輸出端74LS138真值表使能端輸入端輸出端E1P2.3S2S2

CBAP2.2P2.1P2.0

Y0Y1Y2Y3Y4Y5Y6Y7100100100100100100100100000

00101001110010111011101

111111

101

111111

1

01

1111

1

1

10

1

1111

1

1

1

01

11

1

1

1

1

1

0

1111111

10

111111

1

10

動(dòng)態(tài)數(shù)碼管顯示程序設(shè)計(jì)如下。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明voidmain(){ unsignedchari,abc=0x8;//首個(gè)數(shù)碼管顯示

unsignedcharled[]={0x6,0x80,0x5b,0x6d,0x6d,0x77}; for(i=0;i<6;i++) { P2=abc++; if(abc==0x0e)abc=0x8;//第6個(gè)數(shù)碼管后,回頭

P0=led[i]; delay(2);//延時(shí)2ms }}動(dòng)手做——proteus仿真項(xiàng)目拓展一:在第1~6個(gè)數(shù)碼管位置同時(shí)顯示十六個(gè)字符0~F#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明voidmain(){ uchari,l,m,abc=0x8;//首個(gè)數(shù)碼管顯示

ucharled[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//數(shù)碼管碼表

for(i=0;i<16;i++) { for(m=0;m<100;m++) { for(l=0;l<6;l++) { P2=abc++; if(abc==0x0e)abc=0x8;//第6個(gè)數(shù)碼管后,回首

P0=led[i]; //數(shù)碼管顯示

delay(2);//延時(shí)2ms } } }}項(xiàng)目拓展二:在第1~6個(gè)數(shù)碼管位置循環(huán)顯示十二個(gè)字符0~b。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明voidmain(){ unsignedchari,abc=0x8;//首個(gè)數(shù)碼管顯示

unsignedcharled[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d, 0x7d,0x7,0x7f,0x6f,0x77,0x7c};//數(shù)碼管碼表

for(i=0;i<12;i++) { P2=abc++; if(abc==0x0e)abc=0x8;//第6個(gè)數(shù)碼管后,回首

P0=led[i]; //數(shù)碼管顯示

delay(250);delay(250);//延時(shí)500ms }}

2.5獨(dú)立按鍵項(xiàng)目設(shè)計(jì)項(xiàng)目一個(gè)按鍵實(shí)際上是一個(gè)開(kāi)關(guān)元件。單片機(jī)使用的按鍵是一種常開(kāi)型的開(kāi)關(guān),平時(shí)按鍵的兩個(gè)觸點(diǎn)處于斷開(kāi)狀態(tài),按下鍵時(shí)它們才閉合。按鍵按鍵在閉合和斷開(kāi)時(shí),觸點(diǎn)會(huì)存在抖動(dòng)現(xiàn)象:

鍵的抖動(dòng)圖10.1鍵盤(pán)抖動(dòng)示意圖去除鍵的抖動(dòng)抖動(dòng)時(shí)間一般為5~10ms。抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為確保CPU對(duì)鍵的一次閉合僅做一次處理,必須去除鍵抖動(dòng)。抖動(dòng)的去除可以采用硬件的辦法,也可以軟件的辦法。軟件去抖動(dòng)的方法其實(shí)就是利用延時(shí)來(lái)去掉這一抖動(dòng)時(shí)間。獨(dú)立按鍵項(xiàng)目設(shè)計(jì)任務(wù)為:用獨(dú)立按鍵控制LED燈。動(dòng)手做——畫(huà)出硬件電路圖

獨(dú)立按鍵程序設(shè)計(jì)如下。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明sbitBUTTON0=P1^0;sbitBUTTON1=P1^1;sbitBUTTON2=P1^2;sbitBUTTON3=P1^3;//按鍵管腳定義sbitLED0=P0^0;sbitLED1=P0^1;sbitLED2=P0^2;sbitLED3=P0^3;//LED控制端定義voidmain(){ while(1) { if(BUTTON0==0) { delay(10);//延時(shí)10ms防抖

if(BUTTON0==0)//查詢(xún)按鍵0 { LED0=0; } elseLED0=1; }elseif(BUTTON1==0) { delay(10); if(BUTTON1==0)//查詢(xún)按鍵1 { LED1=0; } elseLED1=1; } elseif(BUTTON2==0) { delay(10); if(BUTTON2==0)//查詢(xún)按鍵2 { LED2=0; } elseLED2=1; } elseif(BUTTON3==0) { delay(10); if(BUTTON3==0)//查詢(xún)按鍵3 { LED3=0; } elseLED3=1; } }}動(dòng)手做——proteus仿真項(xiàng)目拓展-搶答器,4個(gè)按鍵中,如果一個(gè)按鍵被搶先按下,則相應(yīng)LED燈亮起,再有其他按鍵,則不再作相應(yīng)變化#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明sbitBUTTON0=P1^0;sbitBUTTON1=P1^1;sbitBUTTON2=P1^2;sbitBUTTON3=P1^3;//按鍵管腳定義sbitLED0=P0^0;sbitLED1=P0^1;sbitLED2=P0^2;sbitLED3=P0^3;//LED控制端定義uchari;voidmain(){ while(1) { if(BUTTON0==0) { delay(10);//延時(shí)10ms防抖

if(BUTTON0==0)//查詢(xún)按鍵0 { LED0=0;

i=1; } } elseif(BUTTON1==0) { delay(10); if(BUTTON1==0)//查詢(xún)按鍵1 { LED1=0; i=1; } } elseif(BUTTON2==0) { delay(10); if(BUTTON2==0)//查詢(xún)按鍵2 { LED2=0; i=1; } }

elseif(BUTTON3==0) { delay(10); if(BUTTON3==0)//查詢(xún)按鍵3 { LED3=0; i=1; } } while(i){}; }}項(xiàng)目拓展-加減按鍵。按下一次按鍵B0,數(shù)碼管顯示加1;按下一次按鍵B1,數(shù)碼管顯示減1;按下按鍵B2,數(shù)碼管清零,顯示“0”。動(dòng)手做——畫(huà)出硬件電路圖

#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明sbitBUTTON0=P1^0;sbitBUTTON1=P1^1;sbitBUTTON2=P1^2;//按鍵管腳定義sbitLE=P2^0;//74HC573鎖存使能端定義ucharm,n;voidmain(){ unsignedcharled[10]={0x3f,0x6,0x5b,0x4f,0x66, 0x6d,0x7d,0x7,0x7f,0x6f};//0~9數(shù)碼管碼表

LE=1; P0=led[0];//數(shù)碼管顯示0 LE=0; while(1) { n=m;

if(BUTTON0==0) { delay(10); if(BUTTON0==0)//查詢(xún)按鍵+ { n=n+1; if(n>=9)n=9; LE=1; P0=led[n]; LE=0; } } elseif(BUTTON1==0)//查詢(xún)按鍵- { delay(10); if(BUTTON1==0) { if(n<=0)n=0; elsen=n-1; LE=1; P0=led[n]; LE=0; } }

elseif(BUTTON2==0)//查詢(xún)按鍵歸零

{ delay(10); if(BUTTON2==0) { n=0; LE=1; P0=led[0]; LE=1; } } delay(250); m=n; }}

2.5矩陣按鍵項(xiàng)目設(shè)計(jì)項(xiàng)目

鍵盤(pán)由一組規(guī)則排列的按鍵組成,也就是說(shuō)鍵盤(pán)是一組規(guī)則排列的開(kāi)關(guān)。矩陣式鍵盤(pán)

為了減少鍵盤(pán)與單片機(jī)接口時(shí)所占用I/O線的數(shù)目,在鍵數(shù)較多時(shí),通常都將鍵盤(pán)排列成行列矩陣形式。每一水平線(行線)與垂直線(列線)的交叉處通過(guò)一個(gè)按鍵來(lái)連通。將IO口分為行線和列線,按鍵跨接在行線和列線上,列線通過(guò)上拉電阻接正電源。利用這種結(jié)構(gòu)只需N條行線和M條列線,即可組成具有N×M個(gè)按鍵的鍵盤(pán)。鍵值:按鍵閉合時(shí)的數(shù)值,鍵模:按鍵代表的數(shù)值。特點(diǎn):占用IO口線較少,但軟件將較為復(fù)雜。矩陣按鍵項(xiàng)目設(shè)計(jì)任務(wù)為:識(shí)別矩陣按鍵號(hào),并用數(shù)碼管顯示。矩陣按鍵項(xiàng)目的程序設(shè)計(jì)如下。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharvoiddelay(uchar);//延時(shí)函數(shù)聲明ucharled[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//數(shù)碼管碼表voidmain(void) { P0=led[0];//數(shù)碼管顯示0 while(1) { unsignedcharkey; P1=0x0f; if((P1&0x0f)!=0x0f) { delay(10);//延時(shí)10ms,防抖

if((P1&0x0f)!=0x0f) { P1=0xfe;//第一行

switch(P1) { case0xee://第一行第一列

key=0; break;

case0xde: key=1; break; case0xbe: key=2; break; case0x7e: key=3; break; } P1=0xfd; //第二行

switch(P1) { case0xed: //第二行第一列

key=4; break; case0xdd: key=5; break; case0xbd: key=6; break;

case0x7d: key=7; break; } P1=0xfb; //第三行

switch(P1) { case0xeb: //第三行第一列

key=8; break; case0xdb: key=9; break; case0xbb: key=10; break; case0x7b: key=11; break; } P1=0xf7; //第四行

switch(P1) {

case0xe7: //第四行第一列

key=12; break; case0xd7: key=13; break; case0xb7: key=14; break; case0x77: key=15; break; } } } P1=0x0f; while((P1&0x0f)!=0x0f); //釋放按鍵

P0=led[key]; //顯示鍵號(hào)

}}動(dòng)手做——proteus仿真2.7LCD1602顯示項(xiàng)目設(shè)計(jì)項(xiàng)目由于液晶分子不會(huì)發(fā)光,需要借助背光來(lái)輔助,而驅(qū)動(dòng)單元控制液晶分子的偏轉(zhuǎn)角度,可以使光線亮度透過(guò)程度不同,從而呈現(xiàn)出不同的黑白灰階層次,這樣我們就能看到具備層次感的畫(huà)面。光線在向外透射,將會(huì)透過(guò)彩色濾光片,這是液晶面板出“色”的組件。彩色濾光片上R.G.B(紅.綠.藍(lán))三個(gè)子元素為一組,對(duì)應(yīng)液晶上的一個(gè)像素,而彩色濾光片上子元素的不同調(diào)節(jié),就會(huì)調(diào)節(jié)出該像素上的顏色,眾多像素的不同顏色和灰階層次就組成了一副完整的具備生動(dòng)色彩的畫(huà)面。1602LCD是指顯示的內(nèi)容為16×2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫(xiě)的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。認(rèn)識(shí)液晶顯示模塊LCD1602在單片機(jī)的應(yīng)用中,常采用1602液晶也叫1602字符型液晶它是一種專(zhuān)門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊它有若干個(gè)5×7或者5×10等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。每位之間有一個(gè)點(diǎn)距的間隔每行之間也有也有間隔,起到了字符間距和行間距的作用上圖的左邊就是字符‘A’的字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“○”代表0,用“■”代表1。字符‘A’字模數(shù)據(jù)的代碼的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2=‘A’這樣的語(yǔ)法。編譯后,正好是這個(gè)字符的字符代碼。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,。字符‘A’的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2=‘A’這樣的語(yǔ)法。編譯后,正好是這個(gè)字符的字符代碼。字符液晶能接收指令,顯示相關(guān)字符,是由其背面的控制芯片控制的,液晶屏后面那個(gè)黑色的封裝。市場(chǎng)上LCD1602絕大多數(shù)是基于HD44780液晶芯片的,HD44780內(nèi)置了DDRAM、CGROM和CGRAM三個(gè)存儲(chǔ)器。CGROM(CharacterGeneratorROM)中存儲(chǔ)了一些標(biāo)準(zhǔn)的字符的字模編碼,是液晶屏出廠時(shí)固化在控制芯片中的,用戶(hù)不能改變其中的存儲(chǔ)內(nèi)容,只能讀取調(diào)用,包含有標(biāo)準(zhǔn)的ASCII碼、日文字符和希臘文字符CGRAM(CharacterGeneratorRAM)是控制芯片留給用戶(hù),用以存儲(chǔ)用戶(hù)自己設(shè)計(jì)的字模編碼DDRAM

是和屏幕顯示區(qū)域有對(duì)應(yīng)關(guān)系的一組存儲(chǔ)器,其功能有點(diǎn)中轉(zhuǎn)的性質(zhì)。從ROM和RAM的名字我們也可以知道,ROM是早已固化在LCD1602模塊中的,只能讀取;而RAM是可讀寫(xiě)的。也就是說(shuō),如果只需要在屏幕上顯示已存在于CGROM中的字符,那么只須在DDRAM中寫(xiě)入它的字符代碼就可以了;但如果要顯示CGROM中沒(méi)有的字符,比如攝氏溫標(biāo)的符號(hào),那么就只有先在CGRAM中定義,然后再在DDRAM中寫(xiě)入這個(gè)自定義字符的字符代碼即可。LCD控制器內(nèi)部有80字節(jié)的顯示數(shù)據(jù)存儲(chǔ)器DDRAM(DisplayDataRAM),用于存儲(chǔ)當(dāng)前要求顯示的字符ASCII碼,各個(gè)存儲(chǔ)單元與顯示屏上的字符位相對(duì)應(yīng),其地址和屏幕的對(duì)應(yīng)關(guān)系如圖所示,需要注意的是第1行DDRAM地址與第2行DDRAM地址并不連續(xù)。DDRAM相當(dāng)于計(jì)算機(jī)的顯存,我們?yōu)榱嗽谄聊簧巷@示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。但LCD1602的顯示屏幕只有16×2大小,因此,并不是所有寫(xiě)入DDRAM的字符代碼都能在屏幕上顯示出來(lái),只有寫(xiě)在上圖所示范圍內(nèi)的字符才可以顯示出來(lái),寫(xiě)在范圍外的字符不能顯示出來(lái)。這樣,我們?cè)诔绦蛑锌梢岳谩肮鈽?biāo)或顯示移動(dòng)指令”使字符慢慢移動(dòng)到可見(jiàn)的顯示范圍內(nèi),看到字符的移動(dòng)效果。字符型LCD模塊內(nèi)部存儲(chǔ)結(jié)構(gòu)的劃分

如果在第二行的第3列顯示字符‘E’,請(qǐng)問(wèn)應(yīng)如何操作?

首先定位顯示字符的光標(biāo)位置,根據(jù)上圖的地址映射可知,字符‘E’的顯存地址為42H;

然后得到字符‘E’的顯示碼為45H。將顯示碼45H寫(xiě)入DDRAM的42H單元,即可顯示字符‘E’。AC地址計(jì)數(shù)器是DDRAM或者CGRAM的地址指針

引腳號(hào)引腳名稱(chēng)引腳功能含義1VSS地管腳(GND)2VDD+5V電源管腳(Vcc)3VEE(VO)液晶顯示驅(qū)動(dòng)電源(0V~5V),可接電位器4RS數(shù)據(jù)和指令選擇控制端,RS=0:命令/狀態(tài);RS=1:數(shù)據(jù)5R/W讀寫(xiě)控制線,R/W=0:寫(xiě)操作;R/W=1:讀操作6E使能信號(hào):1為讀,10為執(zhí)行命令7~14DB0~DB7數(shù)據(jù)線,可以用8位連接,也可以只用高4位連接,節(jié)約單片機(jī)資源一般來(lái)說(shuō),LCD1602有16條引腳,據(jù)說(shuō)還有14條引腳的,與16腳的相比缺少了背光電源A(15腳)和地線K(16腳)。1.VSS接電源地。2.VDD接+5V。3.VEE(Vo)是液晶顯示的偏壓信號(hào),可接10K的3296精密電位器,或同樣阻值的可調(diào)電阻.4.RS是命令/數(shù)據(jù)選擇引腳,接單片機(jī)的一個(gè)I/O,當(dāng)RS為低電平時(shí),選擇命令;當(dāng)RS為高電平時(shí),選擇數(shù)據(jù)。5.RW是讀/寫(xiě)選擇引腳,接單片機(jī)的一個(gè)I/O,當(dāng)RW為低電平時(shí),向LCD1602寫(xiě)入命令或數(shù)據(jù);當(dāng)RW為高電平時(shí),從LCD1602讀取狀態(tài)或數(shù)據(jù)。如果不需要進(jìn)行讀取操作,可以直接將其接VSS。6.E,執(zhí)行命令的使能引腳,接單片機(jī)的一個(gè)I/O。7.D0—D7,并行數(shù)據(jù)輸入/輸出引腳,可接單片機(jī)的P0—P3任意的8個(gè)I/O口。如果接P0口,P0口應(yīng)該接4.7K~10K的上拉電阻。8.A背光正極,可接一個(gè)10~47歐的限流電阻到VDD。9.K背光負(fù)極,接VSS。LCD1602顯示項(xiàng)目硬件電路設(shè)計(jì)LCD1602顯示項(xiàng)目程序設(shè)計(jì)

在第一行第一列顯示字符串“AT89S51<-->”,在第二行第一列顯示字符串“LCD1602”,程序設(shè)計(jì)如下。#include<reg51.h>#defineucharunsignedchar//unsignedchar簡(jiǎn)稱(chēng)為ucharucharLCDline1[]="AT89S51<-->";//定義第一行的字符串ucharLCDline2[]="LCD1602";//定義第二行的字符串sbitLCD_RS=P3^0;//P3.0為L(zhǎng)CD_RS控制選擇sbitLCD_E=P3^2;//P3.2為L(zhǎng)CD_E使能端sbitLCD_RW=P3^1;//P3.1為L(zhǎng)CD_RW讀寫(xiě)選擇bitLCD_Busy();//忙函數(shù)聲明voidLCD_write_command(uchar);//寫(xiě)命令函數(shù)聲明voidLCD_write_data(uchar);//寫(xiě)數(shù)據(jù)函數(shù)聲明voidLCD_init();//初始化函數(shù)聲明voidLCD_1_line(ucharpos1,uchar*LCDline1);//第一行顯示函數(shù)聲明voidLCD_2_line(ucharpos2,uchar*LCDline2);//第二行顯示函數(shù)聲明voiddelay(uchar);//延時(shí)函數(shù)聲明/**************主程序**************/voidmain(void){ LCD_init(); LCD_1_line(0x00,LCDline1);//第一行顯示

LCD_2_line(0x00,LCDline2);//第二行顯示

while(1);}/*************忙檢測(cè)函數(shù)**************/bitLCD_Busy(){ bitLCD_Busy; LCD_RS=0; LCD_RW=1; LCD_E=1; delay(1); LCD_Busy=(bit)(P0&0x80);//取LCD數(shù)據(jù)首位,即忙信號(hào)位

LCD_E=0; returnLCD_Busy;}/*************寫(xiě)命令函數(shù)**************/voidLCD_write_command(ucharcmd){ while(LCD_Busy());//等待顯示器忙檢測(cè)完畢

delay(1); LCD_RS=0; LCD_RW=0; P0=cmd; delay(1); LCD_E=1; delay(1); LCD_E=0;}/**************寫(xiě)數(shù)據(jù)函數(shù)**************/voidLCD_write_data(uchardat){ while(LCD_Busy());//等待顯示器忙檢測(cè)完畢

delay(1); LCD_RS=1; LCD_RW=0; P0=dat; delay(1); LCD_E=1; delay(1); LCD_E=0;}/**************初始化函數(shù)**************/voidLCD_init(){ LCD_write_command(0x38);//16×2,5×7點(diǎn)陣,8位

delay(1); LCD_write_command(0x01);//清屏

delay(1); LCD_write_command(0x06);//光標(biāo)右移,字符不移

delay(1); LCD_write_command(0x0f);//顯示開(kāi),有光標(biāo),光標(biāo)閃爍

delay(1);}/**************顯示第一行字符**************/voidLCD_1_line(ucharpos1,uchar*LCDline1){ uchari=0; LCD_write_command(0x80+pos1);//在第一行pos1位顯示

while(LCDline1[i]!='\0')//顯示首行字符串

{ LCD_write_data(LCDline1[i]); i++; delay(1);}}/**************顯示第二行字符**************/voidLCD_2_line(ucharpos2,uchar*LCDline2){ uchari=0; LCD_write_command(0x80+0x40+pos2);//在第二行pos2位顯示

while(LCDline2[i]!='\0')//顯示第二行字符串

{ LCD_write_data(LCDline2[i]); i++; delay(1); }}

序號(hào)指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開(kāi)/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計(jì)數(shù)器地址10寫(xiě)數(shù)到CGRAM或DDRAM)10要寫(xiě)的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容字符型LCD模塊控制命令字的使用

功能:①清除液晶顯示器,即將DDRAM的內(nèi)容全部填入"空白"的ASCII碼20H;②光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;③將地址計(jì)數(shù)器(AC)的值設(shè)為0。

功能:AC=0,光標(biāo)、畫(huà)面回HOME位。①把光標(biāo)撤回到顯示器的左上方;②把地址計(jì)數(shù)器(AC)的值設(shè)置為0;③保持DDRAM的內(nèi)容不變。

設(shè)定每次定入一位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫(xiě)入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示:

I/D:0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移;1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移。

S:0=寫(xiě)入新數(shù)據(jù)后顯示屏不移動(dòng),1=寫(xiě)入新數(shù)據(jù)后顯示屏整體平移1個(gè)字。

功能:設(shè)置顯示、光標(biāo)及閃爍開(kāi)、關(guān)。參數(shù)設(shè)定的情況如下:D:0=顯示功能關(guān);1=顯示功能開(kāi)。C:0=無(wú)光標(biāo);1=有光標(biāo)。B:0=光標(biāo)閃爍;1=光標(biāo)不閃爍。

功能:光標(biāo)、畫(huà)面移動(dòng),不影響DDRAM。使光標(biāo)移位或使整個(gè)顯示屏幕移位。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);

1

1

顯示器上字符全部右移一格,但光標(biāo)不動(dòng)

功能:工作方式設(shè)置(初始化指令)。

設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:

位名

設(shè)置:

DL

0=數(shù)據(jù)總線為4位;1=數(shù)據(jù)總線為8位。

N

0=顯示1行;

1=顯示2行。

F

0=5×7點(diǎn)陣/每字符

;

1=5×10點(diǎn)陣/每字符。

功能:設(shè)置CGRAM地址。A5~A0=0~3FH

設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址

這個(gè)指令用于設(shè)置DDRAM地址0x00H~0x27H,0x40H~0x67H,共80個(gè)。在對(duì)DDRAM進(jìn)行讀寫(xiě)之前,首先要設(shè)置DDRAM地址,然后才能進(jìn)行讀寫(xiě)。前面我們說(shuō)過(guò),DDRAM就是LCD1602的顯示存儲(chǔ)器。我們要在它上面進(jìn)行顯示,就要把要顯示的字符寫(xiě)入DDRAM。

讀取忙信號(hào)

如果BF=1忙碌,無(wú)法接收數(shù)據(jù)或指令

BF=0可以接收數(shù)據(jù)、指令讀取地址計(jì)數(shù)器AC的內(nèi)容這個(gè)指令用來(lái)讀取LCD1602狀態(tài)。對(duì)于單片機(jī)來(lái)說(shuō),LCD1602屬于慢速設(shè)備。當(dāng)單片機(jī)向其發(fā)送一個(gè)指令后,它將去執(zhí)行這個(gè)指令。這時(shí)如果單片機(jī)再次發(fā)送下一條指令,由于LCD1602速度較慢,前一條指令還未執(zhí)行完畢,它將不接受這新的指令,導(dǎo)致新的指令丟失。因此這條讀忙指令可以用來(lái)判斷LCD1602是否忙,能否接收單片機(jī)發(fā)來(lái)的指令。

這條指令還有一個(gè)功能:即可以得到地址記數(shù)器AC的值(addresscounter)。LCD1602維護(hù)了一個(gè)地址計(jì)數(shù)器AC,用來(lái)記錄下一次讀寫(xiě)CGRAM或DDRAM的位置。

向DDRAM或CGRAM寫(xiě)入數(shù)據(jù)寫(xiě)指令

輸入:RS=L,RW=L,E=下降沿脈沖,DB0~DB7=指令碼

寫(xiě)數(shù)據(jù)

輸入:RS=H,RW=L,E=下降沿脈沖,DB0~DB7=數(shù)據(jù)從DDRAM或者CGRAM讀數(shù)據(jù)讀狀態(tài)

輸入:RS=L,RW=H,E=H輸出:DB0~DB7=狀態(tài)字讀數(shù)據(jù)

輸入:RS=H,RW=H,E=H輸出:DB0~DB7=數(shù)據(jù)單片機(jī)對(duì)LCD模塊有四種基本操作:寫(xiě)命令、寫(xiě)數(shù)據(jù)、讀狀態(tài)和讀數(shù)據(jù),由LCD162模塊三個(gè)控制引腳RS、R/和E的不同組合狀態(tài)確定,如表所示,結(jié)合讀操作和寫(xiě)操作時(shí)序,編制軟件輸出控制引腳脈沖電平即可產(chǎn)生LCD讀寫(xiě)訪問(wèn)時(shí)序。LCD模塊控制端LCD基本操作RSR/WE00下降沿寫(xiě)命令操作:用于初始化、清屏、光標(biāo)定位等。01高電平讀狀態(tài)操作:讀忙標(biāo)志,當(dāng)忙標(biāo)志為“1”時(shí),表明LCD正在進(jìn)行內(nèi)部操作,此時(shí)不能進(jìn)行其它三類(lèi)操作;當(dāng)忙標(biāo)志為“0”時(shí),表明LCD內(nèi)部操作已經(jīng)結(jié)束,可以進(jìn)行其它三類(lèi)操作,一般采用查詢(xún)方式。10下降沿寫(xiě)數(shù)據(jù)操作:寫(xiě)入要顯示的內(nèi)容。11高電平讀數(shù)據(jù)操作:將顯示存儲(chǔ)區(qū)中的數(shù)據(jù)反讀出來(lái),一般比較少用。MCU對(duì)字符型LCD模塊的基本接口操作LCD1602行列顯示地址例如,第二行第一個(gè)字符的地址是40H,那么是否直接寫(xiě)入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)楦鶕?jù)指令8,寫(xiě)入顯示地址時(shí)要求最高位D7恒定為高電平1,所以實(shí)際寫(xiě)入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H),所以,在顯示子程序中,第二行pos2位顯示的函數(shù)語(yǔ)句中位置量為0x80+0x40+pos2,主程序語(yǔ)句為L(zhǎng)CD_write_command(0x80+0x40+pos2);第一行的pos1位顯示子程序語(yǔ)句中的位置量為0x80+pos1,子程序語(yǔ)句為L(zhǎng)CD_write_command(0x80+pos1)。動(dòng)手做——proteus仿真項(xiàng)目拓展-將整屏字符從右向左動(dòng)態(tài)移動(dòng)#include<reg51.h>#defineucharunsignedcharucharLCDline1[]="AT89S51<-->";//第一行字符串ucharLCDline2[]="LCD1602";//第二行字符串sbitLCD_RS=P3^0;//P3.0為L(zhǎng)CD_RS,寄存器選擇sbitLCD_E=P3^2;//P3.2為L(zhǎng)CD_E,使能端sbitLCD_RW=P3^1;//P3.1為L(zhǎng)CD_RW,讀寫(xiě)選擇bitLCD_Busy();//忙函數(shù)聲明voidLCD_write_command(uchar);//寫(xiě)命令函數(shù)聲明voidLCD_write_data(uchar);//寫(xiě)數(shù)據(jù)函數(shù)聲明voidLCD_init();//初始化函數(shù)聲明voiddelay(uchar);/**************主程序**************/voidmain(void){ unsignedchari; LCD_init(); LCD_write_command(0x80+0x10);//第一行第17個(gè)字符位起

while(LCDline1[i]!='\0') { LCD_write_data(LCDline1[i]);

i++; delay(1); } LCD_write_command(0x80+0x50);//第二行第17個(gè)字符位起

i=0; while(LCDline2[i]!='\0') { LCD_write_data(LCDline2[i]); i++; delay(1); } for(i=0;i<16;i++) { LCD_write_command(0x1c);//向左移一個(gè)字符位

delay(255); } while(1);}/*************忙檢測(cè)函數(shù)**************/bitLCD_Busy(){ bitLCD_Busy; LCD_RS=0;

LCD_RW=1; LCD_E=1; delay(1); LCD_Busy=(bit)(P0&0x80);//取LCD數(shù)據(jù)首位,即忙信號(hào)位

LCD_E=0; returnLCD_Busy; }/*************寫(xiě)命令函數(shù)**************/voidLCD_write_command(ucharcmd){ while(LCD_Busy());//等待顯示器忙檢測(cè)完畢

delay(1); LCD_RS=0; LCD_RW=0; P0=cmd; delay(1); LCD_E=1; delay(1); LCD_E=0;}/**************寫(xiě)數(shù)據(jù)函數(shù)**************/voidLCD_write_data(uchardat){ while(LCD_Busy());//等待顯示器忙檢測(cè)完畢

delay(1); LCD_RS=1; LCD_RW=0; P0=dat; delay(1); LCD_E=1; delay(1); LCD_E=0;}/**************初始化函數(shù)**************/voidLCD_init(){ LCD_write_command(0x38);//16×2行,5×7點(diǎn)陣,8位

delay(1); LCD_write_command(0x01);//清屏

delay(1); LCD_write_command(0x06);//光標(biāo)右移,字符不移

delay(1); LCD_write_command(0x0f);//顯示開(kāi),有光標(biāo),光標(biāo)閃爍

delay(1);}/****************延時(shí)函數(shù)t(ms)*************/voiddelay(uchart){ ucharj,k; for(j=0;j<t;j++) { for(k=0;k<255;k++){} }} 項(xiàng)目拓展-自定義字符#include<reg51.h>#defineucharunsignedcharsbitLCD_RS=P3^0;//P3.0為L(zhǎng)CD_RS,選寄存器sbitLCD_E=P3^2;//P3.2為L(zhǎng)CD_E,使能端sbitLCD_RW=P3^1;//P3.1為L(zhǎng)CD_RW,讀寫(xiě)選bitLCD_Busy();//忙函數(shù)聲明voidLCD_write_command(uchar);//寫(xiě)命令函數(shù)聲明voidLCD_write_data(uchar);//寫(xiě)數(shù)據(jù)函數(shù)聲明voidLCD_init();//初始化函數(shù)聲明voidLCD_zimo();//字模函數(shù)聲明voiddelay(uchar);/**************主程序**************/voidmain(void){ LCD_init(); LCD_zimo(); LCD_write_command(0x80+0x06);//第一行第7列位置

LCD_write_data(0x00);//顯示存放0x00空間字模

while(1);}/*************忙檢測(cè)函數(shù)**************/bitLCD_Busy(){ bitLCD_Busy; LCD_RS=0; LCD_RW=1; LCD_E=1; delay(1); LCD_Busy=(bit)(P0&0x80);//取LCD數(shù)據(jù)首位,忙信號(hào)位

LCD_E=0; returnLCD_Busy; }/*************寫(xiě)命令函數(shù)***********

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論