单片机AT89C51数码管数字时钟和秒表(二)

您所在的位置:网站首页 lcd时钟设计实验报告 单片机AT89C51数码管数字时钟和秒表(二)

单片机AT89C51数码管数字时钟和秒表(二)

2023-08-16 21:14| 来源: 网络整理| 查看: 265

1.设计概述:

  本篇论文讨论了简单的数字秒表的设计与制作 ,采用LED液晶模块进行显示。其中单片机通过定时器中断的方式产生了10ms的最小计时单位,通过加一后判断的方式依次进行处理,将每个单位进行十进制处理后进行显示。   采用6位LED数码管和单片机定时/计数器设计一个时钟+秒表显示电路。

2.设计思想

  本次设计的核心是单片机控制模块,所以此设计是单片机应用系统的一种应用。系统采用AT89C51单片机作为核心控制单元,开始运行23:56:55时间开始,模式按键切换,数码管开始从0.0计时,直到按下暂停按钮,数码管时间显示,如继续计时,继续按下开始按钮,如果此次计时结束重新计时,按下清零按钮从0.00开始。

3.硬件框架图

在这里插入图片描述

4.组成

按模块划分可分为单片机最小系统电路、按键电路、数码管显示三个子模块。

5.电路总体仿真图

开始仿真总图

在这里插入图片描述

模式切换到秒表模式,并开始计时中

在这里插入图片描述

秒表计时暂停中 在这里插入图片描述

秒表清零后 在这里插入图片描述

时钟模式下时间时分秒调整,如下图分钟数字调整 闪烁 在这里插入图片描述

6.部分代码 uchar Hours=23,Minutes=56,seconds=55; //分别定义三个变量表示时、分、秒 uchar Time0_bit=0; //用于定时器0的溢出标志 bit Set_Time=0; //设置时 闪烁时长的标志位 bit Set0=0; //设置时间标志,确定是设置‘分’还设置‘时’ uchar K1_bit=0; //用于模式切换的标志 uchar Miao_Biao0,Miao_Biao1,Miao_Biao2,Miao_Biao3,Miao_Biao4; //用于秒表的变量 void main() { Init(); //中断初始化 while(1) //死循环 { Mode_K1(); //模式扫描 switch(K1_bit) //模式选择 { case 0: { Display0(); //显示时间 break; } case 1: { Display1(); //显示秒表 KEY_MiaoBiao(); //扫描秒表操作 break; } case 2: { Display2(); //设置时间时的显示程序,可闪烁定位 KEY_Time_Set(); //扫描按键 break; } } } } void KEY_Time_Set() //设置时间时的按键扫描函数 { if(K1_bit==2) //判断是否为时间设置模式 { if(K2==0) //K2有按下(下同) { Delay(10); //延时消抖(下同) if(K2==0) //再次检测是否为误按 { if(Set0==0) //检测是设置‘时’还是分,Set0为0时设置‘分’,Set0为1时设置‘时’ { Minutes++; //‘分’加1 if(Minutes==60) //当'分'加到60时,重新赋值0 Minutes=0; } else { Hours++; //‘时’加1 if(Hours==24) //当'时'加到24时,重新赋值0 Hours=0; } while(!K2); //按键松开检测,消除松开按键时的抖动干扰 } } if(K3==0) { Delay(10); if(K3==0) { Set0=~Set0; //K3每按一次Set0取反,以确定是设置‘时’还是设置‘分’,Set0为0时设置‘分’,Set0为1时设置‘时’ while(!K3); } } } } void KEY_MiaoBiao() //检测秒表按键操作 { if(K1_bit==1) //判断是否为秒表模式 { if(K2==0) { Delay(10); if(K2==0) { TR1=~TR1; //K2每按一次TR1取反,暂停或开始定时器1,达到暂停或开始秒表的目的 while(!K2); } } if(K3==0) { Delay(10); if(K3==0) //当K3按下时秒表所有数据清零,并停止定时器1 { TR1=0; //停止定时器1 Miao_Biao0=0; //清零数据 Miao_Biao1=0; Miao_Biao2=0; Miao_Biao3=0; Miao_Biao4=0; while(!K3); } } } } void Mode_K1() //模式选择键,本程序三种模式,分别是时间显示、秒表、时间设置 { if(K1==0) { Delay(10); if(K1==0) { K1_bit++; if(K1_bit==3) { K1_bit=0; } while(!K1);


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3