基于51单片机的秒表设计

基于51单片机秒表计时设计

(仿真+程序)

功能介绍

具体功能:

1.数码管显示时间。

2.两个按键实现开始、暂停。

3.复位按键重新记时。

​演示视频:

基于51单片机秒表计时设计—00-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方式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 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、演示视频等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值