單片機鍵盤(pán)輸入編程
序號7:如變量n大于等于30,則m、n清零。
序號8:P3.7置0,準備讀取按鍵輸入。
序號9:P1口置全1,準備讀取按鍵輸入。
序號10:如果P1口不等于全1,說(shuō)明4個(gè)按鍵中有鍵按下。
序號11:進(jìn)入if(P1!=0xff)語(yǔ)句范圍。
序號12:如果n等于0,進(jìn)入if(n==0)語(yǔ)句,m置1。
序號13:如果n等于1,進(jìn)入if(n==1)語(yǔ)句,同時(shí)進(jìn)行下面的具體判斷按鍵語(yǔ)句。作用效果為:開(kāi)始時(shí)m、n均賦0,一旦有鍵按下,第一次中斷產(chǎn)生時(shí)m賦1;第二次中斷產(chǎn)生時(shí)n遞增。當n等于1時(shí)(第二次中斷產(chǎn)生)進(jìn)入下面的具體判斷按鍵語(yǔ)句。若持續按下鍵,則第三次中斷產(chǎn)生~第三十一次中斷產(chǎn)生時(shí),程序不進(jìn)入具體的判斷按鍵語(yǔ)句過(guò)程(因這時(shí)n不等于1)。由于中斷每10mS產(chǎn)生一次,這樣可實(shí)現每0.31秒(31x10=0.31秒)進(jìn)行一次加法或移位的操作,與人眼的視覺(jué)特性相吻合。
序號14:進(jìn)入具體判斷按鍵語(yǔ)句范圍。
序號15:如果P1.0等于0(即電路中的set鍵按下),變量set遞增,變量left清0。說(shuō)明:set、left是為了判斷模式設定及左移而在整個(gè)程序開(kāi)始時(shí)定義的無(wú)符號字符型全局變量。
序號16:如果set大于等于4,則set清0。說(shuō)明:set值只能在0~3間變化,只有4種工作模式(走時(shí)及輸出控制模式、走時(shí)調整模式、定時(shí)1調整模式、定時(shí)2調整模式)。
序號17:在set等于1時(shí),向RAM區標志變量flag寫(xiě)入55H。說(shuō)明:flag是在整個(gè)程序開(kāi)始時(shí)定義的無(wú)符號字符型全局變量,用作判斷RAM區是否受干擾的依據。
序號18:如果P1.1等于0(即電路中的left鍵按下),變量left遞增。
序號19:如果left大于等于4,則left清0。說(shuō)明:left值只能在0~3間變化,LED數碼管只有4位顯示。
序號20:如果P1.2等于0(即電路中的up鍵按下),進(jìn)入if(P1_2==0)語(yǔ)句,變量up遞增。說(shuō)明:up是為了判斷數值增量而在整個(gè)程序開(kāi)始時(shí)定義的無(wú)符號字符型全局變量。
序號21:隨即進(jìn)入switch(left)開(kāi)關(guān)語(yǔ)句。
序號22:switch(left)開(kāi)關(guān)語(yǔ)句開(kāi)始。
序號23:left值為0時(shí),如果up大于等于10,則up清0。隨即退出。說(shuō)明:電子鐘的個(gè)位可在0~9之間調整。
序號24:left值為1時(shí),如果up大于等于6,則up清0。隨即退出。說(shuō)明:電子鐘的十位可在0~5之間調整。
序號25:left值為2時(shí),如果up大于等于10,則up清0。隨即退出。說(shuō)明:電子鐘的百位可在0~9之間調整。
序號26:left值為3時(shí),如果up大于等于3,則up清0。隨即退出。說(shuō)明:電子鐘的千位可在0~2之間調整。
序號27:若left為其它值,也退出。
序號28:switch(left)開(kāi)關(guān)語(yǔ)句結束。
序號29:if(P1_2==0)語(yǔ)句結束。
序號30:如果P1.2等于0(即電路中的up鍵按下時(shí)),進(jìn)入if(P1_2==0)語(yǔ)句,同時(shí)進(jìn)入switch(set)開(kāi)關(guān)語(yǔ)句。
序號31:switch(set)開(kāi)關(guān)語(yǔ)句開(kāi)始。
序號32:set值為0時(shí),退出。
序號33:set值為1時(shí),將此時(shí)up值送入X數組的第left位。隨即退出。說(shuō)明:X數組是顯示走時(shí)緩存區。
序號34:set值為2時(shí),將此時(shí)up值送入Y數組的第left位。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)1啟停標志位o_f1取反(啟動(dòng)/關(guān)閉)。隨即退出。說(shuō)明:Y數組是定時(shí)1記憶緩存區。o_f1是為了判斷定時(shí)1啟動(dòng)/關(guān)閉而在整個(gè)程序開(kāi)始時(shí)定義的位標志。
序號35:set值為3時(shí),將此時(shí)up值送入Z數組的第left位。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)2啟停標志位o_f2取反(啟動(dòng)/關(guān)閉)。隨即退出。說(shuō)明:Z數組是定時(shí)2記憶緩存區。o_f2是為了判斷定時(shí)2啟動(dòng)/關(guān)閉而在整個(gè)程序開(kāi)始時(shí)定義的位標志。
序號36:若set為其它值,也退出。
序號37:switch(set)開(kāi)關(guān)語(yǔ)句結束。if(P1_2==0)語(yǔ)句結束。
序號38:else語(yǔ)句開(kāi)始。
序號39:又進(jìn)入switch(set)開(kāi)關(guān)語(yǔ)句。說(shuō)明:上一個(gè)switch(set)開(kāi)關(guān)語(yǔ)句是將按鍵產(chǎn)生的up值送入X、Y、Z數組存放,現在這個(gè)switch(set)開(kāi)關(guān)語(yǔ)句是調出X、Y、Z數組內容至變量up,以便在原來(lái)的基礎上遞增。例如:原來(lái)的X[0]值為5,則在調整時(shí)個(gè)位LED數碼管顯示就從5開(kāi)始往上調,而不會(huì )產(chǎn)生從0或其它值開(kāi)始上調的情況,適合人的一般直覺(jué)。
序號40:set值為0時(shí),退出。
序號41:set值為1時(shí),將此時(shí)X數組的第left位值送入變量up。隨即退出。
序號42:set值為2時(shí),將此時(shí)Y數組的第left位值送入變量up。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)1啟停標志位o_f1取反(啟動(dòng)/關(guān)閉)。隨即退出。
序號43:set值為3時(shí),將此時(shí)Z數組的第left位值送入變量up。若此時(shí)P1.3等于0(即電路中的on/off鍵按下),則定時(shí)2啟停標志位o_f2取反(啟動(dòng)/關(guān)閉)。隨即退出。
序號44:若set為其它值,也退出。
序號45:switch(set)開(kāi)關(guān)語(yǔ)句結束。else語(yǔ)句結束。
序號46:if(n==0)語(yǔ)句結束。if(P1!=0xff)語(yǔ)句結束。
序號47:本次定時(shí)中斷快結束時(shí),將暫存于i,j的當時(shí)P1口、P3口狀態(tài)還原。
序號48:定時(shí)1中斷函數結束。
上面為按鍵輸入程序設計的詳細解釋?zhuān)存I輸入時(shí)需將當時(shí)狀態(tài)實(shí)時(shí)顯示出來(lái),我們將顯示走時(shí)、顯示調整走時(shí)、顯示調整定時(shí)1、顯示調整定時(shí)2做成四個(gè)子程序,分別由set為0、1、2、3時(shí)散轉后的“顯示走時(shí)并判斷定時(shí)1、2到否程序”、“顯示調整走時(shí)程序”、“顯示調整定時(shí)1程序”、“顯示調整定時(shí)2程序”進(jìn)行調用。為達到需輸入的某位顯示最亮(穩定顯示),而其它三位顯示較暗(有閃爍感)的視覺(jué)效顯,讓三位需顯示較暗的數碼管每位點(diǎn)亮3mS,而顯示最亮的那位數碼管點(diǎn)亮36mS即可。限于篇幅,具體程序就不進(jìn)行詳解了,讀者朋友可自行編寫(xiě)。
評論