文章目录1.数码管显示6个91.1效果展示1.2代码显示2.数码管显示2个7一头一尾2.1效果展示2.2代码显示3.数码管轮播显示6位3.1效果展示3.2代码显示4.数码管轮播显示两位4.1效果展示4.2代码显示5.数码管跑马灯5.1效果展示5.2代码显示6.小数点数码管6.1效果展示6.2代码显示1.数码管显示6个91.1效果展示1.2代码显示在这里插入代码片在这里插入代码片#includereg52.h// 头文件// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选sbit welaP1^6;// 锁存器U2位选// 主函数voidmain(){// 1.位选控制wela1;// 打开位选P00x00;// 选中全部6个数码管wela0;// 关闭位选// 2.段选控制dula1;// 打开段选P00x6F;// 数码管显示“9” 0110 1111dula0;// 关闭段选// 3.保持while(1);}2.数码管显示2个7一头一尾2.1效果展示2.2代码显示#includereg52.h// 头文件// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选开发板实际引脚sbit welaP1^6;// 锁存器U3位选开发板实际引脚// 主函数voidmain(){// 2.段选控制dula1;// 打开段选// P00x3f; // 数码管显示0 0011 1111// 数码管显示1 0000 0110 P00x06P00x07;dula0;// 关闭段选// 1.位选控制wela1;// 打开位选P00xDE;// 位选3个数码管 1111 1000// P00xde; // 位选6个数码管 1100 0000wela0;// 关闭位选// 3.保持while(1);}3.数码管轮播显示6位3.1效果展示3.2代码显示#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbit dulaP3^4;// 段锁存你代码里的定义仿真图一致sbit welaP1^6;// 位锁存你代码里的定义仿真图一致uchar code seg_code[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};uchar code bit_code[]{0xFE,// 第1位最左对应数码管10xFD,// 第2位数码管20xFB,// 第3位数码管30xF7,// 第4位数码管40xEF,// 第5位数码管50xDF// 第6位最右对应数码管6};voiddelay(uint ms){uint i,j;for(ims;i0;i--)for(j110;j0;j--);}voiddisplay(uchar pos,uchar num){wela1;P00xFF;// 位选全1所有位熄灭wela0;// 步骤2发送段码dula1;P0seg_code[num];// 发送数字对应的段码dula0;// 锁存段码// 步骤3选通目标位wela1;P0bit_code[pos];// 选通第pos位wela0;// 锁存位选delay(1);// 延时保持视觉暂留}voidmain(){uchar current_num1;// 从1开始轮播uint cnt0;// 计数器控制切换速度while(1){display(0,current_num);display(1,current_num);display(2,current_num);display(3,current_num);display(4,current_num);display(5,current_num);cnt;if(cnt200)cnt0;current_num;if(current_num9){// 到9回到1循环current_num1;}}}}4.数码管轮播显示两位4.1效果展示4.2代码显示#includereg52.h#defineucharunsignedchar#defineuintunsignedint// 锁存器引脚完全匹配你的电路sbit dulaP3^4;// 段选锁存U2sbit welaP1^6;// 位选锁存U3// 共阴极数码管段码表 0-9uchar code TableDula[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 6位位选码左→右1第1位6第6位低电平点亮// 中间两位对应索引2第3位、3第4位uchar code TableWela[]{0xFE,// 第1位最左0xFD,// 第2位0xFB,// 第3位中间左0xF7,// 第4位中间右0xEF,// 第5位0xDF// 第6位最右};// 延时函数voiddelay(uint ms){uint i,j;for(ims;i0;i--)for(j110;j0;j--);}voidmain(){uchar num1;// 轮播数字从1开始uint cnt0;// 切换速度计数器while(1){// 刷新中间第3位索引2 // 1. 关闭所有位消鬼影wela1;P00xFF;wela0;// 2. 发送段码dula1;P0TableDula[num];dula0;// 3. 选通第3位wela1;P0TableWela[2];wela0;delay(1);// 延时保持// 刷新中间第4位索引3 // 1. 关闭所有位消鬼影wela1;P00xFF;wela0;// 2. 发送段码dula1;P0TableDula[num];dula0;// 3. 选通第4位wela1;P0TableWela[3];wela0;delay(1);// 延时保持// 控制轮播速度 cnt;if(cnt400){// 每400次刷新切换一次数字约1秒可调cnt0;num;if(num9){// 到9回到1循环num1;}}}}5.数码管跑马灯5.1效果展示5.2代码显示#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbit dulaP3^4;sbit welaP1^6;uchar code TableDula[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};uchar code TableWela[]{0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};voiddelay(uint ms){uint i,j;for(ims;i0;i--)for(j110;j0;j--);}voidmain(){uchar i;while(1){// 左 → 右 依次显示 1 2 3 4 5 6for(i0;i6;i){// 关闭所有位wela1;P00xFF;wela0;// 第i位 显示 i11、2、3、4、5、6dula1;P0TableDula[i1];dula0;// 选中当前位wela1;P0TableWela[i];wela0;delay(300);// 速度可调}}}6.小数点数码管6.1效果展示6.2代码显示#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbit dulaP3^4;// 段选锁存器sbit welaP1^6;// 位选锁存器// 数码管的段码表0~9uchar code TableDula[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 数码管段码表0~9带小数点uchar code TableDulaPoint[]{0xBF,// 0. 101111110x86,// 1. 100001100xDB,// 2. 110110110xCF,// 3. 110011110xE6,// 4. 111001100xED,// 5. 111011010xFD,// 6. 111111010x87,// 7. 100001110xFF,// 8. 111111110xEF// 9. 11101111};// 数码管显示位码对应第1到第6个数码管uchar code TableWela[]{0xfe,// 1111 1110 - 第1位P0.0 置低其它为高 选中第1位数码管0xfd,// 1111 1101 - 第2位P0.1 置低 选中第2位数码管0xfb,// 1111 1011 - 第3位P0.2 置低 选中第3位数码管0xf7,// 1111 0111 - 第4位P0.3 置低 选中第4位数码管0xef,// 1110 1111 - 第5位P0.4 置低 选中第5位数码管0xdf// 1101 1111 - 第6位P0.5 置低 选中第6位数码管};// 延时函数voiddelay(uchar x){uchar j;while(x--){for(j0;j125;j);}}voidmain(){uchar i;// 显示数据对应的数字内容uchar displayData[6]{1,3,1,4,1,5};// 小数点标志位1表示该位需要小数点uchar pointFlag[6]{0,1,0,1,0,0};// 第2位和第4位显示带小数点while(1){for(i0;i6;i){P00x00;// 清除显示dula0;wela0;// 位选P0TableWela[i];wela1;wela0;// 段码判断是否需要小数点if(pointFlag[i]1){P0TableDulaPoint[displayData[i]];}else{P0TableDula[displayData[i]];}dula1;dula0;delay(2);// 稍作延时}}}