1.另一个外部中断

前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可

代码就是把“EX0”改为“EX1”,“IT0”改为“IT1”。

interrupt后面的0要改为2,函数名我们改为“EXTI1_IRQHandler()”#include

#include //详见第六章第8讲

void main()

{

IT1 = 1;   //下降沿触发模式

EX1 = 1;

EA  = 1;

LED_Init();//初始化LED硬件模块

while(1);

}

void EXTI1_IRQHandler() interrupt 2

{

LED2=!LED2;

}

再次提醒,杜邦线的一头接的是P3.3。

至于interrupt后面的数字为什么要为2,大家先熟悉这张图了解一下先

更多中断知识的概念参考《手把手教你学51单片机》文档6.5节。

2.按键触发中断

我们每次要把P3.2和P3.3外部拉低或释放,都需要拔插杜邦线,这样太麻烦,我们可以用按键来取代这些拔插动作,按键按下不放就相当于一直拉低,跟杜邦线一直插着GND一个效果,松开按键就跟杜邦线没插GND一样。

可是P3.2和P3.3没有直接相连的按键,不过没关系,我们把杜邦线这样接,让P3.3和P2.3一起相连,K4的按键动作可以使P2.3和P3.3同步电平

我们要用到按键,所以别忘了初始化按键模块。#include

#include //详见第六章第8讲

void main()

{

IT1 = 1;   //下降沿触发模式

EX1 = 1;

EA  = 1;

LED_Init();//初始化LED硬件模块

KEY_Init();//初始化按键功能模块

while(1);

}

void EXTI1_IRQHandler() interrupt 2

{

LED2=!LED2;

}

3.去抖动

按键似乎没能很灵敏的按一下松手LED2就跳变一次亮或灭的效果,那是因为我们没有延时消抖,一个按键动作就存在好几个下降沿了,导致中断函数被执行了几遍。

在中断函数中加延时就可以消除这种失灵现象了,不过在以后编程里不能在中断函数里使用延时,这样会使程序的执行效率大打折扣,我们本次只是作为测试代码才在中断函数里用延时。#include

#include //详见第六章第8讲

void main()

{

IT1 = 1;   //下降沿触发模式

EX1 = 1;

EA  = 1;

LED_Init();//初始化LED硬件模块

KEY_Init();//初始化按键功能模块

while(1);

}

//请把P3.3和P2.3用杜邦线连接起来

void EXTI1_IRQHandler() interrupt 2

{

delay_ms(50);//去抖动

if(INT1==0)  //P3.3是否还处于低电平的稳定接触状态,INT1已在“#include ”中定义好了

{

LED2=!LED2;

}

}

这样就可以达到按下松手一次,LED2的状态只能取反一次的灵敏效果。如果我们一直按着不放,LED2也只是跳变一次而已,有点像不支持连按功能,这是因为“IT1=1;”的原因。

要是改为“IT1=0;”,这样K4按键就有种支持连按的感觉从而LED2就会不停闪烁了。按键按下一直不放就会不停地进入中断函数。#include

#include //详见第六章第8讲

void main()

{

IT1 = 0;   //低电平状态下触发

EX1 = 1;

EA  = 1;

LED_Init();//初始化LED硬件模块

KEY_Init();//初始化按键功能模块

while(1);

}

//请把P3.3和P2.3用杜邦线连接起来

void EXTI1_IRQHandler() interrupt 2

{

delay_ms(50);//去抖动

if(INT1==0)  //P3.3是否还处于低电平的稳定接触状态

{

LED2=!LED2;

}

}

