項目二 任務(wù)4-簡易搶答器設(shè)計_第1頁
項目二 任務(wù)4-簡易搶答器設(shè)計_第2頁
項目二 任務(wù)4-簡易搶答器設(shè)計_第3頁
項目二 任務(wù)4-簡易搶答器設(shè)計_第4頁
項目二 任務(wù)4-簡易搶答器設(shè)計_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目二簡易搶答器設(shè)計獨立按鍵識別檢測任務(wù)一一位數(shù)碼管顯示任務(wù)二數(shù)碼管動態(tài)顯示任務(wù)三簡易搶答器設(shè)計任務(wù)四任務(wù)四簡易搶答器設(shè)計任務(wù)描述單片機(jī)P3口接8個按鍵,模擬8個選手進(jìn)行知識搶答,有開始和停止鍵。知識鏈接狀態(tài)機(jī)按鍵檢測狀態(tài)機(jī)按鍵檢測

實際上按鍵識別檢測也可以用狀態(tài)機(jī)來編程實現(xiàn),使用狀態(tài)機(jī)最節(jié)約系統(tǒng)資源,如:進(jìn)行按鍵檢測,只需要定時執(zhí)行按鍵狀態(tài)機(jī)程序即可。1.狀態(tài)機(jī)的基本概念無按鍵0有按鍵1等釋放20/0(消抖)1/01/0(干擾)0/1(確認(rèn))1/00/0比如說一個按鍵命令解析程序,就可以被看做狀態(tài)機(jī):

本來在A狀態(tài)下,觸發(fā)一個按鍵后切換到了B狀態(tài);再觸發(fā)另一個鍵后切換到C狀態(tài),或者返回到A狀態(tài)。這就是最簡單的按鍵狀態(tài)機(jī)例子。實際的按鍵解析程序會比這更復(fù)雜些。進(jìn)一步看,擊鍵動作本身也可以看做一個狀態(tài)機(jī)。一個細(xì)小的擊鍵動作包含了:釋放、抖動、閉合、抖動和重新釋放等狀態(tài)。一個鍵按下之后的波形是這樣的(假定低有效):在有鍵按下后,數(shù)據(jù)線上的信號出現(xiàn)一段時間的抖動,然后為低,當(dāng)按鍵釋放時,信號抖動一段時間后變高。當(dāng)然,在數(shù)據(jù)線為低或者為高的過程中,都有可能出現(xiàn)一些很窄的干擾信號。(1)空閑狀態(tài),即數(shù)據(jù)線信號為高,這里假定為S1狀態(tài),對應(yīng)無按鍵狀態(tài);(2)確認(rèn)真的有鍵按下的狀態(tài),這里假定為S2狀態(tài),對應(yīng)有按鍵按下狀態(tài);(3)確認(rèn)真的有鍵釋放的狀態(tài),這里假定為S3狀態(tài),對應(yīng)按鍵松開狀態(tài)。一般情況下,采用的時間序列可以為10-20毫秒之間。在S1狀態(tài),按鍵掃描的狀態(tài)始終處于S1,若此時按下按鍵,在下一個掃描時間間隔(這個時間間隔用于消抖)后,單片機(jī)檢測到有按鍵按下,進(jìn)入狀態(tài)S2,表示是一次有效的按鍵,然后在以后的每個時間間隔里繼續(xù)檢測,如果檢測IO一直是低電平,說明按鍵沒有被松開,那么狀態(tài)將一直停留在S2,一旦檢測到IO電平恢復(fù)為高電平說明是按鍵已經(jīng)松開,即狀態(tài)S3。2.狀態(tài)切換無按鍵0有按鍵1等釋放20/0(消抖)1/01/0(干擾)0/1(確認(rèn))1/00/0任務(wù)實施1.硬件電路。2.程序設(shè)計。1.硬件電路2.程序設(shè)計#include<reg52.h>#defineucharunsignedchar #defineuintunsignedint#defineKeyPortP3sbitsmg1=P2^4; sbitsmg2=P2^5; sbitsmg3=P2^6; sbitsmg4=P2^7; sbitkeyks=P1^2; sbitkeytz=P1^1; #definekeystate00 #definekeystate11 #definekeystate22 ucharucKeyStatus=0; unsignedcharkeyvalue=0;uintcount=0;uchartemp1;uchartemp[4]={0x3f,0x3f,0x3f,0x3f};bitflag=0; inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharweixuan[4]={0xef,0xdf,0xbf,0x7f};/**********10ms延時子程序***********/voiddelay10ms(void){uchari,k;for(i=20;i>0;i--)for(k=250;k>0;k--);}/**********ms級延時子程序***********/voiddelayms(uintx) //x=1,約1ms延時函數(shù),數(shù)碼管用{uinty,z;for(y=x;y>0;y--)for(z=111;z>0;z--);}/**********狀態(tài)機(jī)按鍵掃描程序***********/ucharkeyscan() {switch(ucKeyStatus){casekeystate0:ucKeyStatus=keystate1;break;casekeystate1:switch(KeyPort){case0xfe:keyvalue=1;++count;break;//第一個按鍵按下

