编写一段程序,使得数码管分别显示分、秒、1/100秒;开关S1、S2、S3、S4分别控制启动、暂停/继续、清零和退出功能。示波器显示定时周期信号,定时时长为10ms
时间: 2023-10-20 18:47:27 浏览: 173
数码管当秒表的程序
Sure! 以下是一个示例程序,使用数码管显示分、秒和1/100秒,并且通过按下S1、S2、S3、S4按钮来控制程序的功能。
```c
#include <LiquidCrystal.h>
// 初始化数码管
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// 定义全局变量
volatile int minutes = 0;
volatile int seconds = 0;
volatile int milliseconds = 0;
volatile bool isPaused = false;
volatile bool isReset = false;
volatile bool isExit = false;
// 中断服务程序,用于处理定时器中断
void timerInterrupt()
{
if (!isPaused && !isReset && !isExit) {
milliseconds += 10;
if (milliseconds >= 1000) {
milliseconds = 0;
seconds++;
if (seconds >= 60) {
seconds = 0;
minutes++;
}
}
}
}
// 设置中断,并初始化LCD
void setup()
{
lcd.begin(16, 2);
attachInterrupt(0, timerInterrupt, RISING); // 定时器中断连接到数字引脚0(对应Arduino UNO的2号引脚)
lcd.print("00:00:00");
}
// 主循环
void loop()
{
if (minutes < 10) {
lcd.setCursor(0, 0);
lcd.print("0");
lcd.print(minutes);
} else {
lcd.setCursor(0, 0);
lcd.print(minutes);
}
lcd.setCursor(2, 0);
lcd.print(":");
if (seconds < 10) {
lcd.setCursor(3, 0);
lcd.print("0");
lcd.print(seconds);
} else {
lcd.setCursor(3, 0);
lcd.print(seconds);
}
lcd.setCursor(5, 0);
lcd.print(":");
if (milliseconds < 100) {
lcd.setCursor(6, 0);
lcd.print("0");
if (milliseconds < 10) {
lcd.setCursor(7, 0);
lcd.print("0");
}
lcd.print(milliseconds);
} else {
lcd.setCursor(6, 0);
lcd.print(milliseconds);
}
// 检测按钮按下并执行相应操作
if (digitalRead(8) == HIGH) { // S1按钮
isPaused = !isPaused;
}
if (digitalRead(9) == HIGH) { // S2按钮
if (isPaused) {
isPaused = false;
} else {
isPaused = true;
}
}
if (digitalRead(10) == HIGH) { // S3按钮
isReset = true;
minutes = 0;
seconds = 0;
milliseconds = 0;
delay(100); // 延迟以避免不断重复清零
isReset = false;
}
if (digitalRead(11) == HIGH) { // S4按钮
isExit = true;
delay(100); // 延迟以避免不断重复退出
isExit = false;
}
}
```
请确保将数码管的引脚与Arduino开发板正确连接,并根据你的实际电路进行修改。此外,你还需要连接4个按钮到Arduino的数字引脚8、9、10和11,并使用上拉电阻将它们连接到5V电源。
这段程序使用中断来实现定时器功能,并通过按钮控制各种操作。数码管将显示当前的分、秒和1/100秒。按下S1按钮将启动/暂停计时器,按下S2按钮将暂停/继续计时器,按下S3按钮将清零计时器,按下S4按钮将退出程序。
希望这可以帮助到你!如果有任何问题,请随时问我。
阅读全文