c语言中断函数作用,进一步理解中断函数相关推荐

  1. C++工作笔记-对友元函数的进一步理解

    这里在GitHub上看redis相关的代码发现的.再次记录下. 友元的特点就是他是普通函数,并不是成员函数.他可以调用这个类的私有成员. 这里有个实际用法: 如上的redisAsyncCommand函 ...

  2. python关于函数作用的描述_Python函数的概念和使用

    函数 为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数. 可以这么说,对于任何的编程语言,函数都是一个非常重要的概念. python 不仅简化了函数的定义过程,而且还大量借鉴了其他函数 ...

  3. C++工作笔记-对纯虚函数的进一步理解(作用)

    对纯虚函数的理论不再说明. 本篇博文是为了说明他这个功能 代码如下: #include <iostream> #include <QString> #include <Q ...

  4. c语言fwrite函数作用,C 库函数 - fwrite()函数

    fwrite()函数是c语言标准库中的一个文件处理函数,fwrite库调用与fread有相似的接口,它从指定的数据缓冲区里取出数据记录,并把它们写到输出流中,它的返回值是成功写入的记录个数.它有什么作 ...

  5. 【深度学习框架】Tensorflow Session.run()函数的进一步理解

    在tensorflow中session.run()用来将数据传入计算图,计算并返回出给定变量/placeholder的结果. 在看论文代码的时候遇到一段复杂的feed_dict, 本文记录了对sess ...

  6. c语言怎么快速读出函数作用,读文件fread函数的用法

    与fwrite是一对,读文件的函数fread的函数原型如下:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) fread ...

  7. socket编程——进一步理解accept函数

    在前面的文章<TCP套接字编程--常用函数小结>中,我们分析了socket的常用函数,其他的函数,我们还比较容易理解,但是accept函数的意义容易被忽略.我们来总结下使用要点: 1)ac ...

  8. c语言rewind函数作用,C 文件 rewind() 函数

    C 文件 rewind() 函数 rewind()函数将文件指针设置在流的开头.如果必须多次使用流,这很有用. 语法: void rewind(FILE *stream) 文件:file.txtthi ...

  9. abs在c 语言中的作用是什么,abs()函数以及C ++中的示例

    C ++abs()函数 abs()函数是cmath标头的库函数,用于查找给定数字的绝对值,它接受一个数字并返回绝对值. 注意: abs()函数也在头文件中声明,但它与整数值兼容,在C ++ 11中,a ...

  10. C++工作笔记-对二级指针的进一步理解(函数的参数使用二级指针,从而操作原数据)

    二级指针不仅仅可以表示一个二维表(在邻接表里面用得比较多)! 当参数是一级指针的时候得到了是指向了同一个地址! 但参数是二级指针却有不同的效果! 如下代码: main.cpp #include< ...

最新文章

  1. LeetCode 860.柠檬水找零(C++)
  2. mysql 磁盘组_AIX使用LV创建ASM磁盘组
  3. IT人经常围观精品站点推荐
  4. 嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX
  5. 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]
  6. 【训练过程】1) Create Training File(创建训练文件)
  7. asp.net 开发知识小结【转】
  8. redis缓存失效及解决方案
  9. 【答辩问题】计算机专业本科毕业设计答辩自述2
  10. 在win7在结构cocos2d-x v3.2rc0开发环境(For Android)
  11. (转载)Memcached预定义常量
  12. 2T架构师学习资料干货分享
  13. 在Python里安装Jieba中文分词组件
  14. Multisim仿真—恒流源电路(二)
  15. ABBYY FineReader 15 安装教程
  16. Ansible9:变量之Fact
  17. MAC电脑DNS劫持解决方法
  18. 学习笔记(3):PS教程-【和东东一起学PS】Photoshop 2020小白到高手(任务驱动式基础+实战教学)-【免费试看】PS软件的必要首选项设置
  19. maven报错:Failed to execute goal on project ...: Could not resolve dependencies for project ...
  20. 华视电子web读取身份证信息

热门文章

  1. arcsin在matlab中怎么输,matlab arcsin
  2. react加水印_图片添加水印
  3. noi.openjudge 二分法求函数的零点
  4. [DirectShow] 033 - Using Windowed Mode
  5. 图像处理工具包实现应用图像效果
  6. 用迅雷打开php文件,迅雷下的php文件怎么打开啊?
  7. react全家桶指的是哪些?
  8. 小象学院知识图谱学习笔记(一)
  9. javascript当中onblur和onfocus用法
  10. vue项目中对于Scroll事件的节流优化