1.外部中断的常用功能
外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。
比如P2.3引脚产生这样的电平无规律跳转,则下降沿的个数为5
所以我们就用外部中断1来实现记录K4按键从按下到松手的抖动过程中经历了多少个下降沿,把下降沿的个数显示在数码管上。
2.程序思路
我们定义一个16位的全局变量pulse用来记录P2.3下降沿的个数,在中断函数中的任务就是简单的pulse自加,因为引脚遇到下降沿就会进入中断函数。
在主函数里就是负责数码管显示即可。
3.代码
#include #include u16 pulse=0; void main() { u16 x,PULSE_buf; IT1 = 1; //下降沿触发模式 EX1 = 1; EA = 1; LED_Init();//初始化LED硬件模块 KEY_Init();//初始化按键功能模块 ShowNumber(pulse); while(1) { SEG_Scan(); if(PULSE_buf!=pulse)ShowNumber(pulse);//pulse不再是前一次的值,也就是pulse数值更新了,所以数码管缓存区也要更新pulse的数值以便显示出来 x++; if(x>=50)//隔一段时间过来记录此时的pulse数值 { x=0; PULSE_buf=pulse; } } } //请把P3.3和P2.3用杜邦线连接起来 void EXTI1_IRQHandler() interrupt 2 { pulse++; } 大家多按几次K4,发现按下后松手的一个动作里有时pulse就自加了几次,显示在数码管上的数加了好几下。 4.稳定测试 我们再用P2.3提前设定好会产生多少个脉冲,然后观察数码管显示的是不是我们设定好的脉冲数。这里我们让P2.3跳变电平15次,看看数码管显示的数值是多少。 #include #include u16 pulse=0; void main() { u8 i=0; IT1 = 1; //下降沿触发模式 EX1 = 1; EA = 1; LED_Init();//初始化LED硬件模块 KEY_Init();//初始化按键功能模块 while(i<15)//让P2.3产生脉冲数,然后结束循环 { KEY4=!KEY4; i++; delay_ms(1); //让电平保持的时间多一点 } ShowNumber(pulse);//更新数码管缓存区内容 while(1) { SEG_Scan(); //显示脉冲数 } } //请把P3.3和P2.3用杜邦线连接起来 void EXTI1_IRQHandler() interrupt 2 { pulse++; } 数码管显示的是8,画出状态图一目了然! 拔了杜邦线再复位开发板就是显示0了。
上一篇:51单片机-中断的实验现象
下一篇:51单片机-定时器概念
推荐阅读最新更新时间:2024-11-10 11:05
推荐帖子
- 【2024 DigiKey 创意大赛】物料开箱帖
- 非常高兴能够入围,感谢Digikey和eeworld提供的物料。我要做的作品是一个3d打印机耗材的智能干燥箱,支持通过wifi在网页上控制。BME680传感器,用于测量温度、湿度。ESP32C6开发板,作为主控。树莓派5,用于增加一些扩展功能。【2024DigiKey创意大赛】物料开箱帖
- eew_zCrdSf DigiKey得捷技术专区
- uCGUI移植过程中的编译问题,Error:C2285E,Error :C2225W
- 移植uCGUI到S3C2440的过程中,在ADS的编译环境下碰见如下编译问题,求助各位大侠。Error:C2285E:expected\';\'or\',\'-inserted\';\'before\'GUI_COLOR\'GUIType.hinline47Error:C2225W:declarationlackstype/storage-class(assuming\'int\'):GUI_COLORGUIType.hinline47
- nail26 实时操作系统RTOS
- 初学者真诚的向您请教
- global.obj:errorLNK2019:unresolvedexternalsymbolclassCWinApp*__cdeclAfxGetApp(void)(?AfxGetApp@@YAPAVCWinApp@@XZ)referencedinfunctionstructHMENU__*__cdeclGetMenu(structHWND__*)(?GetMenu@@YAPAUHMENU__@@PAUHWND__@@@Z)emulatorDbg
- holystw 嵌入式系统
- 米尔-T133测试评-LVGL移植
- ##米尔-T133测试评-LVGL移植前面我们已经成功适配了屏幕显示和电容触摸,已经达成了lvgl移动植入的必要条件,接下来我们就开始移植LVGL8.2的GUI到这个板子上###1.拉取LVGL源码我们可以通过一下命令拉取lvgl```bashgitclonehttps://github.com/lvgl/lvgl.gitgitclonehttps://github.com/lvgl/lv_drivers.gitgitclonehttps://github.com
- yvwei 国产芯片交流
- Kicad 原理图设置
- Kicad原理图设置Kicad原理图设置可以设置一些电气规则,原理图格式,NetClasses等。Kicad的原理图设置在左上角如图1所示图1:Kicad原理图设置Netclasses设置图2:NetClasses设置图2-1添加NetClasses,图2-2添加NetClasses的成员需要手动添加网络名称,还不太智能。图2-1设置整个NetClasses在网络上的属性,如我设置的是显示线宽为12mil,颜色为红色,线型为连续直线,效果如图3所示。
- xutong PCB设计
- 请教稳压管测试问题
- 12V稳压管,SOD323封装,用三用表测量正向电压:Vf=0.64V(正到负极)反向电压:Vf1=0.25V请问这个稳压管还能用不?请教稳压管测试问题【请问这个稳压管还能用不?】显然已经损坏,不能再用。正向测得0.64V是正常的,反向测得0.25V则不正常。 三用表测量反向是不通的!或者表有微弱的反应不论是什么万用表,12V稳压管均不可能被反向击穿,说明稳压管已经坏了。12V稳压管,反向电压:Vf1=0.25V,这个稳压管不能用了。
- kal9623287 电源技术
设计资源 培训 开发板 精华推荐
- 305W, -12V, 5V, 5V, 12V AC 到 DC 多路输出电源,用于 ATX 电源
- DER-646 - 9 W、宽范围、隔离反激式、带开关填谷、蓝牙轨道灯
- IC RFID卡 内置0805LED
- MIC26600 的典型应用:7A 超速控制同步 DC-DC 降压稳压器 Super Switcher II
- 使用 NXP Semiconductors 的 IP4052CX20/LF 的参考设计
- RT8008 1.5MHz、600mA、高效PWM降压DC/DC转换器的典型应用,用于可调电压调节器
- HANI-IOT、HMI Arrow 恩智浦物联网开发板,用于智能传感器和网关
- 使用 Cypress Semiconductor 的 MB3789A 的参考设计
- 双输出降压控制器产生 10% 准确、高效和可靠的大电流轨
- DM160223、CAP1298 评估套件为使用 CAP12XX 系列评估和开发各种电容式触摸感应和接近应用提供了一个简单的平台