使用protues联合arduino如何实现下列实验请给出代码定时器与数码管显示目的:掌握ARDUINO下的定时器使用方法数码管的驱动与显示方法内容:①利用定时器2产生精确的1秒并进行计时实现0-59的循环显示;连接2个数码管需要10个端口自己选择与分配如果不够可以考虑进行IO口扩展。
由于没有具体的数码管型号,下面的代码中使用了通用的数码管驱动方式,需要根据具体型号进行调整。
代码如下:
#include <MsTimer2.h>
// 数码管共阳极接口定义 #define DIGITAL_PIN_A 2 #define DIGITAL_PIN_B 3 #define DIGITAL_PIN_C 4 #define DIGITAL_PIN_D 5 #define DIGITAL_PIN_E 6 #define DIGITAL_PIN_F 7 #define DIGITAL_PIN_G 8 #define DIGITAL_PIN_DP 9
// 数码管显示数字定义 const byte DIGITAL_NUMBERS[] = { B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 B00000000, // 空 };
// 数码管显示变量定义 int digitalFirst = 0; int digitalSecond = 0;
// 定时器中断函数 void timerInterrupt() { // 每秒钟进1 digitalSecond++; if (digitalSecond >= 60) { digitalSecond = 0; digitalFirst++; if (digitalFirst >= 6) { digitalFirst = 0; } }
// 显示数字 digitalWrite(DIGITAL_PIN_DP, HIGH); digitalWrite(DIGITAL_PIN_A, (DIGITAL_NUMBERS[digitalFirst] & B10000000) != 0); digitalWrite(DIGITAL_PIN_B, (DIGITAL_NUMBERS[digitalFirst] & B01000000) != 0); digitalWrite(DIGITAL_PIN_C, (DIGITAL_NUMBERS[digitalFirst] & B00100000) != 0); digitalWrite(DIGITAL_PIN_D, (DIGITAL_NUMBERS[digitalFirst] & B00010000) != 0); digitalWrite(DIGITAL_PIN_E, (DIGITAL_NUMBERS[digitalFirst] & B00001000) != 0); digitalWrite(DIGITAL_PIN_F, (DIGITAL_NUMBERS[digitalFirst] & B00000100) != 0); digitalWrite(DIGITAL_PIN_G, (DIGITAL_NUMBERS[digitalFirst] & B00000010) != 0); delay(5); digitalWrite(DIGITAL_PIN_DP, LOW); digitalWrite(DIGITAL_PIN_A, (DIGITAL_NUMBERS[digitalSecond] & B10000000) != 0); digitalWrite(DIGITAL_PIN_B, (DIGITAL_NUMBERS[digitalSecond] & B01000000) != 0); digitalWrite(DIGITAL_PIN_C, (DIGITAL_NUMBERS[digitalSecond] & B00100000) != 0); digitalWrite(DIGITAL_PIN_D, (DIGITAL_NUMBERS[digitalSecond] & B00010000) != 0); digitalWrite(DIGITAL_PIN_E, (DIGITAL_NUMBERS[digitalSecond] & B00001000) != 0); digitalWrite(DIGITAL_PIN_F, (DIGITAL_NUMBERS[digitalSecond] & B00000100) != 0); digitalWrite(DIGITAL_PIN_G, (DIGITAL_NUMBERS[digitalSecond] & B00000010) != 0); }
void setup() { // 初始化定时器2,每1秒钟中断一次 MsTimer2::set(1000, timerInterrupt); MsTimer2::start();
// 初始化数码管接口 pinMode(DIGITAL_PIN_A, OUTPUT); pinMode(DIGITAL_PIN_B, OUTPUT); pinMode(DIGITAL_PIN_C, OUTPUT); pinMode(DIGITAL_PIN_D, OUTPUT); pinMode(DIGITAL_PIN_E, OUTPUT); pinMode(DIGITAL_PIN_F, OUTPUT); pinMode(DIGITAL_PIN_G, OUTPUT); pinMode(DIGITAL_PIN_DP, OUTPUT); }
void loop() { // 循环等待定时器中断
原文地址: https://www.cveoy.top/t/topic/eC8N 著作权归作者所有。请勿转载和采集!