作业二6位数码管显示
文章目录1.效果图:显示6个91.代码2.效果图第1、6位显示72.代码3.效果图6位0到9轮流显示3.代码4.效果图中间两位0到9轮流显示4.代码5.效果图显示1234565.代码6.效果图显示1,3.,1,4.,1,56.代码1.效果图:显示6个91.代码#includereg52.h// 头文件// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选sbit welaP1^6;// 锁存器U2位选// 主函数voidmain(){// 1.位选控制wela1;// 打开位选P00xc0;// 位选6个数码管 1100 0000wela0;// 关闭位选// 2.段选控制dula1;// 打开段选P00x6f;// 数码管显示“9”dula0;// 关闭段选// 3.保持while(1);}2.效果图第1、6位显示72.代码#includereg52.h// 头文件// 定义锁存器控制引脚sbit dulaP3^4;// 锁存器U2段选sbit welaP1^6;// 锁存器U2位选// 主函数voidmain(){// 1.位选控制wela1;// 打开位选P00xde;// 位选第1、6个数码管 1101 1110wela0;// 关闭位选// 2.段选控制dula1;// 打开段选P00x07;// 数码管显示“7”dula0;// 关闭段选// 3.保持while(1);}3.效果图6位0到9轮流显示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.效果图中间两位0到9轮流显示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;// 打开位选P00xf3;// 位选中间2个数码管 1111 0011wela0;// 关闭位选// 2.段选控制for(digit0;digit10;digit)// 轮流显示0到9{display_digit(digit);// 显示当前数字delay(500);// 适当延时以便观察每个数字// 补充代码}}}5.效果图显示1234565.代码#includereg52.h// 头文件 c#defineucharunsignedchar#defineuintunsignedint// 定义锁存器控制引脚sbit dulaP3^4;// 段选锁存器U2sbit welaP1^6;// 位选锁存器U3// 数码管的段码表(定义0-9的段码)uchar code TableDula[]{//0x3F, // 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 数码管显示位码对应第1到第6个数码管需要将2进制转换成16进制uchar code TableWela[]{0xFE,// 1111 1110 - 第1位数码管P0.0 低电平0xFD,// 1111 1101 - 第2位数码管P0.1 低电平0xFB,// 1111 1011 - 第3位数码管P0.2 低电平0xF7,// 1111 0111 - 第4位数码管P0.3 低电平0xEF,// 1110 1111 - 第5位数码管P0.4 低电平0xDF// 1101 1111 - 第6位数码管P0.5 低电平// 补充代码// 1111 1110 - 第1位P0.0 置低其它为高 选中第1位数码管// 1111 1101 - 第2位P0.1 置低 选中第2位数码管// 1111 1011 - 第3位P0.2 置低 选中第3位数码管// 1111 0111 - 第4位P0.3 置低 选中第4位数码管// 1110 1111 - 第5位P0.4 置低 选中第5位数码管// 1101 1111 - 第6位P0.5 置低 选中第6位数码管};// 延时函数voiddelay(uchar x){uchar j;while(x--){for(j0;j125;j);}}// 主函数voidmain(){uchar i;while(1){for(i0;i6;i){P00x00;// 清空之前的输出dula0;wela0;P0TableWela[i];// 先送位码依次选中1-6位数码管wela1;// 锁存位码wela0;P0TableDula[i];// 再送段码第1个数码管显示0第2个数码管显示1...dula1;// 锁存段码dula0;delay(2);// 保持一段时间}}}6.效果图显示1,3.,1,4.,1,56.代码#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.0x86,// 1.0xDB,// 2.0xCF,// 3.0xE6,// 4.0xED,// 5.0xFD,// 6.0x87,// 7.0xFF,// 8.0xEF// 9.};// 数码管显示位码对应第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);// 稍作延时}}}