試驗一鍵盤顯示試驗_第1頁
試驗一鍵盤顯示試驗_第2頁
試驗一鍵盤顯示試驗_第3頁
試驗一鍵盤顯示試驗_第4頁
試驗一鍵盤顯示試驗_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗一鍵盤顯示實驗一、實驗目的(1)掌握MCS51系統(tǒng)中鍵盤顯示接I I的方法;(2)掌握中斷處理程序的編程方法。二、硬件原理圖2.1數(shù)碼管顯示原理介紹實驗箱上有6個共陰極數(shù)碼管,圖1是其外部特性圖,圖2是其內(nèi)部原理圖,由圖2可 知,每個數(shù)碼管由8個發(fā)光二極管組成,其中aDP稱為數(shù)碼管的段控信號,K是8個發(fā)光 二極管的公共端,稱為位控信號。所以為了讓數(shù)碼管顯示一個數(shù)字,必須將位控信號接低電 平,段控信號接高電平。例如:如要顯示數(shù)字T”,b端和c端應該接高電平,其余各端接 低電平。8423dp圖1八段數(shù)碼管外部特性圖abcdefgDP3F 5FlF、F、r iF 1FK圖2八段數(shù)碼管內(nèi)部原理圖f

2、rQ%K<$?sy>Q l¥taJAJOQRGPQy【HE “ wJ gT運卩* :二二0W44-*»44UMTu5i?I5 i r8位共陰數(shù)砂管4TO5DO15/2-2鍵盤掃描原理介紹鍵盤掃描原理如圖3所示,“K1苗KT是按鍵,按鍵的兩端都接10k的上拉電阻。當行掃描端為低電平,同時“K1”鍵被按下時,“K1”的列讀取端就會出現(xiàn)低電平,由處理器對行掃描信號和列讀取信號進行綜合判斷后,得出鍵被按下的結(jié)論。2.3實驗連線圖實驗接線如下圖所示:杜邦線連接(用杜邦線連接單片機K)和V模塊接口)單片機1() 口模塊接口杜邦線數(shù)量功能P0J38共陽數(shù)碼管數(shù)據(jù)端P2.2 (

3、段鎖存)J2 (B)I段鎖存P2.3 (位鎖存)J2 (A)1位鎖存單片機IO 口模塊接口杜邦線數(shù)量(根)P1或者P3J248P3.2J25 (僅中斷掃描用到1單片機通過8279芯片控制數(shù)碼管,同時以Pl I I掃描4*4鍵盤鍵值。ALE/w o、E:-ULI /vmATM9S<2n w : B 4 <ID3O-1B37SV丄CLKAHLb 欠"ZMJ X>7/TO 皿2欠toSRUSMSRL:mX27Q.V/F71 j:W6rJJ-aXfi7、嶺a>;24u'wv -JWV-1 XI 11 1754527<4527<4S274LS1 WL

4、SCM三、軟件流程圖3.1數(shù)碼管顯示實驗流程圖Y3.2掃描鍵盤顯示實驗流程圖四、實驗步驟參照實驗指導書連接杜邦線編寫程序,并用KeilC軟件調(diào)試程序程序編譯無錯后使用S51ISP下載軟件將程序卞載到單片機中觀察實驗現(xiàn)彖,如呆實驗現(xiàn)彖與預期不符則可以使用KeilC的軟件仿真調(diào)試功能,通過軟件仿真使程序單步運行,從中找到編程錯誤向?qū)嶒炛笇Ю蠋熤v解程序原理,整理儀器離開實驗室五、軟件源碼5.1數(shù)碼管顯示 I*5.1.1C語言#include <ieg52.h> /89C52寄存器定義頭文件define DataPort POsbit LATCH1=P2A2;/定義鎖存使能端I I段鎖存s

5、bit LATCH2=P2A3;/位鎖存unsigned chartable 16=0x3f,0x06,0x5b,0x4f0x66.0x6d.0x7d,0x07.0x7f,0x6f.0x77.0x7c.0x39,0x5e, 0x79,0x71;/段碼表,從0到9,從A到Funsigned char code ID 1 =1J ,0,3,1,0,5,2;unsigned char code ID2= 1,1,0,8,1,1,6,2;/學 號unsigned char code Iocationn=0xfe.0xfd,0xfb,0xf7.0xef.0xdf0xbf,0x7f;分別對應相應的數(shù)碼管點

