步骤:

  1. 准备材料和工具,包括ARDUINO开发板、面包板、数码管、电阻、杜邦线等。

  2. 将数码管连接至面包板,根据数码管引脚的不同,将其与ARDUINO开发板上的数字口或模拟口相连接。如果需要进行IO口扩展,则需使用扩展板连接至ARDUINO开发板。

  3. 根据数码管的接口特点,为其设置正确的电阻,以保证显示效果。

  4. 在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);
  }
}
  1. 上传程序至ARDUINO开发板,并将其与电源连接。程序将自动运行,实现定时器与数码管的显示功能。

  2. 如果程序运行不正常,可以通过串口输出调试信息,以定位并解决问题

下列实验如何进行请给出十分详细的步骤定时器与数码管显示目的:掌握ARDUINO下的定时器使用方法数码管的驱动与显示方法内容:①利用定时器2产生精确的1秒并进行计时实现0-59的循环显示;连接2个数码管需要10个端口自己选择与分配如果不够可以考虑进行IO口扩展

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

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