作业2数码管显示

张开发
2026/4/10 10:44:52 15 分钟阅读

分享文章

作业2数码管显示
文章目录图1数码管显示6个9图1效果图1代码图2数码管显示2个7一头一尾图2效果图2代码图3数码管轮播显示6位图3效果图3代码图4数码管轮播显示中间2位图4效果图4代码图56位数码管依次跑马显示数字1-6图5效果图5代码图66位依次显示数字13. 14. 15图6效果图6代码图1数码管显示6个9图1效果图1代码#includereg52.h// 51单片机头文件// 定义锁存器控制引脚sbit dulaP3^4;// 段选锁存器控制sbit welaP1^6;// 位选锁存器控制// 主函数voidmain(){// 1. 位选打开所有6个数码管wela1;// 打开位选锁存器P00xc0;// 1100 0000 → 选中全部6位数码管wela0;// 关闭位选锁存器// 2. 段选显示数字 9dula1;// 打开段选锁存器P00x6f;// 0x6f 是共阴极数码管 9 的段码dula0;// 关闭段选锁存器// 保持显示while(1);}图2数码管显示2个7一头一尾图2效果图2代码#includereg52.h// 头文件// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选开发板实际引脚sbit welaP1^6;// 锁存器U3位选开发板实际引脚// 主函数voidmain(){// 2. 段选控制dula1;// 打开段选P00x07;// 数码管显示0 0011 1111dula0;// 关闭段选// 1. 位选控制wela1;// 打开位选P00xde;// 位选2个数码管 第一个和第六个wela0;// 关闭位选// 3. 保持while(1);}图3数码管轮播显示6位图3效果图3代码#includereg52.h// 头文件#defineucharunsignedchar#defineuintunsignedint// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选sbit welaP1^6;// 锁存器U3位选// 共阴极数码管段码表uchar code seg_code[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 延时函数voiddelay(uint ms){uint i,j;for(ims;i0;i--)for(j110;j0;j--);}// 数码管展示函数voiddisplay_digit(uchar digit){P0seg_code[digit];// 发送数字对应的段码dula1;// 打开段选delay(5);// 稳定信号dula0;// 关闭段选}// 主函数voidmain(){uchar digit;while(1){// 1.位选控制wela1;// 打开位选P00xc0;// 位选6个数码管 1100 0000wela0;// 关闭位选// 2.段选控制for(digit0;digit10;digit)// 轮流显示0到9{display_digit(digit);// 显示当前数字delay(500);// 适当延时以便观察每个数字// 补充代码}}}图4数码管轮播显示中间2位图4效果图4代码#includereg52.h// 头文件#defineucharunsignedchar#defineuintunsignedint// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选sbit welaP1^6;// 锁存器U3位选// 共阴极数码管段码表uchar code seg_code[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 延时函数voiddelay(uint ms){uint i,j;for(ims;i0;i--)for(j110;j0;j--);}// 数码管展示函数voiddisplay_digit(uchar digit){P0seg_code[digit];// 发送数字对应的段码dula1;// 打开段选delay(5);// 稳定信号dula0;// 关闭段选}// 主函数voidmain(){uchar digit;while(1){// 1.位选控制wela1;// 打开位选P00x33;// 位选6个数码管 1100 0000wela0;// 关闭位选// 2.段选控制for(digit0;digit10;digit)// 轮流显示0到9{display_digit(digit);// 显示当前数字delay(500);// 适当延时以便观察每个数字// 补充代码}}}图56位数码管依次跑马显示数字1-6图5效果图5代码#includereg52.h// 51单片机头文件#defineucharunsignedchar#defineuintunsignedint// 定义锁存器控制引脚sbit dulaP3^4;// 段选锁存器控制端sbit welaP1^6;// 位选锁存器控制端// 共阴极数码管段码表0-9uchar code TableDula[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// ?? 补全数码管位选码表6位数码管低电平选中uchar code TableWela[]{0xFE,// 1111 1110 → 选中第1位数码管0xFD,// 1111 1101 → 选中第2位数码管0xFB,// 1111 1011 → 选中第3位数码管0xF7,// 1111 0111 → 选中第4位数码管0xEF,// 1110 1111 → 选中第5位数码管0xDF// 1101 1111 → 选中第6位数码管};// 软件延时函数voiddelay(uchar x){uchar j;while(x--){for(j0;j125;j);}}// 主函数6位数码管动态扫描显示 0、1、2、3、4、5voidmain(){uchar i;while(1){// 无限循环刷新for(i0;i6;i){// 依次扫描6位数码管P00x00;// 清空端口消除残影dula0;wela0;P0TableWela[i];// 输出位选码选中当前数码管wela1;// 锁存位选信号wela0;P0TableDula[i1];// 输出段选码显示对应数字dula1;// 锁存段选信号dula0;delay(200);// 延时保持人眼视觉暂留}}}图66位依次显示数字13. 14. 15图6效果图6代码#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbit dulaP3^4;// 段选锁存器sbit welaP1^6;// 位选锁存器// 数码管的段码表0~9不带小数点uchar code TableDula[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 数码管段码表0~9带小数点共阴极在原段码上加上0x80uchar 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位0xfd,// 1111 1101 - 第2位0xfb,// 1111 1011 - 第3位0xf7,// 1111 0111 - 第4位0xef,// 1110 1111 - 第5位0xdf// 1101 1111 - 第6位};// 延时函数voiddelay(uchar x){uchar j;while(x--){for(j0;j125;j);}}voidmain(){uchar i;// 显示数据对应 1, 3, 1, 4, 1, 5uchar displayData[6]{1,3,1,4,1,5};// 小数点标志位1表示该位需要显示小数点// 第2位显示3.第4位显示4.其余位无小数点uchar pointFlag[6]{0,1,0,1,0,0};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);// 动态扫描延时保持亮度}}}

更多文章