51單片機(jī)-按鍵部分(3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;//定義位選IO口
sbitwela=P2^7;//定義段選IO口
sbits2=P3^4;//按鍵IO口
sbits3=P3^5;
sbits4=P3^6;
sbits5=P3^7;
ucharnum,num1,num2,num3,a,b,flag;
uintaa;
ucharcodetable[]=
{
//0123
0x3f,0x06,0x5b,0x4f,
//4567
0x66,0x6d,0x7d,0x07,
//89AB
0x7f,0x6f,0x77,0x7c,
//CDEF
0x39,0x5e,0x79,0x71,
};//數(shù)碼管編碼
voiddisplay(ucharnumber);
voiddelay(ucharz);
voidchushihua();
voidmain()
{
while(1)//程序一直運(yùn)行
{
display(aa);//數(shù)碼管先運(yùn)行
if(s2==0)//判斷是否S2是否按下
delay(10);//延時(shí)10ms消抖
if(s2==0)//再判斷
{
TR0=0;
aa++;
if(aa==60)//到了設(shè)定時(shí)間就重置
aa=0;
while(!s2);//抬手檢測(cè)
}
if(s3==0)//判斷是否S3是否按下
delay(10);//延時(shí)10ms消抖
if(s3==0)//再判斷
{
while(!s3);//抬手檢測(cè)
TR0=0;
if(aa==0)//到了設(shè)定時(shí)間就重置
aa=60;
aa--;
}
if(s4==0)//判斷是否S4是否按下
delay(10);//延時(shí)10ms消抖
if(s4==0)//再判斷
{
while(!s4);//抬手檢測(cè)
aa=0;
TR0=0;
}
if(s5==0)//判斷是否S4是否按下
delay(10);//延時(shí)10ms消抖
if(s5==0)//再判斷
{
while(!s5);//抬手檢測(cè)
chushihua();//初始化函數(shù)
TR0=~TR0;//啟動(dòng)或者暫停
}
}
}
voidt0t()interrupt1//中斷函數(shù)
{
TH0=(65536-50000)/256;//重新裝初值的高八位
TL0=(65536-50000)%256;//重新裝初值的低八位
num++;//計(jì)數(shù)器加一
if(num==20)//二十個(gè)中斷
{
num=0;//將中斷周期清零
aa++;//數(shù)碼管數(shù)字加一
if(aa==60)//數(shù)碼管數(shù)字溢出判定
aa=0;//數(shù)碼管數(shù)字清零
}
}
voiddisplay(ucharnumber)//顯示函數(shù)
{
uchara,b;
a=number/10;//十位
b=number%10;//個(gè)位
dula=1;
P0=table[a];
dula=0;
P0=0Xff;
wela=1;
P0=0xfe;
wela=0;
P0=0XFF;
delay(5);//十位的顯示
dula=1;
P0=table[b];
dula=0;
P0=0XFF;
wela=1;
P0=0xfd;
wela=0;
P0=0XFF;
delay(5);//個(gè)位的顯示
}
voiddelay(ucharz)//延時(shí)函數(shù)
{
ucharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidchushihua()//初始化函數(shù)
{
TMOD=0x01;//設(shè)定定時(shí)器工作模式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定時(shí)器賦初值
EA=1;//打開(kāi)總中斷
ET0=1;//打開(kāi)定時(shí)器中斷0
//TR0=1;//打開(kāi)定時(shí)器0
}