基于51单片机的秒表设计
(仿真+程序+原理图+PCB+设计报告)
功能介绍
具体功能:
1.数码管显示秒表,精度为0.01;
2.记时最大为99.99s,过后清零记数。
3.一个按键实现开始、暂停、清零功能。
演示视频:
基于51单片机的秒表设计—0.01精度99.99s
#include<reg52.h>#define uchar unsigned char //无符号字符型宏定义
#define MS 225
uchar code led1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //不带小数点数码管段码
uchar code led2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点数码管段码
uchar n=0,m=0,j=0,k=0;//四位要显示数据
uchar keyln=0; //按键值
sbit key=P3^3; //按键接口
void Delay_ms(uchar s);//延时函数声明
void Display(void); //显示函数声明
void main(void) // 主函数
{TMOD=0X01; //定时器0方式1TH0=(65536-1000)/256; //预设初值高位TL0=(65536-1000)%256; //预设初值低位ET0=1; //开定时器0中断EA=1; //开总中断TR0=0; //定时器关while(1) //主函数循环{if(key==0) //判断按键是否按下{Delay_ms(50); //延时,软件消抖if(key==0) //再次判断按键是否一直被按下{while(!key); //等待按键弹起keyln++; //按键值+1if(keyln>3) keyln=1; //如果按键值大于3则令其为1}}switch(keyln) //按键值处理循环{case 1:TR0=1; break; //按下一次,启动定时器case 2:TR0=0; break; //按下二次,关闭定时器case 3:TR0=0; n=m=j=k=0; break;//按下三次,复位default: break; //其他情况无}Display();//调用显示函数}
}void timer0(void) interrupt 1 //定时器0中断服务子程序
{TH0=(65536-1000)/256; //1ms重赋初值高位TL0=(65536-1000)%256; //重赋初值低位n++; //秒表最低位+1if(n==10) //如果最低位=10{n=0; //则最低位清0m++; //前一位+1if(m==10) //以下如此推理{m=0;j++;if(j==10){j=0;k++;if(k==99) //当最高位为10时,全部清零{n=0;m=0;j=0;k=0;}}}}
}
void Delay_ms(uchar s) //延时函数
{uchar i;for(i=0;i<s;i++);
}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
设计资料
01 仿真图
本设计使用proteus7.8版本设计,没有软件公众号回复Proteus7获取,无需担心!具体如图!
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!
04 设计报告
一万一千字设计报告,具体如下!
05 设计资料
资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、pcb电路图、参考论文、等。具体内容如下,全网最全! !
资料获取请观看前面演示视频!
点赞分享一起学习成长。