(toc)效果图代码1#includereg52.h// 定义锁存器控制引脚和你电路完全对应sbit dula P3^4; // 段选锁存器LE引脚sbit wela P1^6; // 位选锁存器LE引脚void main(){// 位选只选中最右侧3位数码管 wela 1; // 打开位选锁存器允许写入位选数据// 二进制0000 0111 → 十六进制 0x07// 对应P0.0/P0.1/P0.2为高选中最右侧3位其余3位熄灭P0 0x07;wela 0; // 锁存位选数据保持3位选中// 段选输出数字9的段码 dula 1; // 打开段选锁存器允许写入段码 P0 0x6F; // 共阴数码管9的正确段码二进制 0110 1111 dula 0; // 锁存段码保持显示9 while(1); // 死循环保持显示}代码2#includereg52.hsbit dula P3^4;sbit wela P1^6;void main(){// 位选只亮第1个和最后1个wela 1;P0 0x21; // 二进制 0010 0001 → 第0位、第5位亮wela 0;// 段选显示数字7 dula 1; P0 0x07; // 共阴7的段码 dula 0; while(1);}代码3#include reg52.hsbit P1_SEG P1^6; // 段选控制位选sbit P1_DULA P1^7; // 段选控制段码void main(){// -------- 第一步点亮第一个最左边 --------P1_SEG 1; // 选中第一个P1_DULA 1; // 段选打开P0 0x07; // 显示数字 7P1_DULA 0;P1_SEG 0;// -------- 第二步点亮最后一个最右边 -------- P1_SEG 5; // 选中第5个最后一个 P1_DULA 1; // 段选打开 P0 0x07; // 显示数字 7 P1_DULA 0; P1_SEG 0; while(1);}代码4#includereg52.h// 锁存器控制引脚sbit dulaP3^4; // 段选锁存sbit welaP1^6; // 位选锁存// 共阴极数码管段码#define NUM_7 0x07 // 数字7的段码共阴极a b c d e f g dp 0 1 1 1 0 0 0 0 0x07void main(){// 选中第1位和第6位数码管wela 1;P0 0x1E; // 00011110选中两端wela 0;// 输出数字7的段码 dula 1; P0 NUM_7; // 显示数字 7 dula 0; // 保持显示 while(1);}代码5#includereg52.h// 定义锁存器控制引脚sbit dulaP3^4;sbit welaP1^6;// 主函数void main(){// 位选打开6位数码管wela1;P00xC0; // 选中6位wela0;// 段选显示数字1 dula1; P00x6F; // 共阴数码管 9的段码 dula0; while(1);}代码6#includereg52.h // 头文件#define uchar unsigned char#define uint unsigned int// 定义锁存器控制引脚sbit dulaP3^4; // 锁存器U2段选sbit welaP1^6; // 锁存器U3位选// 共阴极数码管段码表 0-9uchar code seg_code[] {0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F // 9};// 延时函数void delay(uint ms) {uint i, j;for(i ms; i 0; i–)for(j 110; j 0; j–);}// 数码管展示函数void display_digit(uchar digit) {P0 seg_code[digit]; // 发送数字对应的段码dula1; // 打开段选锁存delay(1);dula0; // 关闭段选锁存}// 主函数void main(){uchar digit;while(1){// 关键修改 // 只点亮 第3位 第4位 数码管wela1;P00x33; // 0011 0011 → 仅第3、4位亮wela0;// // 0~9 循环轮播 for(digit 0; digit 10; digit) { display_digit(digit); delay(500); } }}代码7#include reg52.h#define uchar unsigned char#define uint unsigned intsbit dula P3^4; // 段选锁存器sbit wela P1^6; // 位选锁存器// 数码管的段码表0~9uchar code TableDula[] {0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F // 9};// 带小数点段码表已补全uchar code TableDulaPoint[] {0xBF, // 0.0x86, // 1.0xDB, // 2.0xCF, // 3.0xE6, // 4.0xED, // 5.0xFD, // 6.0x87, // 7.0xFF, // 8.0xEF // 9.};// 6位数码管位选uchar code TableWela[] {0xfe, // 第1位0xfd, // 第2位0xfb, // 第3位0xf7, // 第4位0xef, // 第5位0xdf // 第6位};// 延时函数void delay(uchar x){uchar j;while(x–){for(j 0; j 125; j);}}void main() {uchar i;// 显示 13.14.15 uchar displayData[6] {1, 3, 1, 4, 1, 5}; // 1 3 1 4 1 5 uchar pointFlag[6] {0, 1, 0, 1, 0, 0}; // 第2位、第4位带小数点 // while(1) { for(i 0; i 6; i) { P0 0x00; dula 0; wela 0; P0 TableWela[i]; wela 1; wela 0; if(pointFlag[i] 1) P0 TableDulaPoint[displayData[i]]; else P0 TableDula[displayData[i]]; dula 1; dula 0; delay(2); } }}代码8#include reg52.h#define uchar unsigned char#define uint unsigned intsbit dula P3^4; // 段选锁存器sbit wela P1^6; // 位选锁存器// 数码管的段码表0~9uchar code TableDula[] {0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F // 9};// 数码管段码表0~9带小数点✅ 已补全uchar code TableDulaPoint[] {0xBF, // 0.0x86, // 1. 100001100xDB, // 2. 110110110xCF, // 3. 110011110xE6, // 4. 111001100xED, // 5. 111011010xFD, // 6. 111111010x87, // 7. 100001110xFF, // 8. 111111110xEF // 9. 11101111};// 数码管显示位码对应第1到第6个数码管uchar code TableWela[] {0xfe, // 第1位0xfd, // 第2位0xfb, // 第3位0xf7, // 第4位0xef, // 第5位0xdf // 第6位};// 延时函数void delay(uchar x){uchar j;while(x–){for(j 0; j 125; j);}}void main() {uchar i;// 显示数据对应的数字内容 uchar displayData[6] {1, 1, 1, 2, 1, 3}; // 小数点标志位1表示该位需要小数点 uchar pointFlag[6] {0, 1, 0, 1, 0, 0}; // 第2位和第4位显示带小数点 while(1) { for(i 0; i 6; i) { P0 0x00; // 清除显示 dula 0; wela 0; // 位选 P0 TableWela[i]; wela 1; wela 0; // 段码判断是否需要小数点 if(pointFlag[i] 1) { P0 TableDulaPoint[displayData[i]]; } else { P0 TableDula[displayData[i]]; } dula 1; dula 0; delay(2); // 稍作延时 } }}