第七章顯示與鍵盤_第1頁
第七章顯示與鍵盤_第2頁
第七章顯示與鍵盤_第3頁
第七章顯示與鍵盤_第4頁
第七章顯示與鍵盤_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本章內(nèi)容單片機與LED數(shù)碼管接口LED大屏幕顯示器和接口字符LCD液晶顯示和接口單片機與鍵盤接口第7章顯示和鍵盤接口技術(shù)單片機與LED數(shù)碼管接口LED數(shù)碼管結(jié)構(gòu)及原理

單片機與LED數(shù)碼管接口LED數(shù)碼管結(jié)構(gòu)及原理

為使LED顯示不同的符號或數(shù)字,要為LED提供段碼(或稱字型碼)。提供給LED顯示器的段碼(字型碼)正好是一個字節(jié)(8段)。各段與字節(jié)中各位對應(yīng)關(guān)系如下:顯示字符共陰極段碼共陽極段碼顯示字符共陰極段碼共陽極段碼03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“滅”00HFFHb7CH83H………表7-1LED段碼(8段)單片機與LED數(shù)碼管接口LED靜態(tài)顯示

靜態(tài)顯示是指數(shù)碼管顯示某一字符時,相應(yīng)的發(fā)光二極管恒定導(dǎo)通或恒定截止。這種顯示方式的各位數(shù)碼管的公共端恒定接地(共陰極)或+5V(共陽極)。每個數(shù)碼管的八個段控制引腳分別與一個八位I/O端口相連。只要I/O端口有顯示字型碼輸出,數(shù)碼管就顯示給定字符,并保持不變,直到I/O口輸出新的段碼。

單片機與LED數(shù)碼管接口LED靜態(tài)顯示單片機與LED數(shù)碼管接口LED動態(tài)顯示

LED顯示器接口從LED顯示器的原理可知,為了顯示字母與數(shù)字,必須最終轉(zhuǎn)換成相應(yīng)的段選碼。這種轉(zhuǎn)換可以通過硬件譯碼器或軟件進行譯碼。硬件譯碼器LED顯示器接口軟件譯碼LED顯示器接口圖利用硬件譯碼器的七段LED接口電路圖

通過8155擴展I/O口控制的8位LED動態(tài)顯示接口圖

動態(tài)顯示子程序流程圖例:單只數(shù)碼管循環(huán)顯示0~9

#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};voidDelayMS(uintx){uchart;while(x--)for(t=0;t<120;t++);}voidmain(){uchari=0;P0=0x00;while(1){P0=~DSY_CODE[i];i=(i+1)%10;DelayMS(300);}}例:8只數(shù)碼管從左到右依次滾動顯示0~7,程序通過每次僅循環(huán)選通一只數(shù)碼管#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延時voidDelayMS(uintx){uchart;while(x--)for(t=0;t<120;t++);}//主程序voidmain(){uchari,wei=0x80;while(1){for(i=0;i<8;i++){P0=0xff;P0=DSY_CODE[i];//發(fā)送段碼wei=_crol_(wei,1);P2=wei;DelayMS(2);//發(fā)送位碼}}

}

LED大屏幕顯示器和接口

LED大屏幕顯示器結(jié)構(gòu)及原理LED點陣顯示器是把很多LED發(fā)光二極管按矩陣方式排列在一起,通過對每個LED進行發(fā)光控制,完成各種字符或圖形的顯示。最常見的LED點陣顯示模塊有5×7(5列7行),7×9(7列9行),8×8(8列8行)結(jié)構(gòu)。LED點陣由一個一個的點(LED發(fā)光二極管)組成,總點數(shù)為行數(shù)與列數(shù)之積,引腳數(shù)為行數(shù)與列數(shù)之和。LED大屏幕顯示器和接口

LED大屏幕顯示器結(jié)構(gòu)及原理LED大屏幕顯示器和接口

LED大屏幕顯示器結(jié)構(gòu)及原理“大”字顯示字型碼示意圖LED大屏幕顯示器和接口

LED大屏幕顯示器結(jié)構(gòu)及原理顯示字符“大”的過程如下:先給第一行送高電平(行高電平有效),同時給8列送11110111(列低電平有效);然后給第二行送高電平,同時給8列送11110111,……最后給第八行送高電平,同時給8列送11111111。每行點亮延時時間為1ms,第八行結(jié)束后再從第一行開始循環(huán)顯示。利用視覺駐留現(xiàn)象,人們看到的就是一個穩(wěn)定的圖形。LED大屏幕顯示器和接口

LED大屏幕顯示器接口LED大屏幕顯示器和接口

LED大屏幕顯示器擴展接口字符LCD液晶顯示和接口

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模塊Vss:+5V電源管腳(Vcc)VDD:

地管腳(GND)Vo:

液晶顯示驅(qū)動電源(0V~5V)字符LCD液晶顯示和接口

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模塊DB0~DB7:數(shù)據(jù)線,可以用8位連接,也可以只用高4位連接,節(jié)約單片機資源,本實驗中采用的是八位連接方法。字符LCD液晶顯示和接口

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模塊A:背光控制正電源K:背光控制地字符LCD液晶顯示和接口

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模塊單片機與LCD模塊之間有四種基本操作:

寫命令 讀狀態(tài) 寫顯示數(shù)據(jù) 讀顯示數(shù)據(jù)字符LCD液晶顯示和接口

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模塊RSR/W操作00寫命令操作(初始化、光標定位等)01讀狀態(tài)操作(讀忙標志)10寫數(shù)據(jù)操作(要顯示的內(nèi)容)11讀數(shù)據(jù)操作(可以把顯示存儲區(qū)中的數(shù)據(jù)反讀出來)字符LCD液晶顯示和接口

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模塊RS:數(shù)據(jù)和指令選擇控制端,RS=0:命令/狀態(tài);RS=1:數(shù)據(jù)R/W:讀寫控制線,R/W=0:寫操作;R/W=1:讀操作E:數(shù)據(jù)讀寫操作控制位,E線向LCD模塊發(fā)送一個脈沖,LCD模塊與單片機之間將進行一次數(shù)據(jù)交換字符LCD液晶顯示和接口

讀狀態(tài)操作

狀態(tài)字的最高位的BF為忙標志位,1表示LCD正在忙,0表示不忙。通過判斷最高位BF的0、1狀態(tài),就可以知道LCD當前是否處于忙狀態(tài),如果LCD一直處于忙狀態(tài),則繼續(xù)查詢等待,否則進行下面的操作。查詢忙狀態(tài)程序段如下:do{i=lcd_r_start();//調(diào)用讀狀態(tài)函數(shù),讀取LCD狀態(tài)字

i&=0x80;//采用與操作屏蔽低7位

delay(2); //延時

}while(i!=0);//LCD忙,繼續(xù)查詢,否則退出循環(huán)字符LCD液晶顯示和接口

寫命令操作LCD上電時,都必須按照一定的時序?qū)CD進行初始化操作,主要任務(wù)是設(shè)置LCD的工作方式、顯示狀態(tài)、清屏、輸入方式、光標位置等。

字符LCD液晶顯示和接口

寫命令操作voidlcd_w_cmd(unsignedcharcom){unsignedchari;do{//查LCD忙操作

i=lcd_r_start(); //調(diào)用讀狀態(tài)字函數(shù)

i=i&0x80;//與操作屏蔽掉低7位

delay(2);}while(i!=0); //LCD忙,繼續(xù)查詢,否則退出循環(huán)

RW=0;delay1();RS=0; delay1(); //RW=1,RS=0,寫LCD命令字E=1; delay1(); //E端時序

P1=com;delay1(); //將com中的命令字寫入LCD數(shù)據(jù)口

E=0;delay1();RW=1;delay(255);}字符LCD液晶顯示和接口