case0xfd:keyvalue=2;++count;break;//第二個按鍵按下

case0xfb:keyvalue=3;++count;break;//第三個按鍵按下

case0xf7:keyvalue=4;++count;break;//第四個按鍵按下

case0xef:keyvalue=5;++count;break;//第五個按鍵按下

case0xdf:keyvalue=6;++count;break;//第六個按鍵按下

case0xbf:keyvalue=7;++count;break;//第七個按鍵按下

case0x7f:keyvalue=8;++count;break;//第八個按鍵按下

default:keyvalue=0xff;break;//其他情況,無按鍵按下

}/**********功能鍵識別檢查**********/voidKeyScan_1(void){uchari;

if(keytz==0){ delay10ms(); if(keytz==0)

{ while(!keytz);

count=0; for(i=0;i<4;i++){ temp[i]=0x40;} } flag=0;

}}}//開始鍵是否按下if(keyks==0){ delay10ms(); if(keyks==0){ while(!keyks);

count=0;for(i=0;i<4;i++){ temp[i]=0x40;} } flag=1;

}}//數(shù)碼管顯示voidsmg(){uchari;for(i=0;i<4;i++){ P0=temp[i];

P2=weixuan[i];

delayms(1);

P2=0xff;

}

}/**********主函數(shù)**********/voidmain() {while(1){ smg(); temp1=keyscan(); if((count==1)&&(flag==1)){ temp[0]=0x40; temp[1]=table[0]; temp[2]=table[0]; temp[3]=table[temp1];} KeyScan_1();}}進(jìn)階提高1.延時時間的計算單片機(jī)開發(fā)過程中,用到延時程序的地方太多了,怎么比較精確的知道當(dāng)前使用的延時程序延時時間是多少?2.為搶答器添加提示音一延時時間的計算介紹一個工具軟件:Emu51Form。Emu51Form是一個軟件仿真計時器,具體使用方法為:1.打開

keil\tools.ini

文件,在它的c51欄中加入AGSI9=Emu51Form.DLL

("delay

simulation")

然后存盤。1.延時時間的計算2.把

Emu51Form.dll

文件復(fù)制

keil\c51\bin

中。3.新建一個工程,編寫一個延時程序編譯通過后,如圖。4.調(diào)時時在peripherals下有Emu51Form選項,如圖:5.選擇

Debug/Start/Stop

Debug

Session

后,彈出如圖所示的對話框。選擇對話框中的Run,即可得到延時程序的延時值。6.編譯測試下面延時程序執(zhí)行的延時時間,晶振設(shè)置為11.0592MHz,該延時程序延時時間為1065us(1.065ms),如圖:#include<reg51.h>//頭文件#defineucharunsignedchar//定義uchar為無符號字符變量。

void

delayms(void)

{

uchark,ms;

ms=1

;

while(ms--)

{

for(k

=

0

;

k

<

120

;

k++)

;

}}2.為搶答器添加提示音核心代碼提示:voidbeeping(){uchari;for(i=0;i<100;i++)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論