更多单片机学习笔记:
单片机学习笔记 1. 点亮一个LED灯
单片机学习笔记 2. LED灯闪烁
单片机学习笔记 3. LED灯流水灯
单片机学习笔记 4. 蜂鸣器滴~滴~滴~
单片机学习笔记 5. 数码管静态显示
单片机学习笔记 6. 数码管动态显示
单片机学习笔记 7. 独立键盘
单片机学习笔记 8. 矩阵键盘按键检测
单片机学习笔记 9. 8×8LED点阵屏
单片机学习笔记 10. 中断系统(理论)
0、实现的功能
使用外部中断1,独立按键每按一次就触发一次外部中断1,中断处理是P1取反(LED亮灭)
1、Keil工程
具体可见单片机学习笔记 10. 中断系统(理论)
2、代码实现
中断产生类型选择为下降沿触发,实现下降沿可以用杜邦线直接接地,但是会有杜邦线接触抖动的问题,可能会触发很多次。可以采用 杜邦线连接P3.3和P3.7,按键按一下就让P3.7变0,从而P3.3也为0 的方式
我们用按键使P3.7产生一次下降沿,P3.7来控制P3.3外部中断1的触发,中断处理是将P1取反(灯的亮灭)
代码实现:
#include<reg52.h>
#include<intrins.h>
sbit key_s2 = P3^0;
sbit flag = P3^7;//外部中断信号产生脚,会用杜邦线传递给P3.3
//延时模块
void delay(unsigned char z)
{
unsigned int x;
unsigned int y;
for(x=z; x>0; x--)
for(y=114; y>0; y--);
}
void int1Init()
{
EA = 1;//打开总中断
EX1 = 1;//打开外部中断1
IT1 = 1;//设置中断触发方式为下降沿触发
}
//外部中断1中断服务程序
void int1() interrupt 2
{
P1 = ~P1;//如果触发中断了,P1就全部取反(灯全亮)
}
void main()
{
int1Init(); //外部中断1初始化
while(1)
{
if(key_s2 == 0)
{
delay(20); //按键消抖
if(key_s2 == 0)
{
flag = 1;
flag = 0;//按下按键后P3.3产生一个下降沿,进行中断触发
while(!key_s2);//松手检测
}
}
}
}
实物展示: