計(jì)算機(jī)測(cè)控實(shí)驗(yàn)1_第1頁(yè)
計(jì)算機(jī)測(cè)控實(shí)驗(yàn)1_第2頁(yè)
計(jì)算機(jī)測(cè)控實(shí)驗(yàn)1_第3頁(yè)
計(jì)算機(jī)測(cè)控實(shí)驗(yàn)1_第4頁(yè)
計(jì)算機(jī)測(cè)控實(shí)驗(yàn)1_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一 鍵盤顯示實(shí)驗(yàn) 一、 實(shí)驗(yàn)?zāi)康?、掌握MCS51系統(tǒng)中擴(kuò)展8279鍵盤顯示接口的方法;2、掌握8279的工作原理和編程方法;3、掌握中斷處理程序的編程方法。二、 開(kāi)發(fā)環(huán)境1、程序開(kāi)發(fā)調(diào)試環(huán)境:KeilC2、程序燒寫環(huán)境S51ISP下載軟件 3、程序開(kāi)發(fā)環(huán)境演示三、 硬件原理圖1. 數(shù)碼管顯示原理介紹實(shí)驗(yàn)箱上有6個(gè)共陰極數(shù)碼管,圖1是其外部特性圖,圖2是其內(nèi)部原理圖,由圖2 可知,每個(gè)數(shù)碼管由8個(gè)發(fā)光二極管組成,其中aDP稱為數(shù)碼管的段控信號(hào),K是8個(gè)發(fā)光二極管的公共端,稱為位控信號(hào)。所以為了讓數(shù)碼管顯示一個(gè)數(shù)字,必須將位控信號(hào)接低電平,段控信號(hào)接高電平。例如:如要顯示數(shù)字“1”,b端和c

2、 端應(yīng)該接高電平,其余各端接低電平。模塊連線方式:2. 鍵盤掃描原理介紹鍵盤掃描原理如圖3 所示,“K1”和“K2”是按鍵,按鍵的兩端都接有10k的上拉電阻。當(dāng)行掃描端為低電平,同時(shí)“K1” 鍵被按下時(shí),“K1”的列讀取端就會(huì)出現(xiàn)低電平,由處理器對(duì)行掃描信號(hào)和列讀取信號(hào)進(jìn)行綜合判斷后,得出“K1”鍵被按下的結(jié)論。模塊連線方式:四、 軟件流程圖數(shù)碼管顯示流程圖開(kāi)始初始化,設(shè)置初始常數(shù)設(shè)置IO端口設(shè)置學(xué)號(hào)常數(shù)顯示第一位并時(shí)間延遲顯示第二位并時(shí)間延遲顯示第三位并時(shí)間延遲顯示第四位并時(shí)間延遲顯示第五位并時(shí)間延遲顯示第六位并時(shí)間延遲顯示第七位并時(shí)間延遲鍵盤部分流程圖開(kāi)始行置高位,列置地位是 有返回鍵值退

3、出檢測(cè)有無(wú)按下掃描第一行是返回鍵值退出是否按下掃描第二行是返回鍵值退出是否按下掃描第三行是返回鍵值退出是否按下掃描第四行是返回鍵值退出是否按下返回0xff五、 實(shí)驗(yàn)步驟a) 打開(kāi)軟件Keil,建立工程,并選擇CPU,新建文件,寫入源代碼,然后向工程中添入文件,同時(shí)編譯設(shè)置后對(duì)文件進(jìn)行編譯,最后調(diào)試軟件。b) 對(duì)硬件進(jìn)行正確連線,并與電腦相連接,。c) 使用S51ISP 下載軟件,先檢測(cè)器件選擇單片機(jī)型號(hào),再自動(dòng)打開(kāi)文件,隨后下載文件,將編號(hào)的程序載入單片機(jī)中。d) 注意與主機(jī)握手鏈接后觀察硬件實(shí)驗(yàn)現(xiàn)象。六、 軟件源碼1、 顯示自己學(xué)號(hào)匯編程序DATA_8279 EQU 1B30H ;數(shù)據(jù)口地址

4、COMM_8279 EQU 1B31H ;命令口地址ORG 00HLJMPINITORG 30HDB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FDAT0 EQU 30H;要顯示的八位數(shù)DAT1 EQU 31HDAT2 EQU 32HDAT3 EQU 33HDAT4 EQU 34HDAT5 EQU 35HDAT6 EQU 36HDAT7 EQU 37H LSA EQU P2.2LSB EQU P2.3LSC EQU P2

