基于51单片机秒表计时设计
(仿真+程序)
功能介绍
具体功能:
1.数码管显示时间。
2.两个按键实现开始、暂停。
3.复位按键重新记时。
部分代码
#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方式1
TH0=(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++; //按键值+1
if(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++; //秒表最低位+1
if(n==10) //如果最低位=10
{
n=0; //则最低位清0
m++; //前一位+1
if(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++);
}
硬件设计
使用元器件:
单片机:AT89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
设计资料
01 仿真图
本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!
02 程序
本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!
03 设计资料
全部资料包括仿真源文件 、程序(含注释)、演示视频等。具体内容如下,全网最全! !
下面是开源51单片机设计资料
大家共同学习进步:
链接:https://pan.baidu.com/s/1uRFUs-zcWw9wcuuajnEE2g?pwd=x14p
提取码:x14p
点赞分享,一起学习进步!一起成长。