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);