基于51单片机秒表设计


基于51单片机0.001s精度秒表9.999s仿真设计(源码+仿真+原理图+PCB+报告+器件清单+讲解)

仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0003

🕐1 功能说明:

定时器做精度为0.001s的秒表;

1、秒表精度为0.001s;

2、按键可以实现启动、暂停及清零;

3、计时到9.999秒后清理重新开始计时;

4、用数码管显示计时时间;

仿真51单片机芯片是通用的,AT89C51,AT89C52都是51单片机的具体型号,内核是兼容的。原理图不变的情况下,主控芯片可以替换成STC89C52/STC89C51/AT89C52/AT89C51/8051等51单片机芯片。

🕐2 仿真电路:

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后数码管显示0.000,按下按键开始计时,再按下按键停止计时,再按下按键复位计时时间。

img

开始仿真还没开始计数,显示0.000秒。

img

开始计数后,时间以0.001s递增。启动后按键按下暂停计时并显示当前的计时时间,再按键计时清零。

img

接近9.999,超过9.999后复位到0并重新计时。

🕐3 原理图:

AD绘制的。

img

Proteus仿真和实物作品的区别:

1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。

2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。

电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。

3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。

4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。

元器件清单

CommentDescriptionDesignatorFootprintLibRefQuantity
Cap Pol1电容C1电解电容Cap Pol11
Cap电容C2, C30805_CCap2
104电容C40805_cCAP1
四位数码管数码管DY1四位数码管四位数码管1
CON22PIN排针J1, J2, J3, J4HDR1X2CON24
KEY按键key1SWITCHKEY1
PNP三极管Q1, Q2, Q3, Q4TO-92APNP4
Res2电阻R90805Res21
1k电阻R10, R11, R12, R13, R140805RES5
510电阻RES1SIP9排阻1
AT89C52单片机U1STC89C52AT89C521
XTAL晶振Y1晶振12MXTAL1

🕐4 PCB:

双层板设计,部分使用贴片元器件

img

🕐5 程序:

img

#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 n代表毫秒
	if(n==10)					   //如果最低位=10
	{
	  n=0;						   //则最低位清0
	  m++;						   //前一位+1
	  if(m==10)					  //以下如此推理    m代表十毫秒
	  {
	    m=0;
	  	j++;
		if(j==10)			 		//J代表百毫秒
		{
		    j=0;
		    k++;
	       if(k==10)			   //当最高位为10时,全部清零
		  {
			n=0;
			m=0;
			j=0;
			k=0;
		  }
		}
	  }
	}
}
void Delay_ms(uchar s)	  //延时函数
{
    uchar i;
	for(i=0;i<s;i++);
}

void Display(void)		  //显示函数
{
	  P2=0XF7;			  //最低位
	  P1=led1[n];
	  //P0=~led1[n];
	  Delay_ms(MS);
	  P2=0XFF;

	  P2=0XFB;			 //第三位
	  P1=led1[m];
	  //P0=~led1[m];
	  Delay_ms(MS);
	  P2=0XFF;

	  P2=0XFD;			//第二位
	  P1=led1[j];
	 // P0=~led2[j];
	  Delay_ms(MS);
	  P2=0XFF;

	  P2=0XFE;			 //第一位
	  P1=led2[k];
	  //P0=~led1[k];
	  Delay_ms(MS);
	  P2=0XFF;
}





🕐6 资料清单&&下载链接:

0.常见问题 必读!!!!

\1. 程序

\2. 仿真

\3. 原理图和pcb

4.开题报告

5.元器件清单

6.功能要求

\7. 设计报告

8.讲解视频

Altium Designer 安装破解

filename.bat

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

目录清单.txt

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找更多51 STM32单片机课程毕业设计.url

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值