硬件连接:

按键连接:

将一个按键连接到外部中断引脚2上,另外两个按键分别连接到引脚2和3上。

LED连接:

选择5个数字口,将它们连接到5个LED灯的正极,将LED灯的负极连接到GND。

串口连接:

使用USB线将Arduino板连接到计算机上,打开Arduino IDE,选择正确的串口和开发板类型。

代码实现:

首先需要设置引脚模式和串口通行的波特率等信息。在setup()函数中进行初始化:

void setup() { //设置引脚模式 pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); //初始化串口通行 Serial.begin(9600); //设置外部中断 attachInterrupt(digitalPinToInterrupt(2), interruptHandler, FALLING); }

其中,输入引脚2和3需要使用上拉电阻,因此使用INPUT_PULLUP模式。输出引脚4~8需要设置为OUTPUT模式。在初始化串口通行时,设置波特率为9600,即Serial.begin(9600)。同时,也需要设置一个外部中断,当引脚2的电平从高电平变为低电平时,触发中断并执行interruptHandler()函数。

接下来,需要实现interruptHandler()函数,用于处理按键中断。在该函数中,需要记录按键次数,然后通过串口输出:

volatile int keyCount = 0; //用于记录按键次数,volatile定义为全局变量 void interruptHandler() { keyCount++; Serial.println(keyCount); }

其中,keyCount使用volatile关键字定义为全局变量,以便在中断函数和主循环中使用。中断函数直接将keyCount加1,并通过Serial.println()函数将按键次数输出到串口。

最后,在主循环中,需要实现将按键次数转化为二进制数,并控制LED点亮。将引脚2和3记录的按键次数转化为十进制数,然后使用bitRead()函数将该数转化为五位二进制数。最后,根据二进制数控制对应的LED灯亮灭,并通过Serial.print()函数将二进制数输出到串口。

void loop() { int num1 = keyCount / 10; int num2 = keyCount % 10; int binNum = (num1 << 1) | num2; //转化为二进制数 digitalWrite(4, bitRead(binNum, 0)); digitalWrite(5, bitRead(binNum, 1)); digitalWrite(6, bitRead(binNum, 2)); digitalWrite(7, bitRead(binNum, 3)); digitalWrite(8, bitRead(binNum, 4)); delay(100); //延时一段时间 Serial.print("二进制数:"); Serial.println(binNum, BIN); //输出二进制数到串口 }

完整代码如下

外部中断与串口通行实验目的:掌握 ARDUINO 的外部中断引脚有哪些串行通行的接口是哪几个引脚 这在硬件层面上的应用很重要。掌握外部中断的触发与回调函数串口通行的启动等。内容:①连接 1 个按键至外部中断引脚 2 上ARDUINO 记录按键次数采用中断方式非查询方式并通过串口打印按键次数;②连接 2 个按键至外部中断引脚 23 上同时自己选取其它的 5 个端口接 5 个 LED;以 2 号引脚按

原文地址: https://www.cveoy.top/t/topic/eiEQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录