项目需求
使用外部中断实现使用独立按键控制led的亮灭
一、需求分析
1、三个关键词
2、要实现一个中断系统如何做?
void init()
{
EA=1;
IT0=1;
EX0=1;
}
void main()
{
while(1)
{
}
}
void int0() interrupt 0
{
delay(1000);
if(k3==0)
{
led=~led;
}
}
二、如何将以上的三个关键词整合
1、完成以上三个关键词所需要的辅助函数
void delay(u8 i)
{
while(i--);
}
2、完成本程序所需要的预处理过程
- 类型声明
在delay函数中用到数据类型u8,所以要在程序开头声明u8类型
typedef unsigned char u8;
- 端口位定义
在本程序中一共用到两个单片机I/O口
1、led电平控制端口:P2^0;
2、INT0和k3按键电平控制端口:P3^2
sbit led = P2^0;
sbit k3 = P3^2;
三、完整程序如何写?
#include<reg52.h>
typedef unsigned char u8;
sbit led=P2^0;
sbit k3=P3^2;
void delay(u8 i)
{
while(i--);
}
void init()
{
EA=1;
IT0=1;
EX0=1;
}
void main()
{
init();
while(1)
{}
}
void int0() interrupt 0
{
delay(1000);
if(k3==0)
{
led=~led;
}
}
四、难点讨论(答案下期更新)
1、为什么INT0外部中断系统使用跳变沿(下降沿)触发方式?
2、为什么在中断子程序中led取反后不用延时就可以看到效果?