前言
了解外部中断触发方式及响应处理
样例:外部中断INT0 && INT1处理按键事件
提示:以下是本篇文章正文内容,下面案例可供参考
一、场景
样例功能:INT0按下计数+1,INT1按下计数-1,显示范围0~9999
二、编程实现
1.主函数:
开机界面显示默认初值1234,3s后进入按键检测,默认0000
变量PowerOnTimeCnt 在T0定时中断服务函数中执行++
void main()
{
INIT();
EA = 1;
while(PowerOnTimeCnt < 3000) //开机画面1234后开始显示0000,按键处理
{
P1 = 0Xfe; //test
}
while(1)
{
// ADC_Convert();
// Uart_Function();
Dis_Function();
Key_Exchange();
}
}
2.外部中断初始化
void EX0Init(void)
{
IT0 = 1; //外部中断0触发方式 0:电平触发(低电平有效)1:边沿触发(高->低负跳变)
EX0 = 1; //允许外部中断0中断
}
void EX1Init(void)
{
IT1 = 1; //外部中断1触发方式 0:电平触发(低电平有效)1:边沿触发(高->低负跳变)
EX1 = 1; //允许外部中断1中断
}
3.外部中断服务函数
void Ex0_ISR() interrupt 0
{
// fKeyEx0 = 1;
// if(vKeyEx0Cnt > 1) //消抖,有时按键检测不到
// {
// vKeyEx0Cnt = 0;
// fKeyEx0 = 0;
Delay_xms(4); //简单延时消抖
if(!KeyIn_Ex0)
{
KeyCnt_Ex++;
if(KeyCnt_Ex > 9999)
{
KeyCnt_Ex = 0;
}
}
// }
}
void Ex1_ISR() interrupt 2
{
// fKeyEx0 = 1;
// if(vKeyEx0Cnt > 1) //消抖,有时按键检测不到
// {
// vKeyEx0Cnt = 0;
// fKeyEx1 = 0;
Delay_xms(4); //简单延时消抖
if(!KeyIn_Ex1)
{
KeyCnt_Ex--;
if(KeyCnt_Ex > 9999)
{
KeyCnt_Ex = 9999;
}
}
// }
}
4.显示处理
SEG_DisBuf[0] = KeyCnt_Ex / 1000;
SEG_DisBuf[1] = KeyCnt_Ex / 100 % 10;
SEG_DisBuf[2] = KeyCnt_Ex / 10 % 10;
SEG_DisBuf[3] = KeyCnt_Ex % 10;
P.S.:若是不想显示高位的0,可以做成由高到低判断显示,如:
if(KeyCnt_Ex >= 1000)
SEG_DisBuf[0] = KeyCnt_Ex / 1000;
else
SEG_DisBuf[0] = 23; //熄灭
if(KeyCnt_Ex >= 100)
……… ………… ………
5.测试结果
总结
1.样例1中外部中断下的按键消抖一定要处理。仿真环境下不明显,实际电路下,按键按下一次会被加/减多个1。
@1@ 数码管扫描在T0定时中每1ms刷新一次,调试发现选择定时T0/T1中断服务函数中计数vKeyEx0Cnt的方法,此时无论选择延时1~10ms消抖,显示屏稳定,但是按键有时会被漏掉。怀疑是外部中断优先级最高,T0/T1未正常计数ms级,此时按键已经松开。
@2@ 样例中最终选择了占CPU时间的Delay_Xms()软件延时。缺点是按下时界面抖动,但未漏掉按键。(这里后续再优化)
上一篇:#C51中断定时(PWM输出+外部中断频率检测)
下一篇:#C51按键处理(初阶基础)
推荐阅读最新更新时间:2024-11-13 11:10
设计资源 培训 开发板 精华推荐
- NCV8843MNR2GEVB:降压稳压器演示评估板
- CRD-50DD12N,基于光伏应用中 50kW DC/DC 升压转换器的 SiC MOSFET 参考设计
- 使用 Semtech 的 SC4518 的参考设计
- ADR434B 4.096 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- 黄淮学院立创杯电子设计大赛-1002126A-刘晨茜
- 使用 Analog Devices 的 LTC3835IGN-1 的参考设计
- MC78M08BDTRKG 8V 电流调节器的典型应用
- CH340G USB转串口 (搭配BluePill使用)
- LT8631IFE 12V、1A、降压转换器的典型应用电路
- NCP715SQT2GEVB、LDO 稳压器、超低静态电流、SC-70 封装评估板
- 得捷第二季Follow me第2期来袭,一起解锁功能强大且灵活的【Arduino UNO R4 WiFi】
- 有奖直播:远近皆宜的无线连接方案 3月25日(周四)上午10:00 邀您观看!
- 有奖直播:新能源行业中的电学测试与校准应用
- 英飞凌角度传感器应用解锁机看看你能找到几种?
- TI LM3S811 分组DIY,火热进行中......
- 【直播已结束】一起深挖 TI 新发布的 Robotics SDK,看干货直播赢好礼!
- 有奖直播报名:英飞凌智能电机驱动方案
- 6小时狂欢,谁是2016年TI杯全国大学生物联网设计竞赛最高人气王,你说了算!
- TI有奖直播|如何进行更加快速、简单且成本更低的AI 摄像头应用的开发
- 有奖征文 | 电源仿真经验大征集!