寫命令操作編號指令名稱控制信號命令字D7D6D5D4D3D2D1D01清屏00000000012歸home位000000001×3輸入方式設(shè)置00000001I/DS4顯示狀態(tài)設(shè)置0000001DCB5光標畫面滾動000001S/CR/L××6工作方式設(shè)置00001DLNF××7CGRAM地址設(shè)置0001A5A4A3A2A1A08DDRAM地址設(shè)置001A6A5A4A3A2A1A09讀BF和AC01BFAC6AC5AC4AC3AC2AC1AC0字符LCD液晶顯示和接口

初始化操作LCD初始工作方式設(shè)置顯示狀態(tài)設(shè)置清屏返回輸入方式設(shè)置001DLNF**—設(shè)置單片機與LCD接口數(shù)據(jù)位數(shù)DL、顯示行數(shù)N、字型FDL=1:8位、DL=0:4位;N=1:2行、N=0:1行F=1:5×10、F=0:5×7例:00111000B(38H)設(shè)置數(shù)據(jù)位數(shù)8位,2行顯示,5×7點陣字符00001DCB—設(shè)整體顯示開關(guān)D、光標開關(guān)C、光標位的字符閃耀BD=1:開顯示;C=0:不顯示光標;B=0:光標位字符不閃爍例:00001100B(0CH)打開LCD顯示,光標不顯示,光標位字符不閃爍清屏命令字01H,將光標設(shè)置為第一行第一列000001I/DS—設(shè)光標移動方向并確定整體顯示是否移動I/D=1:增量方式右移、I/D=0:減量方式左移S=1:移位、S=0:不移位例:00000110B(06H)設(shè)置光標增量方式右移,顯示字符不移動字符LCD液晶顯示和接口

寫數(shù)據(jù)操作

光標位置與相應(yīng)命令字

列行123456789101112131415161808182838485868788898A8B8C8D8E8F2C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF注:表中命令字以十六進制形式給出,該命令字就是與LCD顯示位置相對應(yīng)的DDRAM地址。字符LCD液晶顯示和接口

voidlcd_w_dat(unsignedchardat){unsignedchari;do{ //查忙操作

i=lcd_r_start(); //調(diào)用讀狀態(tài)字函數(shù)

i=i&0x80; //與操作屏蔽掉低7位

delay(2);}while(i!=0); //LCD忙,繼續(xù)查詢,否則退出循環(huán)

RW=0;delay1();RS=1; //RW=1,RS=0,寫LCD命令字

delay1();E=1; //E端時序

delay1();P1=dat; //將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口

delay1();E=0;delay1();RW=1;delay(255);}單片機與鍵盤接口單片機與鍵盤接口按鍵按照結(jié)構(gòu)原理可分為兩類,一類是觸點式開關(guān)按鍵,如機械式開關(guān)、導(dǎo)電橡膠式開關(guān)等;另一類是無觸點開關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。前者造價低,后者壽命長。按鍵按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類。這兩類鍵盤的主要區(qū)別是識別鍵符及給出相應(yīng)鍵碼的方法。編碼鍵盤主要是用硬件來實現(xiàn)對按鍵的識別,硬件結(jié)構(gòu)復(fù)雜;非編碼鍵盤主要是由軟件來實現(xiàn)按鍵的定義與識別,硬件結(jié)構(gòu)簡單,軟件編程量大。這里將要介紹的獨立式按鍵和矩陣式鍵盤都是非編碼鍵盤。單片機與鍵盤接口機械式按鍵在按下或釋放時,由于機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然后其觸點才穩(wěn)定下來,抖動時間一般為510ms,在觸點抖動期間檢測按鍵的通與斷狀態(tài),可能導(dǎo)致判斷出錯。單片機與鍵盤接口按鍵的去抖

(a)檢測按鍵(b)釋放按鍵按鍵去抖流程圖獨立式按鍵

獨立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但每個按鍵必須占用一根I/O口線,因此,在按鍵較多時,I/O口線浪費較大,不宜采用。獨立式鍵盤與單片機接口

