




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新時期高校環(huán)藝課程教學(xué)改革探究
- 高考數(shù)學(xué)真題分類第11章算法初步解析
- 2024年常州經(jīng)濟(jì)開發(fā)區(qū)招聘政府雇員筆試真題
- 快遞員的工作流程SOP-企業(yè)管理
- 智能設(shè)備質(zhì)量體系-洞察及研究
- 聲音景觀保護(hù)-洞察及研究
- 四川省內(nèi)江市隆昌市隆昌市第三中學(xué)2025年七下英語期中聯(lián)考模擬試題含答案
- 腸穿孔的臨床表現(xiàn)及護(hù)理講課件
- 高考記敘文講課件
- 大腸癌放化療的護(hù)理講課件
- 求職心理調(diào)適專家講座
- GB/T 6344-2008軟質(zhì)泡沫聚合材料拉伸強(qiáng)度和斷裂伸長率的測定
- GB/T 3532-1995日用瓷器
- 學(xué)術(shù)論文寫作規(guī)范與技巧課件
- 生物高中-基于大數(shù)據(jù)分析的精準(zhǔn)教學(xué)課件
- 工程結(jié)算審計實施方案(共8篇)
- 樂東221氣田投產(chǎn)專家驗收匯報
- 信任五環(huán)(用友營銷技巧)課件
- 2022年廣東省深圳市中考化學(xué)真題試卷
- 危險貨物道路運輸安全生產(chǎn)管理制度
- GB∕T 8110-2020 熔化極氣體保護(hù)電弧焊用非合金鋼及細(xì)晶粒鋼實心焊絲
評論
0/150
提交評論