5、.4GPIO_DIG EQUP0;*; 主程序 ;;*;INIT:MOV DAT0,#006HMOVDAT1,#006HMOV DAT2,#03FHMOV DAT3,#04FHMOV DAT4,#006HMOV DAT5,#03FHMOV DAT6,#006HMOV DAT7,#06DHMAIN:CLR LSA; 顯示第一位CLR LSBCLRLSCMOV GPIO_DIG,DAT0ACALL DELAY;顯示持續(xù)時(shí)間MOV GPIO_DIG,#000H;消隱SETB LSA; 顯示第二位CLR LSBCLRLSCMOV GPIO_DIG,DAT1ACALL DELAY;顯示持續(xù)時(shí)間MOV G

6、PIO_DIG,#000HCLR LSA;顯示第三位SETB LSBCLRLSCMOV GPIO_DIG,DAT2ACALL DELAY;顯示持續(xù)時(shí)間MOV GPIO_DIG,#00HSETB LSA;顯示第四位SETB LSBCLRLSCMOV GPIO_DIG,DAT3ACALL DELAY;顯示持續(xù)時(shí)間MOV GPIO_DIG,#00HCLR LSA;顯示第五位CLR LSBSETBLSCMOV GPIO_DIG,DAT4ACALL DELAY;顯示持續(xù)時(shí)間 MOV GPIO_DIG,#00HSETB LSA;顯示第六位CLR LSBSETBLSCMOV GPIO_DIG,DAT5ACA

7、LL DELAY ;顯示持續(xù)時(shí)間MOV GPIO_DIG,#00HCLR LSA;顯示第七位SETB LSBSETBLSCMOV GPIO_DIG,DAT6ACALL DELAY ;顯示持續(xù)時(shí)間MOV GPIO_DIG,#00HSETB LSA;顯示第七位SETB LSBSETBLSCMOV GPIO_DIG,DAT7ACALL DELAY ;顯示持續(xù)時(shí)間MOV GPIO_DIG,#00HLJMP MAIN ;無(wú)條件循環(huán)MAIN ;*; 延時(shí)程序 ;;*;DELAY:MOV R7,#0FFHDJNZ R7,$RETENDC語(yǔ)言程序include<reg52.h> /包含頭文件 #d

8、efine DataPort P0 /定義數(shù)據(jù)端口 sbit LATCH1=P22;/定義鎖存使能端口 段鎖存sbit LATCH2=P23;/ 位鎖存unsigned char code dofly_DuanMa=0x06,0x06,0x3f,0x4f,0x06,0x3f,0x06,0x6D;/ 顯示段碼值11031015unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼void Delay(unsigned int t); /函數(shù)聲明main() unsigned

9、char i=0; while(1) DataPort=dofly_WeiMai; /取位碼 LATCH2=1; /位鎖存 LATCH2=0; DataPort=dofly_DuanMai; /取顯示數(shù)據(jù),段碼 LATCH1=1; /段鎖存 LATCH1=0; Delay(200); /掃描間隙延時(shí) i+; if(8=i) /檢測(cè)8位掃描完全結(jié)束?如掃描完成則從第一個(gè)開(kāi)始再次掃描8位 i=0; void Delay(unsigned int t) while(-t);2、 鍵盤程序#include<reg52.h> /包含頭文件#define DataPort P0 /定義數(shù)據(jù)端口

10、 #define KeyPort P1sbit LATCH1=P22;/定義鎖存使能端口 段鎖存sbit LATCH2=P23;/ 位鎖存bit KeyPressFlag;/定義按鍵標(biāo)志位unsigned char code dofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ 顯示段碼值0Funsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,

11、即位碼unsigned char TempData10; /存儲(chǔ)顯示值的全局變量void DelayUs2x(unsigned char t);/us級(jí)延時(shí)函數(shù)聲明 void DelayMs(unsigned char t); /ms級(jí)延時(shí)void Display(unsigned char FirstBit,unsigned char Num);/數(shù)碼管顯示函數(shù)unsigned char KeyScan(void);/鍵盤掃描unsigned char KeyPro(void);void Init_Timer0(void);/定時(shí)器初始化void Init_INT0(void); /外部中斷

