硬件准备
4位数码管:1 个
1K欧电阻:4个
杜邦线:12根
面包板:1块
硬件连线
1、用1K欧电阻分别接到数码管的位引脚
2、将数码管的12个引脚接到开发板上
软件程序
//静态程序(静态显示1234)
const char num_array[10] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; //数字0~9
const char Temp[4] = { 0xF9, 0xA4, 0xB0, 0x99 }; //缓冲数组,1~4
int val = 0; //位变量
/*引脚*/
const char seg_pins[4] = { 13, 7, 5, 2 }; //位
const char led_pins[8] = { 11, 3, 6, 10, 12, 9, 4 }; //段
/*函数声明*/
void Init();
void display();
void setup() {
Serial.begin(9600);
for (int i; i < 4; i++) {
pinMode(seg_pins[i], OUTPUT);
}
for (int i; i < 8; i++) {
pinMode(led_pins[i], OUTPUT);
}
}
void loop() {
Init();
display();
}
/*初始化*/
void Init() {
for (int i = 0; i < 4; i++) {
digitalWrite(seg_pins[i], LOW);
}
for (int i = 0; i < 8; i++) {
digitalWrite(led_pins[i], LOW);
}
}
void display() {
for (val = 0; val < 4; val++) {
digitalWrite(seg_pins[val], HIGH);
for (int i = 0; i < 8; i++) {
digitalWrite(led_pins[i], bitRead(Temp[val],i));
}
delay(5);
digitalWrite(seg_pins[val], LOW);
}
}
//动态程序
const char num_array[10] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; //数字0~9
unsigned char displayTemp[4]; //缓冲数组
/*引脚*/
const char seg_pins[4] = { 13, 7, 5, 2 }; //位
const char led_pins[8] = { 11, 3, 6, 10, 12, 9, 4 }; //段
/*函数声明*/
void Init();
void GetFigure(int time);
unsigned int time_val = 0; //时间变量
unsigned int cnt = 0;//延时变量
void setup() {
Serial.begin(9600);
for (int i; i < 4; i++) {
pinMode(seg_pins[i], OUTPUT);
}
for (int i; i < 8; i++) {
pinMode(led_pins[i], OUTPUT);
}
}
void loop() {
Init(); //初始化
GetFigure(time_val); //获得数码管数字
Display(); //显示数字
cnt++;
if (cnt > 4) {
time_val++;
cnt = 0;
}
if (time_val > 9999){
time_val = 0;
}
}
/*初始化*/
void Init() {
for (int i = 0; i < 4; i++) {
digitalWrite(seg_pins[i], LOW);
}
for (int i = 0; i < 8; i++) {
digitalWrite(led_pins[i], LOW);
}
}
void GetFigure(int time) {
displayTemp[0] = num_array[time / 1000 ];
displayTemp[1] = num_array[ time % 1000 / 100];
displayTemp[2] = num_array[time % 100 / 10];
displayTemp[3] = num_array[time % 10];
}
void Display() {
for (int i = 0; i < 4; i++) {
digitalWrite(seg_pins[i], HIGH);
for (int j = 0; j < 8; j++) {
digitalWrite(led_pins[j], bitRead(displayTemp[i], j));
}
delay(5);
digitalWrite(seg_pins[i], LOW);
}
}
产品展示视频
上电后四位数码管静态显示1234
【Arduino22】静态显示1234
上电显示0000,然后每次加1,最后加到9999后回到0000
【Arduino22】动态显示9999
总结
通过本次实验,我熟悉了1位数码管和4位数码管的使用,并学会了 bitRead() 函数的使用。