当前位置: 首页 > news >正文

【51单片机6位数码管显示时间与秒表】2022-5-8

缘由数码管 keil proteus 为什么出现这种情况呢?-编程语言-CSDN问答

#include "reg52.h"
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号
unsigned char code DuLiAnJian[]={1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127};
unsigned char Js=0, Miao=59, Fen=59, Shi=11, Hm=0;//中断计时 秒 分 时 毫秒
unsigned int MiaoBiao=0;
bit QhShi=0,Mb=0;//12/24切换 秒表
void ZhongDuanSheZhi()
{TH0+=0X4c;/*定时器赋初值,定时50ms触发中断,自动补偿方式*/TL0+=0X00; TMOD=0X01;//16位定时器/计数器TR0=1; //启动定时器T0。ET0=1; //开启定时器EA=1; //全局中断开关
}
void ZhongDuan() interrupt 1
{++Js;TH0+=0X4c;TL0+=0X00;        
}
void JiShi(/*时间计算*/)
{if(Js==2){if(++Hm==10){Hm=0;if(++MiaoBiao==1000)MiaoBiao=0;++Miao;}if(Miao==60){Miao=0;++Fen;}if(Fen==60){Fen=0;++Shi;}if(Shi==24)Shi=0;Js=0;}
}
void main()
{unsigned char Ys=0,wei=1,Xd=0;//延时 数码位 消抖ZhongDuanSheZhi(/*中断设置*/);while(1){JiShi(/*时间计算*/);if(P1==DuLiAnJian[11]&&!++Xd){++Miao;while(P1==DuLiAnJian[11]);}else if(P1==DuLiAnJian[15]&&!++Xd){Miao=(Miao?--Miao:59);while(P1==DuLiAnJian[15]);}else if(P1==DuLiAnJian[10]&&!++Xd){++Fen;while(P1==DuLiAnJian[10]);}else if(P1==DuLiAnJian[14]&&!++Xd){(Fen=Fen?--Fen:59);while(P1==DuLiAnJian[14]);}else if(P1==DuLiAnJian[9]&&!++Xd){++Shi;while(P1==DuLiAnJian[9]);}else if(P1==DuLiAnJian[13]&&!++Xd){(Shi=Shi?--Shi:23);while(P1==DuLiAnJian[13]);}else if(P1==DuLiAnJian[8]&&!++Xd){QhShi=~QhShi;while(P1==DuLiAnJian[8]);}else if(P1==DuLiAnJian[12]&&!++Xd){Mb=~Mb;if(Mb)MiaoBiao=Hm=0;while(P1==DuLiAnJian[12]);}if(!++Ys){P2=wei;if(Mb==0){if(wei==1)P0=~smgduan[(QhShi&&Shi>12?Shi-12:Shi)/10];else if(wei==2)P0=~(smgduan[(QhShi&&Shi>12?Shi-12:Shi)-(QhShi&&Shi>12?Shi-12:Shi)/10*10]|0X80);else if(wei==4)P0=~smgduan[Fen/10];else if(wei==8)P0=~(smgduan[Fen-Fen/10*10]|0X80);//(Mb?0X00:0X80)else if(wei==16)P0=~smgduan[Miao/10];else if(wei==32)P0=~smgduan[Miao-Miao/10*10];}else{if(wei==1)P0=255;else if(wei==2)P0=~smgduan[MiaoBiao/100];else if(wei==4)P0=~smgduan[MiaoBiao/10-MiaoBiao/10/10*10];else if(wei==8)P0=~(smgduan[MiaoBiao-MiaoBiao/10*10]|0X80);else if(wei==16)P0=~smgduan[Hm];else if(wei==32)P0=255;}if((wei*=2)>32)wei=1;//数码管动态显示Ys=147;}}
}

http://www.xdnf.cn/news/275203.html

相关文章:

  • 基于DeepSeek R1知识对Qwen2.5 3B模型进行蒸馏
  • 55、【OS】【Nuttx】编码规范解读(三)
  • 信息系统监理师第二版教材模拟题第二组(含解析)
  • 从软件到硬件:三大主流架构的特点与优劣详解
  • 大学之大:杜伦大学2025.5.4
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.1 日期时间标准化(时区转换/格式统一)
  • Runnable组件容灾回退机制 with_fallback 深度解析降低程序错误率
  • 基于PHP实现的easy管理系统
  • 委托构造函数是什么?
  • 如何使用责任链模式优雅实现功能(滴滴司机、家政服务、请假审批等)
  • idea内存过低 设置 Maximum Heap Size 终极解决方案
  • ReentrantLock实现公平锁和非公平锁
  • 【毕设通关】——Word交叉引用
  • 聊聊对Mysql的理解
  • 《AI大模型应知应会100篇》第48篇:构建企业级大模型应用的架构设计
  • PiscTrace针对YOLO深度适配:从v8到v12
  • vue3 - keepAlive缓存组件
  • Python变量作用域陷阱:为什么函数内赋值会引发_局部变量未定义
  • C++多态(上)
  • 互联网大厂Java求职面试:核心技术点深度解析
  • 12.Excel:查找替换
  • 单例模式(Singleton Pattern)
  • Three.js在vue中的使用(二)-动画、材质
  • 深入解析 MQTT 协议:物联网通信的基石
  • Flink基础整理
  • 实验三 触发器及基本时序电路
  • js逆向绕过指纹识别
  • 打电话玩手机检测数据集VOC+YOLO格式8061张1类别
  • PostgreSQL 的 pg_stat_file 函数
  • 【MySQL数据库】用户管理