按发光二极管单元连接方式分为共阳型数码管和共阴型数码管,
区分:1、可通过查看数码管引脚类型
2、观察数码管点亮状态
3、查询数码管规格表
是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管
是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管
清屏函数即与平时的状态相反
- //清屏函数
- for (int i=0;i<4;i++) {
- digitalWrite(seg_array[i], HIGH);//位选线引脚高电平,不亮
- }
-
- for (int i=0;i<8;i++){
- digitalWrite(led_array[i], LOW);//段选线引脚低电平,不亮
- }
循环将位选线引脚的电平设置为 digitalWrite(seg_array[i], HIGH),将所有位选线引脚都设置为高电平,确保不会选中任何数码管。
循环将段选线引脚的电平设置为低电平,即 digitalWrite(led_array[i], LOW),确保所有数码管的段选线都不会点亮
通过执行这两个循环,可以将数码管清空,使其不显示任何数字。这样在之后的操作中,就可以根据需要选择特定的位选线和段选线的电平,以显示指定的数字。
定义段选线引脚和位选线引脚
- // 定义位选线引脚
- int seg_1 = 5;
- int seg_2 = 18;
- int seg_3 = 19;
- int seg_4 = 21;
-
- // 定义位选线数组;
- int seg_array[4] = {seg_1, seg_2, seg_3, seg_4};
- // 定义段选线引脚
- int a = 32;
- int b = 25;
- int c = 27;
- int d = 12;
- int e = 13;
- int f = 33;
- int g = 26;
- int dp = 14;
-
- // 定义段选线数组
- int led_array[8] = {a, b, c, d, e, f, g, dp};
-
- // 定义共阴极数码管不同数字对应逻辑电平的二维数组
- int logic_array[10][8] = {
- //a, b, c, d, e, f, g, dp
- {1, 1, 1, 1, 1, 1, 0, 0}, // 0
- {0, 1, 1, 0, 0, 0, 0, 0}, // 1
- {1, 1, 0, 1, 1, 0, 1, 0}, // 2
- {1, 1, 1, 1, 0, 0, 1, 0}, // 3
- {0, 1, 1, 0, 0, 1, 1, 0}, // 4
- {1, 0, 1, 1, 0, 1, 1, 0}, // 5
- {1, 0, 1, 1, 1, 1, 1, 0}, // 6
- {1, 1, 1, 0, 0, 0, 0, 0}, // 7
- {1, 1, 1, 1, 1, 1, 1, 0}, // 8
- {1, 1, 1, 1, 0, 1, 1, 0}, // 9
- };
显示数字之前应该先判断选择哪个数码管
- // 4 位数码管显示函数
- void display_4_number(int number) {
- // 把输入的数字转化为 4 位数的数组
- if (number < 10000){
- // 获取每一位对应的数字
- /*
- 4567
- 4567 % 10 = 7
- 4567 / 10 = 456
- 456 % 10 = 6
- 456 / 10 = 45
- 45 % 10 = 5
- 45 / 10 = 4
- 4 % 10 = 4
-
- 1
- 1 % 10 = 1
- 1 / 10 = 0
-
- */
- // 定义格式化数组
- int number_array[4];
-
- // 使用循环获取数组元素
- for (int i=3;i>=0;i--) {
- number_array[i] = number % 10;
- number /= 10;
- }
-
- // 显示 4 位数字
- for (int i=0;i<4;i++) {
- display_number(i, number_array[i]);
- delay(5);
- }
- }
- }
判断位选线之后判断段选线引脚,
-
- // 显示数字的函数
- void display_number(int order, int number) {
-
- // 清屏
- clear();
-
- // 把对应位选线的电平拉低
- digitalWrite(seg_array[order], LOW);//定义位选线
-
- // 显示数字
- for (int i=0;i<8;i++) {
- digitalWrite(led_array[i], logic_array[number][i]);//段选线数组和数字电平
- }
- }