arduino,用C语言完成代码∶ 实验内容∶利用按键开关K1产生INT.0中断请求信号,按一下K1,LED数码管显示“学号末位”,再按一下K1,该数码管熄灭。 硬件连接:1. 共阴极七段数码管连接。2. 使用1条杜邦线,一端连接开发板D2,另一端连接独立按键。
时间: 2024-11-15 22:27:12 浏览: 39
基于Arduino的嵌入式技术-LED灯实验代码-20230914.zip
Arduino是一种开源电子平台,主要用于微控制单元(MCU)项目,特别是通过简单的C语言编程。以下是使用Arduino Uno开发板实现您描述的实验步骤:
```c
// 包含必要的库文件
#include <LiquidCrystal.h> // 用于数码管操作
#include <PinChangeInt.h> // 用于中断处理
// 定义数码管的接线
const byte ROWS = 8;
const byte COLS = 4; // 如果是7-segment共阴极数码管
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // 连接到LCD的端口
int keyPin = 2; // K1连接到D2
PCInt keyInterrupt(keyPin, CHANGE); // 创建中断实例
char studentID[9]; // 假设学生ID最多9位字符
void setup() {
lcd.begin(COLS, ROWS);
pinMode(keyPin, INPUT_PULLUP); // 设置按键为上拉模式
attachInterrupt(digitalPinToInterrupt(keyPin), handleKeyPress, FALLING); // 触发下降沿
}
void loop() {
// 检查是否有中断发生
if (keyInterrupt.fired()) {
detachInterrupt(keyInterrupt); // 阻止干扰
delay(100); // 等待按键释放
// 当按下K1,读取并显示学生ID的末位
studentID[8] = '\0'; // 结束字符串
while (Serial.available()) { // 从串行接收数据
studentID[0] = Serial.read(); // 取得一位学生ID
if (studentID[0] == '\n') break; // 到达换行符停止
}
lcd.setCursor(0, 0);
lcd.print(studentID);
keyInterrupt.attach(); // 重新启用中断
}
}
void handleKeyPress() {
detachInterrupt(keyInterrupt); // 阻止干扰
lcd.clear();
keyInterrupt.detach(); // 关闭中断
}
```
阅读全文