資源描述:
《實驗四-鍵盤與中斷參考程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實驗四-鍵盤與中斷參考程序1、基本要求:在mini80E單片機實驗板上實現(xiàn)教材【例4丄1】對應(yīng)的功能。畫岀電路原理圖、編寫程序、在實驗板上實現(xiàn)。【例4.1.1]用數(shù)碼管前兩位顯示一個十進制數(shù),變化范圍為00-59,開始時顯示00,每按下S2(keyl)鍵一次,數(shù)值加1;每按下S3(key2)鍵一次,數(shù)值減1;每按下S4(key3)鍵一次,數(shù)值歸零;按下S5(key4)鍵一次,利用定時器功能使數(shù)值開始自動每秒加1,再次按下S5(key4)鍵,數(shù)值停止加1,保持顯示原數(shù)。(P82)說明:實驗室的實驗板與教材上程序?qū)?yīng)的硬件電路稍有區(qū)別,程序
2、耍做少許修改。主要是修改按鍵和顯示器對應(yīng)的接口定義。請對下面程序中注釋部分標(biāo)有“刪除或修改”的地方刪除或修改,修改原理見實驗報告或QQ群中mini80e實驗板的原理圖。#include&It;reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitkeyl=P3A4;sbitkey2=P3A5;sbitkey3=P3A6;sbitkey4=P3A7;sbitdula=P2A6;sbitwela=P2A7;//52系列單片機頭文件//SI,刪除或修改〃S2,刪除或修改〃S3
3、,刪除或修改〃S4,刪除或修改〃刪除或修改〃刪除或修改//A-Fucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d?0x7d,0x07,0x7f,0x6f,//0-90x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayms(uint);//延時ms函數(shù)ucharnumt0,num;{dula=l;〃刪除或修改PO=table[shi];//保留ucharshi,ge;〃局部變量'存放要顯示的十位、個位數(shù)shi=numdis/10;ge=numdis%10;//分離兩
4、個分別要顯示的數(shù)//numtO-對T0定時計數(shù),num■變化的數(shù)(0-59)voiddisplay(ucharnumdis)〃顯示子函數(shù)(電路原理見P58)}dula=0;PO=Oxff;wela=l;PO=Oxfe;wela=0;〃刪除或修改〃刪除或修改〃修改〃刪除或修改〃刪除或修改delayms(5);//延時保證亮度(實際延時l-2ms即可)dula=l;dula=0;PO=Oxff;wela=l;PO=Oxfd;wela=0;delayms(5);//刪除或修改〃刪除或修改〃刪除或修改〃修改〃刪除或修改〃刪除或修改PO=tabl
5、e[ge];〃保留〃以下程序不變voiddelaymsfuintxms){voidinit()〃初始化函數(shù){voidkeyscan(){if(keyl==O)//keyl按下否?〃鍵處理函數(shù)TMOD=0x01;〃設(shè)置TO方式1定時〃裝初值定時50msTH0=(65536-45872)/256;TL0=(65536-45872)%256;EA=1;ETO=1;〃開總屮斷〃開TO屮斷uintij;for(i=xms;i>0;i-)//i=xms即延時約xms毫秒for(j=110;j>0;j-);{}if(key2==0){}i
6、f(key3==0){}if(key4==0){delayms(lO);if(key4==0)//key4按下否?delayms(lO);if(key3==0){}num=0;〃清0while(!key3);//key3按下否?delayms(lO);if(key2==0){}if(num==0)〃當(dāng)?shù)?時重新歸60num二60;num-;while(!key2);//key2按下否?delayms(lO);{}num++;//如果keyl按下‘num加1if(num==60)//當(dāng)?shù)?0時重新歸0num=0;//等待按鍵釋放while
7、(lkeyl);//延時10ms消抖if(keyl==O)//再判別是否按下}}{}while(!key4);TRO=~TRO;〃啟動或停止定時器0voidmain(){}init();while(l){}〃主函數(shù)〃初始化〃循環(huán)執(zhí)行程序(注意不要把初始化包括在內(nèi))〃按鍵識別與處理〃刷新顯示keyscan();display(num);voidT0_time()interrupt1{}//T0定時50ms中斷服務(wù)函數(shù)TH0=(65536-45872)/256;//重裝初值}numtO=O;num++;num=O;TL0=(65536-45
8、872)%256;numtO++;{〃然后把num清0重新再計20次〃1秒到num加1if(numt0==20)〃對50ms計數(shù)〃如果到了20次,說明1秒時間到if(num==60)2、創(chuàng)新要求:在mini