基于C的單片機(jī)鍵盤_第1頁
基于C的單片機(jī)鍵盤_第2頁
基于C的單片機(jī)鍵盤_第3頁
基于C的單片機(jī)鍵盤_第4頁
基于C的單片機(jī)鍵盤_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、學(xué)習(xí)過單片機(jī)技術(shù)的人都知道,單片機(jī)的按鍵輸入一般可分為簡(jiǎn)單的獨(dú)立式按鍵輸入及行列式鍵盤輸入兩種。圖1為簡(jiǎn)單的獨(dú)立式鍵盤輸入示意圖,獨(dú)立式鍵盤輸入適合于按鍵輸入不多的情況(=30)n=0;m=0; 8:P3_7=0; 9:P1=0xff; 10:if(P1!=0xff) 11: 12:if(n=0)m=1; 13:if(n=1) 14: 15:if(P1_0=0)set+;left=0; 16:if(set=4)set=0; 17:if(set=1)flag=0x55; 18:if(P1_1=0)left+; 19:if(left=4)left=0; 20:if(P1_2=0)up+; 21:s

2、witch(left) 22: 23:case 0:if(up=10)up=0;break; 24:case 1:if(up=6)up=0;break; 25:case 2:if(up=10)up=0;break; 26:case 3:if(up=3)up=0;break; 27:default:break; 28: 29: 30:if(P1_2=0) 31:switch(set) 32:case 0:break; 33:case 1:xleft=up;break; 34:case 2:yleft=up;if(P1_3=0)o_f1=!o_f1;break; 35:case 3:zleft=u

3、p;if(P1_3=0)o_f2=!o_f2;break; 36:default:break; 37: 38:else 39:switch(set) 40:case 0:break; 41:case 1:up=xleft;break; 42:case 2:up=yleft;if(P1_3=0)o_f1=!o_f1;break; 43:case 3:up=zleft;if(P1_3=0)o_f2=!o_f2;break; 44:default:break;45 : 46: 47:P1=i;P3=j; 48: 序號(hào)1(程序解釋,以下同):聲明定時(shí)1中斷函數(shù)。 序號(hào)2:定時(shí)1中斷函數(shù)開始。 序號(hào)3:

4、定義i、j為無符號(hào)字符型局部變量。將當(dāng)時(shí)的P1口、P3口狀態(tài)送i、j暫存。 序號(hào)4、5:定時(shí)器T1重新載入10mS初值。 序號(hào)6:如變量m等于1,則變量n遞增。說明:m、n為整個(gè)程序開始時(shí)定義的無符號(hào)字符型全局變量。 序號(hào)7:如變量n大于等于30,則m、n清零。 序號(hào)8:P3.7置0,準(zhǔn)備讀取按鍵輸入。 序號(hào)9:P1口置全1,準(zhǔn)備讀取按鍵輸入。 序號(hào)10:如果P1口不等于全1,說明4個(gè)按鍵中有鍵按下。 序號(hào)11:進(jìn)入if(P1!=0xff)語句范圍。 序號(hào)12:如果n等于0,進(jìn)入if(n=0)語句,m置1。 序號(hào)13:如果n等于1,進(jìn)入if(n=1)語句,同時(shí)進(jìn)行下面的具體判斷按鍵語句。作用效

5、果為:開始時(shí)m、n均賦0,一旦有鍵按下,第一次中斷產(chǎn)生時(shí)m賦1;第二次中斷產(chǎn)生時(shí)n遞增。當(dāng)n等于1時(shí)(第二次中斷產(chǎn)生)進(jìn)入下面的具體判斷按鍵語句。若持續(xù)按下鍵,則第三次中斷產(chǎn)生第三十一次中斷產(chǎn)生時(shí),程序不進(jìn)入具體的判斷按鍵語句過程(因這時(shí)n不等于1)。由于中斷每10mS產(chǎn)生一次,這樣可實(shí)現(xiàn)每0.31秒(31x10=0.31秒)進(jìn)行一次加法或移位的操作,與人眼的視覺特性相吻合。 序號(hào)14:進(jìn)入具體判斷按鍵語句范圍。 序號(hào)15:如果P1.0等于0(即電路中的set鍵按下),變量set遞增,變量left清0。說明:set、left是為了判斷模式設(shè)定及左移而在整個(gè)程序開始時(shí)定義的無符號(hào)字符型全局變量。

6、 序號(hào)16:如果set大于等于4,則set清0。說明:set值只能在03間變化,只有4種工作模式(走時(shí)及輸出控制模式、走時(shí)調(diào)整模式、定時(shí)1調(diào)整模式、定時(shí)2調(diào)整模式)。 序號(hào)17:在set等于1時(shí),向RAM區(qū)標(biāo)志變量flag寫入55H。說明:flag是在整個(gè)程序開始時(shí)定義的無符號(hào)字符型全局變量,用作判斷RAM區(qū)是否受干擾的依據(jù)。 序號(hào)18:如果P1.1等于0(即電路中的left鍵按下),變量left遞增。 序號(hào)19:如果left大于等于4,則left清0。說明:left值只能在03間變化,LED數(shù)碼管只有4位顯示。 序號(hào)20:如果P1.2等于0(即電路中的up鍵按下),進(jìn)入if(P1_2=0)語