12、0初始化和/*- 主函數(shù)-*/void main (void)unsigned char num,i,j; unsigned char temp8;Init_Timer0();Init_INT0();while (1) /主循環(huán) KeyPort=0xf0;/ 賦值用于中斷檢測(cè) if(KeyPressFlag=1) KeyPressFlag=0; /按鍵標(biāo)志清零,以便下次檢測(cè) num=KeyPro(); if(num!=0xff) if(i<8) tempi=dofly_DuanManum; for(j=0;j<=i;j+) TempData7-i+j=tempj; i+;if(i=

13、9)/多出一個(gè)按鍵輸入為了清屏 原本應(yīng)該為8 i=0; for(j=0;j<8;j+)/清屏 TempDataj=0; /*- uS延時(shí)函數(shù)-*/void DelayUs2x(unsigned char t) while(-t);/*- mS延時(shí)函數(shù)-*/void DelayMs(unsigned char t) while(t-) /大致延時(shí)1mS DelayUs2x(245); DelayUs2x(245); /*- 顯示函數(shù),用于動(dòng)態(tài)掃描數(shù)碼管-*/void Display(unsigned char FirstBit,unsigned char Num) static unsig

14、ned char i=0; DataPort=0; /清空數(shù)據(jù),防止有交替重影 LATCH1=1; /段鎖存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位碼 LATCH2=1; /位鎖存 LATCH2=0; DataPort=TempDatai; /取顯示數(shù)據(jù),段碼 LATCH1=1; /段鎖存 LATCH1=0; i+; if(i=Num) i=0;/*- 定時(shí)器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /TH0=0x00; /給定初值 /TL0=0x00; EA=1; /總中斷打開(kāi) ET0=1;

15、 /定時(shí)器中斷打開(kāi) TR0=1; /定時(shí)器開(kāi)關(guān)打開(kāi)/*- 定時(shí)器中斷子程序-*/void Timer0_isr(void) interrupt 1 TH0=(65536-2000)/256; /重新賦值 2ms TL0=(65536-2000)%256; Display(0,8); / 調(diào)用數(shù)碼管掃描/*-按鍵掃描函數(shù),返回掃描鍵值-*/unsigned char KeyScan(void) /鍵盤掃描函數(shù),使用行列逐級(jí)掃描法 unsigned char Val; KeyPort=0xf0;/高四位置高,低四位拉低 if(KeyPort!=0xf0)/表示有按鍵按下 DelayMs(10);

16、/去抖if(KeyPort!=0xf0) /表示有按鍵按下 KeyPort=0xfe; /檢測(cè)第一行if(KeyPort!=0xfe) Val=KeyPort&0xf0; Val+=0x0e; while(KeyPort!=0xfe); DelayMs(10); /去抖 while(KeyPort!=0xfe); return Val; KeyPort=0xfd; /檢測(cè)第二行if(KeyPort!=0xfd) Val=KeyPort&0xf0; Val+=0x0d; while(KeyPort!=0xfd); DelayMs(10); /去抖 while(KeyPort!=0

17、xfd); return Val; KeyPort=0xfb; /檢測(cè)第三行if(KeyPort!=0xfb) Val=KeyPort&0xf0; Val+=0x0b; while(KeyPort!=0xfb); DelayMs(10); /去抖 while(KeyPort!=0xfb); return Val; KeyPort=0xf7; /檢測(cè)第四行if(KeyPort!=0xf7) Val=KeyPort&0xf0; Val+=0x07; while(KeyPort!=0xf7); DelayMs(10); /去抖 while(KeyPort!=0xf7); return

18、 Val; return 0xff;/*-按鍵值處理函數(shù),返回掃鍵值-*/unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return 0;break;/0 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 0x7d:return 1;break;/1 case 0x7b:return 2;break;/2 case 0x77:return 3;break;/3 case 0xbe:return 4;break;/4 case 0xbd:return 5;break;/5 case 0xbb:return 6;break;/6 case 0xb7:return 7;break;/7 case 0xde:return 8;break;/8 case 0xdd:return 9;break;/9 case 0xdb:return 10;break;/a case 0xd7:return 11;break;/b case 0xee:return 12;break;/c case 0xed:return 13;break;/d case 0xeb:return 14;break;/e case 0xe7:return 15;break;/f def

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論