下列实验如何进行请给出十分详细的步骤定时器与数码管显示目的:掌握ARDUINO下的定时器使用方法数码管的驱动与显示方法内容:①利用定时器2产生精确的1秒并进行计时实现0-59的循环显示;连接2个数码管需要10个端口自己选择与分配如果不够可以考虑进行IO口扩展
步骤:
-
准备材料和工具,包括ARDUINO开发板、面包板、数码管、电阻、杜邦线等。
-
将数码管连接至面包板,根据数码管引脚的不同,将其与ARDUINO开发板上的数字口或模拟口相连接。如果需要进行IO口扩展,则需使用扩展板连接至ARDUINO开发板。
-
根据数码管的接口特点,为其设置正确的电阻,以保证显示效果。
-
在ARDUINO开发板上编写程序,利用定时器2产生1秒的精确时间,实现0-59的循环显示。程序示例:
#include <TimerOne.h> //调用定时器库
int digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; //定义数码管引脚
int digitNums[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8}; //定义数码管显示数字
int digitVal[] = {0, 0}; //定义数码管显示的数字值
int curDigit = 0; //当前显示的数码管
void setup() {
for (int i = 0; i < 8; i++) { //循环设置数字口为输出
pinMode(digitPins[i], OUTPUT);
}
Timer1.initialize(1000000); //初始化定时器,设置时间为1秒
Timer1.attachInterrupt(timerIsr); //设置定时器中断
}
void loop() {
digitalWrite(digitPins[curDigit], LOW); //关闭当前数码管
curDigit++; //转到下一个数码管
if (curDigit >= 2) { //当所有数码管都已显示完后,重新开始
curDigit = 0;
}
digitalWrite(digitPins[curDigit], HIGH); //打开下一个数码管
displayDigit(digitVal[curDigit]); //显示下一个数码管的值
}
void timerIsr() { //定时器中断处理函数
digitVal[0]++; //每秒钟增加1
if (digitVal[0] >= 60) { //当数值达到59时,重新开始
digitVal[0] = 0;
}
digitVal[1] = digitVal[0] / 10; //计算十位数
digitVal[0] %= 10; //计算个位数
}
void displayDigit(int num) { //显示数字函数
for (int i = 0; i < 8; i++) { //循环设置数码管引脚
digitalWrite(digitPins[i], (digitNums[num] & (1 << i)) ? LOW : HIGH);
}
}
-
上传程序至ARDUINO开发板,并将其与电源连接。程序将自动运行,实现定时器与数码管的显示功能。
-
如果程序运行不正常,可以通过串口输出调试信息,以定位并解决问题
原文地址: https://www.cveoy.top/t/topic/eCuB 著作权归作者所有。请勿转载和采集!