![](https://i-blog.csdnimg.cn/blog_migrate/137d07f5a45f281013c897a9855f2e08.png)
本实验的主要功能是实现按下按钮,数码管增加1,到9后从0开始显示。如图打开proteus导入元器件并连线。下面了解一些中断的基础知识。
![](https://i-blog.csdnimg.cn/blog_migrate/add74f4768d196d553557a8d59f87d8e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/91abc9de2a6dfa356bbb3ddc494c570a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b4d991f2b026318bc9b9674820d11936.png)
![](https://i-blog.csdnimg.cn/blog_migrate/164c9f820d23c0fb8a43a2df43402171.png)
![](https://i-blog.csdnimg.cn/blog_migrate/38f4a917aa615ba1a05d56f76e4ab3bd.png)
下面开始编写c程序
![](https://i-blog.csdnimg.cn/blog_migrate/6673dd36f69c4900880d970cfcca9e3e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2cd8cc067895165ef26cbb44dad707e5.png)
#include"reg52.h"
char s[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int num=0;
void init(){
IT0 = 1; // 外部中断设置成1,边沿触发方式
EX0 = 1; // 使用INT0的中断
EA = 1; // 开启总中断
}
void display(){
P2 = s[num];
}
void main(){
init();
while(1){
display();
}
}
void zhongduan() interrupt 0{
num++;
if(num==10){
num=0;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/aad8c5cf9592be0e604da17c6999f74b.png)
接下来在写一段外部中断1 P3.3/INT1的边沿触发中断的代码:
#include<reg52.h>
char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int num=0;
void init()
{
IT1=1;
EX1=1;
EA=1;
}
void display()
{
P2=duan[num];
}
int main()
{
init();
while(1)
{
display();
}
}
void zhongduan()interrupt 2 // 此处入口编号是2 3 4 都能正常触发,0 1 不行。
{
num++;
if(num==10)
{
num=0;
}
}