【Proteus仿真】外部中断触发倒计时5秒

【Proteus仿真】外部中断触发倒计时5秒


程序代码

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
 #include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit a = P2^1;
sbit b = P2^0;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极段码0-9

uint num=5;
uchar shi=0;
void delayms(uint xms) //延时程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void display(uint num)
{
a=1; //共阳极数码管高电平有效
P0=table[num%10]; //循环显示0-9
delayms(5); //刷新
P0=0XFF; //消隐
a=0;

b=1; //共阳极数码管高电平有效
P0=table[(num/10)%10]; //循环显示0-9
delayms(5); //刷新
P0=0XFF; //消隐
b=0;
}
//外部中断服务程序
void exint0() interrupt 0
{
EX0=0; //关闭外部请求中断允许位
TL0 = 0xb0; //设置定时初始值
TH0 = 0x3c; //设置定时初始值
TR0=1;//开启定时器0中断

}

/\* Timer0 interrupt routine \*/
void tm0\_isr() interrupt 1
{
// EX0 = 0; //关闭INT0中断
if(shi==20)
{ //20\*50MS定时时间为1秒
shi=0;
if(!num--){
TR0=0;
EX0=1; //启用外部请求中断允许位
num =5;
}
}
TL0 = 0xb0; //设置定时初始值(65536-50000)%256
TH0 = 0x3c; //设置定时初始值(65536-50000)/256

shi++;

}

void main()
{
TMOD = 0x01; /\*定时器工作方式1\*/
EA=1; //中断总开关
EX0 = 1; //使能INT0中断
ET0=1; //使能定时器0中断
IT0=1;//外部中断采用下降沿触发
INT0 = 1;//外部中断引脚置1
TR0=0; //定时器0允许中断位关闭
TF0 = 0; //清除TF0标志
while(1)
{
display(num);//调用函数
}
}




程序源码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/19rcxhfV\_dVtq0frkXR-7kQ 
提取码:xkwh


结婚是一个信号,表明两个人如胶似漆仿佛融成了一体的热恋有它的极限,然后就要降温,适当拉开距离,重新成为两个独立的人,携起手来走人生的路。然而,人们往往误解了这个信号,反而以为结了婚更是一体了。