6、亮,即位碼void Delay(unsigned mt f); /延時函數(shù)聲明主函數(shù)*/main()unsigned char i=0:iiit a=0;wlule(l)for(a=0;a< 1000;a+)P0=locationi; / 取位碼LATCH2=1;/位鎖存LATCH2=0;PO=tableLDli;/取顯示數(shù)據(jù),段碼LATCH1=1;/段鎖存LATCHl=0;Delay(200); /掃描間隙延時,時間太長會閃爍,太短會造成重影i+;if(8=i)檢測8位掃描完全結(jié)束?如打描完成則從第一個開始再次打描8位1=0;/ID1顯示結(jié)束for(a=0;a< 1000;a+)

7、PO=locationi; /取位碼LATCH2=1;/位鎖存LATCH2=0;P0=tableED2i;/取顯示數(shù)據(jù),段碼LATCH1=1; 段鎖存LATCH1=O;Delay(200);打描間隙延時,時間太長會閃爍,太短會造成重影i+;if(8=i) 檢測8位掃描完全結(jié)束?如打描完成則從第一個開始再次掃描8位 1=0;/ID2顯示結(jié)束延時函數(shù),含有輸入?yún)?shù)unsigned mt t,無返回值 unsigned mt是定義無符號整形變量,其值的范闈是0-65535*/void Delay(unsigned mt t)vliile(t);5.1.2匯編;態(tài)打描數(shù)碼顯示程序;P0 口接J3,數(shù)據(jù)

8、端口;P2.2接J2E端子,表示段碼鎖存;P2.3接J2A端子,標志位碼鎖存ORG 00HMOV 20H.#06H;1MOV21H.#06H;1MOV 22H#3FH;0MOV 23H#4FH;3MOV 24H.#06H;1MOV 25H#3FH;0MOV 26H# 6D H ;5MOV 27H.# 5B H ;2 學號LATCH 1 BIT P2.2;定義段鎖存與位鎖存;掃描子程序LATCH2 BIT P2.3STARTCALL SCANJNIP STARTSCAN:MOVA.#OFEHMOV R0*20HSETB CMOVR2,#08HLOOP:MOV P0,ASETB LATCH2CLR

9、 LATCH2MOV P0,R0SETB LATCH 1CLR LATCH 1INC ROCALL DELAYRLCADJNZ R2XOOPMOV R2.#08HRETDELAY:MOV R3,#l ;掃描延時D1:MOVR4,#2D2:MOVR5,#248DJNZ R5,SDJNZ R4,D2DJNZ R3Q1RETEND5. 2掃描鍵盤顯示#iiiclude<reg52.h> 包含頭文件define DataPort PO /定義數(shù)據(jù)端I丨程序中遇到DataPoit則用P0替換 #define KevPoit Pl/定義按鍵端I I程序中遇到KeyPort則用Pl替換 sbit

10、 LATCH1=P2A2;/定義鎖存使能端I I段鎖存 sbit LATCH2=P2A3;/位鎖存unsigned char code dofly_Duaii2vIa=0x3t0x06.0x5b.0x4f.0x66,0x6d.0x7d,0x07,0x7f0x6f 0x77,0x7c、0x39、0x5e,0x79.0x71;/ 顯示 段碼值 09 aFunsigned char code dofly_WeiMa=0xfe,0xfci.0xfb.0xf7.0xef0xdf0xbf0x7f;/分別對應相應 的數(shù)碼管點亮,即位碼unsigned char TempData8; 存儲顯示值的全局變量vo

11、id DelayUs2x(unsigned char t)y/us 級延時函數(shù)聲明void DelayMs(unsigned char t); /ms 級延時void Display(unsigned char FustBit.unsigned char Num);/數(shù)碼管顯示函數(shù)unsigned char KeyScan(void)/鍵盤打描unsigned char KeyPio(void);/按鍵值處理函數(shù),返回打鍵值void Init_TiinerO(void);/定時器初始化/*主函數(shù)*/void main (void)unsigned char numjj;unsigned cha

12、r temp8;Iiut_TunerO();wliile (1)主循壞num=KevPro(); if(num!=Oxff)if(i<8)tempi=dofly_DuanManum;if(num=14)tempi=dofly_DuaiiManum;1+;tempi=doflv_DuanMa6;for(j=Oj<=ij+)TenipD ata7-i-Fj =temp j ;i+;if(i=9)/多出一個按鍵輸入為了清屏原本應該為8 1=0;1=0;forU=0j<8j+)/ 清屏TempData j =dofly_DuanMa 0; _Display(0.8); 顯示全部8位主