鍵閉合嗎?置P1口為輸入方式開始延時10ms消除抖動有鍵閉合嗎?是K1鍵閉合嗎?20H單元加1YYYYYYNNNNNN圖

獨立鍵盤程序框圖流程圖是K2鍵閉合嗎?是K3鍵閉合嗎?是K4鍵閉合嗎?20H單元減121H單元清021H單元置FF程序清單:

ORG 0030H KB:MOV P1,#0FFH ;置P1口為輸入口

MOV A,P1 ;讀鍵狀態(tài)

CPL A ANL A,#0FH ;屏蔽高4位

JZ KB ;無鍵閉合則返回

ACALL D10MS ;延時去抖動

MOV A,P1 ;再讀鍵狀態(tài)

CPL A ANL A,#0FH JZ KB ;無鍵閉合則返回

CJNE A,#01H,KB01 INC 20H ;K1鍵閉合,20H單元加1 SJMP KB

KB01:CJNEA,#02H,KB02 DEC 20H ;K2鍵閉合,20單元減1 SJMPKB KB02:CJNEA,#04H,KB03 MOV 21H,#00H ;K3鍵閉合,21H單元清0 SJMPKB KB03:CJNEA,#08H,KB MOV 21H,#0FFH ;K4鍵閉合,21H單元置FF SJMPKB ;若有兩鍵以上閉合則返回

END8031INT0+5VI/O8031圖

獨立式按鍵電路(a)(b)查詢方式I/O中斷方式+5VINT1例:開關(guān)S1和S2分別控制LED1和LED2。#include<reg51.h>sbitS1=P1^0;sbitS2=P1^1;sbitLED1=P0^0;sbitLED2=P0^1;//主程序voidmain(){while(1){LED1=S1;LED2=S2;}}單片機與鍵盤接口矩陣式按鍵

通常,矩陣式鍵盤的列線由單片機輸出口控制,行線連接單片機的輸入口。矩陣式按鍵

鍵盤編程掃描法識別按鍵一般應(yīng)包括以下內(nèi)容:(1)判別有無鍵按下。(2)鍵盤掃描取得閉合鍵的行、列號。(3)用計算法或查表法得到鍵值。(4)判斷閉合鍵是否釋放,如沒釋放則繼續(xù)等待。(5)將閉合鍵的鍵值保存,同時轉(zhuǎn)去執(zhí)行該閉合鍵的功能。例:數(shù)碼管顯示4X4矩陣鍵盤按鍵號#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint//段碼ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};sbitBEEP=P3^7;//上次按鍵和當前按鍵的序號,該矩陣中序號范圍0~15,16表示無按鍵ucharPre_KeyNo=16,KeyNo=16;//延時voidDelayMS(uintx){uchari;while(x--)for(i=0;i<120;i++);}//矩陣鍵盤掃描voidKeys_Scan(){ucharTmp;P1=0x0f;//高4位置0,放入4行DelayMS(1);Tmp=P1^0x0f;//按鍵后0f變成0000XXXX,X中一個為0,3個仍為1,通過異或把3個1變?yōu)?,唯一的0變?yōu)?switch(Tmp)//判斷按鍵發(fā)生于0~3列的哪一列{case1:KeyNo=0;break;case2:KeyNo=1;break;case4:KeyNo=2;break;case8:KeyNo=3;break;default:KeyNo=16;//無鍵按下}P1=0xf0;//低4位置0,放入4列DelayMS(1);Tmp=P1>>4^0x0f;//按鍵后f0變成XXXX0000,X中有1個為0,三個仍為1;高4位轉(zhuǎn)移到低4位并異或得到改變的值switch(Tmp)//對0~3行分別附加起始值0,4,8,12{case1:KeyNo+=0;break;case2:KeyNo+=4;break;case4:KeyNo+=8;break;case8:KeyNo+=12;}}//蜂鳴器voidBeep(){uchari;for(i=0;i<100;i++){DelayMS(1);BEEP=~BEEP;}BEEP=0;}//主程序voidma

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論