7、句,變量up遞增。說明:up是為了判斷數(shù)值增量而在整個(gè)程序開始時(shí)定義的無符號(hào)字符型全局變量。 序號(hào)21:隨即進(jìn)入switch(left)開關(guān)語句。 序號(hào)22:switch(left)開關(guān)語句開始。 序號(hào)23:left值為0時(shí),如果up大于等于10,則up清0。隨即退出。說明:電子鐘的個(gè)位可在09之間調(diào)整。 序號(hào)24:left值為1時(shí),如果up大于等于6,則up清0。隨即退出。說明:電子鐘的十位可在05之間調(diào)整。 序號(hào)25:left值為2時(shí),如果up大于等于10,則up清0。隨即退出。說明:電子鐘的百位可在09之間調(diào)整。 序號(hào)26:left值為3時(shí),如果up大于等于3,則up清0。隨即退出。說明

8、:電子鐘的千位可在02之間調(diào)整。 序號(hào)27:若left為其它值,也退出。 序號(hào)28:switch(left)開關(guān)語句結(jié)束。 序號(hào)29:if(P1_2=0)語句結(jié)束。 序號(hào)30:如果P1.2等于0(即電路中的up鍵按下時(shí)),進(jìn)入if(P1_2=0)語句,同時(shí)進(jìn)入switch(set)開關(guān)語句。 序號(hào)31:switch(set)開關(guān)語句開始。 序號(hào)32:set值為0時(shí),退出。 序號(hào)33:set值為1時(shí),將此時(shí)up值送入X數(shù)組的第left位。隨即退出。說明:X數(shù)組是顯示走時(shí)緩存區(qū)。 序號(hào)34:set值為2時(shí),將此時(shí)up值送入Y數(shù)組的第left位。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),

9、則定時(shí)1啟停標(biāo)志位o_f1取反(啟動(dòng)/關(guān)閉)。隨即退出。說明:Y數(shù)組是定時(shí)1記憶緩存區(qū)。o_f1是為了判斷定時(shí)1啟動(dòng)/關(guān)閉而在整個(gè)程序開始時(shí)定義的位標(biāo)志。 序號(hào)35:set值為3時(shí),將此時(shí)up值送入Z數(shù)組的第left位。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)2啟停標(biāo)志位o_f2取反(啟動(dòng)/關(guān)閉)。隨即退出。說明:Z數(shù)組是定時(shí)2記憶緩存區(qū)。o_f2是為了判斷定時(shí)2啟動(dòng)/關(guān)閉而在整個(gè)程序開始時(shí)定義的位標(biāo)志。 序號(hào)36:若set為其它值,也退出。 序號(hào)37:switch(set)開關(guān)語句結(jié)束。if(P1_2=0)語句結(jié)束。 序號(hào)38:else語句開始。 序號(hào)39:又進(jìn)入swit

10、ch(set)開關(guān)語句。說明:上一個(gè)switch(set)開關(guān)語句是將按鍵產(chǎn)生的up值送入X、Y、Z數(shù)組存放,現(xiàn)在這個(gè)switch(set)開關(guān)語句是調(diào)出X、Y、Z數(shù)組內(nèi)容至變量up,以便在原來的基礎(chǔ)上遞增。例如:原來的X0值為5,則在調(diào)整時(shí)個(gè)位LED數(shù)碼管顯示就從5開始往上調(diào),而不會(huì)產(chǎn)生從0或其它值開始上調(diào)的情況,適合人的一般直覺。 序號(hào)40:set值為0時(shí),退出。 序號(hào)41:set值為1時(shí),將此時(shí)X數(shù)組的第left位值送入變量up。隨即退出。 序號(hào)42:set值為2時(shí),將此時(shí)Y數(shù)組的第left位值送入變量up。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)1啟停標(biāo)志位o_f1

11、取反(啟動(dòng)/關(guān)閉)。隨即退出。 序號(hào)43:set值為3時(shí),將此時(shí)Z數(shù)組的第left位值送入變量up。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)2啟停標(biāo)志位o_f2取反(啟動(dòng)/關(guān)閉)。隨即退出。 序號(hào)44:若set為其它值,也退出。 序號(hào)45:switch(set)開關(guān)語句結(jié)束。else語句結(jié)束。 序號(hào)46:if(n=0)語句結(jié)束。if(P1!=0xff)語句結(jié)束。 序號(hào)47:本次定時(shí)中斷快結(jié)束時(shí),將暫存于i,j的當(dāng)時(shí)P1口、P3口狀態(tài)還原。 序號(hào)48:定時(shí)1中斷函數(shù)結(jié)束。 上面為按鍵輸入程序設(shè)計(jì)的詳細(xì)解釋,按鍵輸入時(shí)需將當(dāng)時(shí)狀態(tài)實(shí)時(shí)顯示出來,我們將顯示走時(shí)、顯示調(diào)整走時(shí)、顯示調(diào)整定時(shí)1、顯示調(diào)整定時(shí)2做成四個(gè)子程序,分別由set為0、1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論