13、循壞中添加其他需要一直工作的程序11S延時函數(shù),含有輸入?yún)?shù)unsigned chai t,無返回值 unsigned char是定義無符號字符變量,其值的范圍是 0-255這里使用晶振12M,精確延時請使用匯編,人致延時 長度如下T=tx2+5 uS*/void DelayUs2x(unsigned char t)wliile(t);mS延時函數(shù),含有輸入?yún)?shù)unsigned char t,無返回值 unsigned char是定義無符號字符變量,其值的范閑是 0-255這里使用晶振12M,精確延時請使用匯編*/void DelayMs(unsigned char t)wliile(t)人致

14、延時ImSDelayUs2x(245);DelayUs2x(245);顯示函數(shù),用于動態(tài)掃描數(shù)碼管輸入?yún)?shù)FirstBit表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示 如輸入0表示從第一個顯示。Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2*/void Display(unsigned char FiistBit.unsigned chai Num)static unsigned char i=0;DataPort=0; 清空數(shù)據(jù),防止有交替重影LATCH1=1;/段鎖存LATCH1=O;DataPon=dofly_WeiNIai+FustBit; 取位碼LATCH2

15、=1;/位鎖存LATCH2=0;DataPort=TempDatai; /取顯示數(shù)據(jù),段碼LATCH1=1;/段鎖存LATCH1=O;i+; if(i=Num)1=0;定時器初始化子程序*/void IniCTmierO(void)TMOD |= 0x01;影響TH0=0x00;TL0=0x00;EA=1;ETO=1;TR0=l;/*使用模式1,16位定時器,使用T符號可以在使用多個定時器時不受給定初值總中斷打開定時器中斷打開定時器開關(guān)打開定時器中斷子程序*/void TimeiO_isr(void) lnteriupt 1TH0=(655362000)/256;重新賦值 2msTL0=(65

16、5362000)%256;Displav(0,8);/調(diào)用數(shù)碼管掃描按鍵打描函數(shù),返回打描鍵值*/unsigned char KeyScan(void) 鍵盤打描函數(shù),使用行列逐級打描法 unsigned char Vai;KeyPort=OxfO;高四位置高,低四位拉低if(KeyPort!=0xf0)/表示有按鍵按卜DelavMs(lO); 去抖iRKeyP ort! =0xf0)表示有按鍵按下KeyPort=Oxfe; 檢測第一行if(KeyPort! =0xfe)Val=KeyPoit&OxfO;Val+=0x0e;while(KeyPort! =0xfe); DelayMs(

17、5); /去抖 while(KeyPort! =0xfe); return Vai;KeyPoit=Oxfd; 檢測第二行 if(KeyPort! =Oxfd)Val=KeyPoit&OxfO; Val+=0x0d;wlule(KeyPort! =0xfd);DelayMs(5); /去抖 wlule(KeyPort! =0xfd); return Vai;KeyPort=Oxfb; 檢測第三行if(KeyPort! =Oxfb)Val=KeyPoit&OxfO;Val+=OxOb; while(KeyPort? =Oxfb);DelayMs(5); /去抖 while(Key

18、Port? =Oxfb); return Vai;KeyPort=0xf7; 檢測第四行 if(KeyPort! =0xf7)Val=KeyPoit&OxfO;Val+=0x07; while(KeyPort! =0xf7);DelayMs(5); /去抖 while(KeyPort! =0xf7); return Vai;return Oxff;按鍵值處理函數(shù),返回打鍵值*/unsigned char KeyPro(void)switch(KeyScanQ)case 0x7e:retuin l;bieak;/O按卜相應的鍵顯示相對應的碼值case 0x7d:retuin 2;biea

19、k;/lcase 0x7b:return 3;break;/2case 0x77:retuin 10;break;/3case Oxbe:return 4;bieak;/4case Oxbd:return 5;break;/5case Oxbb:retuin 6;bieak;/6case 0xb7:retuin ll;break;/7case Oxde:return 7;bieak;/8case Oxdd:retuin 8;bieak;/9case Oxdb:retuin 9;bieak;/acase 0xd7:retuin 16;break;/bcase Oxee:retuin 12;bre

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論