【物联网专业】案例9_2:控制数码管(定时器中断) 文章目录0 文章介绍1 仿真图2 效果图3 不完整代码4 思考题0 文章介绍对应定时器/计数器案例目标的实现用计数器中断0P3^4控制数码管段选P1^6控制数码位选1 仿真图2 效果图3 不完整代码复制该代码其中有7个补充点补充点1-3自己思考补充点567见下方图片#includereg52.h// 包含51单片机特殊功能寄存器定义头文件// 定义无符号整型类型别名#defineuintunsignedint#defineucharunsignedchar// 数码管控制引脚定义sbit dulaP3^4;// 段选锁存器控制引脚U2锁存器控制显示内容sbit welaP1^6;// 位选锁存器控制引脚U3锁存器控制显示位置// 拆分后的时间显示变量十位和个位uchar shi2,shi1;// 小时十位、个位uchar fen2,fen1;// 分钟十位、个位uchar miao2,miao1;// 秒钟十位、个位// 当前时间变量初始为11:12:13uchar shi11;// 当前小时uchar fen12;// 当前分钟uchar miao13;// 当前秒钟uchar count;// 定时器计数变量用于每秒计时50ms × 20 1秒// 数码管段码表无小数点按0~9的显示编码连接至段选锁存器uchar code tabledula[]{【补充1】};// 数码管段码表带小数点用于显示冒号效果通过点亮小数点位置uchar code tableduladian[]{【补充2】};// 数码管位选码控制哪一位被选中// 依次对应数码管第1位~第6位从左到右// 注意这些值为逐位取0低电平有效共阴极数码管常见uchar code tablewela[]{【补充3】};// 简单延时函数x 约等于 x 毫秒voiddelay(uchar x){【补充4】}// 数码管动态显示函数依次点亮6位数码管显示“时:分:秒”voiddisplay(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1){// 防止误触发先清除锁存控制引脚wela0;dula0;// 显示第1位小时的十位P0tablewela[0];// 选中第1位wela1;wela0;// 鎖存位选信号P0tabledula[shi2];// 发送段码无小数点dula1;dula0;// 鎖存段选信号delay(1);// 稍作延时防止闪烁// 显示第2位小时的个位带小数点P0tablewela[1];wela1;wela0;P0tableduladian[shi1];// 段码带小数点模拟冒号dula1;dula0;delay(1);// 显示第3位分钟的十位wela0;dula0;P0tablewela[2];wela1;wela0;P0tabledula[fen2];dula1;dula0;delay(1);// 显示第4位分钟的个位带小数点P0tablewela[3];wela1;wela0;P0tableduladian[fen1];// 带小数点模拟冒号dula1;dula0;delay(1);// 显示第5位秒钟的十位P0tablewela[4];wela1;wela0;P0tabledula[miao2];dula1;dula0;delay(1);// 显示第6位秒钟的个位P0tablewela[5];wela1;wela0;P0tabledula[miao1];dula1;dula0;delay(1);}// 定时器0初始化函数设置50ms中断voidinit(){【补充5】}// 主函数程序入口voidmain(){init();// 初始化定时器while(1){// 主循环中不断刷新6位数码管的显示内容display(shi2,shi1,fen2,fen1,miao2,miao1);}}// 定时器0中断服务函数每50ms进入一次voidtime0()interrupt1{// 重装载定时器初值确保下次50ms【补充6】 count;// 每50ms中断一次累积20次为1秒if(count20){count0;// 归零计数miao;// 秒钟1// 进位判断处理if(miao60){miao0;fen;// 分钟1if(fen60){fen0;shi;// 小时1if(shi24){shi0;// 24小时制归零}}}}// 将当前时间变量拆分为“十位”和“个位”数字以便送入数码管显示// 例如shi 11将被拆为 shi2 1十位shi1 1个位// miao 13将被拆为 miao2 1miao1 3【补充7】}补充点5674 思考题实现以下效果