單片機(jī)鍵盤輸入編程
下面為判斷按鍵輸入的T1定時(shí)中斷服務(wù)子程序,序號(hào)為解釋方便而加。
/*10mS定時(shí)中斷服務(wù)子函數(shù)*/
序號(hào) 1:void zd1(void) interrupt 3
2:{
3:uchar i,j;i=P1;j=P3;
4:TH1=-(5000/256);
5:TL1=-(5000%256);
6:if(m==1)n++;
7:if(n>=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:switch(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:x[left]=up;break;
34:case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;
35:case 3:{z[left]=up;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=x[left];break;
42:case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;
43:case 3:{up=z[left];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:定義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)字符型全局變量。
評論