用arduino做一个三位计数器用74HC595数码管显示
时间: 2024-06-12 20:06:05 浏览: 145
Arduino-74系列-165-595-EC11
首先,需要连接74HC595芯片和数码管。连接方式如下:
74HC595引脚连接方式:
1. SER(14号脚)连接arduino的数字输出引脚
2. SRCLK(11号脚)连接arduino的数字输出引脚
3. RCLK(12号脚)连接arduino的数字输出引脚
4. OE(13号脚)接地
5. Q0-Q7(15-22号脚)连接数码管的A-G位
数码管连接方式:
1. 三位数码管共阳极连接
2. 数码管的A-G位分别连接74HC595的Q0-Q7
接线完成后,在arduino IDE中编写程序。具体代码如下:
```
#include <ShiftRegister.h>
const int SER_Pin = 8; // 74HC595的SER引脚连接到Arduino的8号数字输出引脚
const int SRCLK_Pin = 9; // 74HC595的SRCLK引脚连接到Arduino的9号数字输出引脚
const int RCLK_Pin = 10; // 74HC595的RCLK引脚连接到Arduino的10号数字输出引脚
ShiftRegister shiftRegister(SER_Pin, SRCLK_Pin, RCLK_Pin);
int count = 0;
void setup() {
// 初始化数码管
shiftRegister.begin(3); // 三位数码管
shiftRegister.clear(); // 清空数据
}
void loop() {
// 计数器
count++;
if (count > 999) {
count = 0;
}
// 显示数码管
int digit1 = count / 100;
int digit2 = (count / 10) % 10;
int digit3 = count % 10;
// 显示百位
shiftRegister.set(2, digit1 == 0 ? 0x3F : (digit1 == 1 ? 0x06 : (digit1 == 2 ? 0x5B : (digit1 == 3 ? 0x4F : (digit1 == 4 ? 0x66 : (digit1 == 5 ? 0x6D : (digit1 == 6 ? 0x7D : (digit1 == 7 ? 0x07 : (digit1 == 8 ? 0x7F : 0x6F)))))))));
// 显示十位
shiftRegister.set(1, digit2 == 0 ? 0x3F : (digit2 == 1 ? 0x06 : (digit2 == 2 ? 0x5B : (digit2 == 3 ? 0x4F : (digit2 == 4 ? 0x66 : (digit2 == 5 ? 0x6D : (digit2 == 6 ? 0x7D : (digit2 == 7 ? 0x07 : (digit2 == 8 ? 0x7F : 0x6F)))))))));
// 显示个位
shiftRegister.set(0, digit3 == 0 ? 0x3F : (digit3 == 1 ? 0x06 : (digit3 == 2 ? 0x5B : (digit3 == 3 ? 0x4F : (digit3 == 4 ? 0x66 : (digit3 == 5 ? 0x6D : (digit3 == 6 ? 0x7D : (digit3 == 7 ? 0x07 : (digit3 == 8 ? 0x7F : 0x6F)))))))));
shiftRegister.write(); // 输出数据
delay(1000); // 延时1秒
}
```
在代码中,我们使用了ShiftRegister库来控制74HC595芯片。首先,在setup()函数中初始化数码管和74HC595芯片。然后,在loop()函数中实现计数器和数码管显示的逻辑。计数器的范围是0到999,当计数器超过999时,重置为0。然后,将计数器的百位、十位和个位分别提取出来,并使用if语句将它们转换为对应的数码管显示码。最后,将显示码写入74HC595芯片,并延时1秒。
上传代码到arduino板,即可看到三位数码管按照从0到999的顺序不断计数。
阅读全文