基于51单片机的电子秒表Protues仿真设计

目录

一、设计背景

二、实现功能

三、仿真结果

四、源程序


一、设计背景

      随着科技的不断发展,电子设备在我们生活中扮演着愈加重要的角色。这些电子设备不仅使我们的生活更加便利,还帮助我们提高工作效率和精确度。其中,电子秒表是常用的计时设备之一,用于精确测量时间的消逝。本设计的数字电子秒表系统采用51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计电子秒表。将软、硬件有机地结合起来,使得系统能够实现三位LED显示,倒计时精度为0.1秒,能正确地进行计时,复位后重新回到初始状态。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在KEIL5中调试运行,硬件系统利用PROTEUS8.11强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。

二、实现功能

         本设计以51单片机为核心,,采用常用电子器件设计,两个按键、三个数码管显示,开机后显示0,每秒循环左移一位,即“口口0->”口0口”->”0口口”,按A键开始显计时,实时显示所经历的时间,按B键停止计时并显示从开始到当前的时间,按键采用中断方式,按键A接INT0,按键B接INT1,要求精确到0.1秒,量程为0-99.9秒.

三、仿真结果

开机显示0。

 每秒循环左移一位。

按A键开始显计时,实时显示所经历的时间,按B键停止计时。

四、源程序

#include <reg51.h>

#define uchar unsigned char	 //0——255
#define uint unsigned int	 		//0——65535
#define ulong unsigned long	//0——4294967295


uchar disCode[10] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //数码管段码 0~9
uchar disDotCode[10] = {0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08}; //数码管段码 0~9(无数码管)
uchar locCode[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};					//位码

void displayTime(void);	 //刷新时间显示
void disPlay(uchar num, uchar loc);	 //数码管、led显示函数
void Exint_Init(void);
void Timer_Init(void);
void Delay1ms(unsigned int n);	//延时1ms
void Delay_us(unsigned int t);
	
ulong ms = 0;	//存储毫秒值
uchar miao = 0;	//秒数
uchar set_flag = 0;

uchar smg_c = 0;	//数码管闪烁时间计数
uchar smg_f = 0;	//数码管闪烁标志
uchar smg_b = 0;	

void Timer_Init(void)
{
	TMOD=0x11; //0110 0001	//方式一
	
	TH0= (65536-100000)/256;
	TL0= (65536-100000)%256;		// 100ms
    TH1= (65536-50000)/256;
	TL1= (65536-50000)%256;		// 50ms
	
	TR0=1;		//开启T0
	TR1=1;		//开启T1
	//ET0=1;		//T0中断允许
    ET1=1;		//T1中断允许
	EA=1;	//总中断开启
}
/******************************************************************************* 
* 函 数 名          : T0_INT
* 函数功能         : T0定时器中断函数10ms
* 输      入         : 无
* 输      出         : 无 
*******************************************************************************/ 
void T0_INT0(void)  interrupt 1
{ 
	ms++;
	if(ms == 10)  //1s时间到
	{
		ms = 0;
		miao++;
		if(miao == 100)    //秒数计时为0
		{
			miao=0;
		}
	}
	displayTime();
}

/******************************************************************************* 
* 函 数 名          : T0_INT1
* 函数功能         : T0定时器中断函数50ms
* 输      入         : 无
* 输      出         : 无 
*******************************************************************************/ 
void T0_INT1(void)  interrupt 3
{ 
	smg_c++;
	if(smg_c == 20)
	{
		smg_b++;
		smg_f=smg_b%3;
		smg_c = 0;
	}
	displayTime();
}

/*********外部中断0、1初始化***********/
void Exint_Init()
{
	IT0 = 1;
	IT1 = 1;    //下降沿触发
	EX0 = 1;
	EX1 = 1;
	PX0 = 1;    // 中断优先级设置
	PX1 = 0;
}

/*********外部中断0服务函数***********/
void Exint0_Service() interrupt 0
{
	ET0 = 1;		//T0中断允许打开,开始计时
	set_flag = 1;
	smg_b=0;
	smg_f=0;
	ms=0;
	miao=0;
}

/*********外部中断1服务函数***********/
void Exint1_Service() interrupt 2
{
	ET0 = 0;	
}

/******************************************************************************* 
* 函 数 名          : main
* 函数功能         : 主函数
* 输      入         : 无
* 输      出         : 无 
*******************************************************************************/  
void main(void)
{
    Timer_Init();
	Exint_Init();
	P1=0xff;
	while(1)
	{
		displayTime();	 //刷新时间显示
	}
}

void displayTime(void)	 //刷新时间显示
{
   if((smg_f == 2)||set_flag==1)
	{
		disPlay(miao/10, 3);	 //显示秒数的个位
	}
   if((smg_f == 1)||set_flag==1)
	{
		disPlay(miao%10, 4);	 //显示秒数的十位
	}
   if((smg_f == 0)||set_flag==1)
	{
		disPlay(ms%10, 5);	 //显示秒数的个位
	}

}

void disPlay(uchar num, uchar loc)	 //数码管、led显示函数
{
	P0 = 0xff;	//消除重影
	P2 = locCode[loc];	//位码输出
	if((loc==4)&&(set_flag==1)){ P0 = disDotCode[num];}	//段码输出
	else{P0 = disCode[num];}
	Delay_us(200);	//增加显示时间,防止显示过暗
}

void Delay_us(unsigned int t)
{
  while(t--);
}


keil源码工程及Protues源文件百度网盘链接:https://pan.baidu.com/s/1WeaZmNS1-RsRYijD65EQHQ     提取码:77xd 

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 基于51单片机电子时钟项目需要通过Keil编写程序,并使用Proteus进行仿真电路搭建。该项目主要包括以下几个步骤: 1. 硬件搭建:按照电子时钟的设计需求,连接51单片机和相关的电子元件,如晶体振荡器、数码管、按键等。通过Proteus软件,可以将这些元件连接起来,搭建出完整的电路。 2. Keil程序编写:使用Keil软件,编写51单片机的C语言程序。该程序需要实现时钟的功能,包括时、分、秒的显示和计时、调整时间、闹钟功能等。通过编程,可以控制数码管的显示,以及对按键进行响应。 3. Proteus仿真:将编写好的程序通过Proteus软件连接至搭建好的电路。进行仿真测试时,可以通过模拟时钟的不同状态,调试和验证编写的程序的正确性和稳定性。仿真过程中,可以检查数码管的显示情况,以及程序对按键输入的响应。 4. 优化和调试:根据仿真过程中的结果,对程序进行优化和调试。可能需要根据具体的需求,修改程序中的一些逻辑或代码,确保电子时钟的功能正常运行,并符合设计要求。 总的来说,基于51单片机电子时钟项目需要通过Keil编写程序,并结合Proteus进行仿真电路搭建和测试。通过这样的开发流程,可以实现一个功能完善、稳定可靠的电子时钟。 ### 回答2: 基于51单片机电子时钟keil程序和protues仿真电路组成了一个完整的设计方案。 首先,keil程序是用于开发51单片机的集成开发环境,它提供了编译、调试和仿真等功能,能够帮助程序员快速开发出51单片机的应用程序。在电子时钟的设计中,我们可以使用keil来编写单片机的程序代码,实现时钟的各种功能。 其次,protues是一款电子设计自动化软件,它提供了电子电路仿真和PCB布局设计等功能,能够帮助我们快速验证电路的正确性。在电子时钟的设计中,我们可以使用protues来建立电子时钟的仿真电路,验证单片机代码的正确性和稳定性。 基于51单片机电子时钟设计,我们可以使用keil来编写单片机的程序代码,实现时钟的各种功能,包括时间显示、报时功能、闹钟功能等。通过keil的编译、调试和仿真功能,我们可以验证代码的正确性和稳定性。 在电路设计方面,我们可以使用protues来建立电子时钟的仿真电路,通过仿真可以验证电路的正确性和稳定性,包括时钟电路、数码管驱动电路、按钮输入电路等。通过protues的电路仿真功能,我们可以检查电路设计的错误和漏洞,提前解决电路问题。 基于51单片机电子时钟keil程序和protues仿真电路的组合,我们可以全面验证电子时钟的功能和性能,确保设计的准确性和可靠性,为最终实现一个完整的电子时钟设计提供了有力的支持。 ### 回答3: 基于51单片机电子时钟keil程序和protues仿真电路可以实现以下功能: 1. 显示当前时间:我们可以使用数码管或LCD显示模块来显示当前的时、分和秒。通过编写相应的程序,我们可以从单片机的时钟源获取当前时间,并将其转换为可以在数码管或LCD上显示的格式。 2. 时间调整功能:可以通过按钮或旋钮等输入设备来调整电子时钟的时间。当用户按下或旋转输入设备时,我们可以响应用户的操作,并对时钟的时间进行相应的调整。 3. 闹钟功能:我们可以设置闹钟功能,让电子时钟在特定的时间点发出警报声。通过在程序中设置闹钟时间和警报声的播放方式,我们可以实现这一功能。 4. 温湿度监测:如果我们希望电子时钟能够同时监测室内的温度和湿度,我们可以连接温湿度传感器,并在程序中读取传感器的数据。然后,我们可以将这些数据显示在数码管或LCD上。 程序开发过程中,我们可以使用keil来编写51单片机的程序,通过keil提供的调试工具来测试和调试程序的正确性。同时,我们可以在protues设计仿真电子时钟的电路,包括单片机、显示模块、输入设备和传感器等所有的硬件组件。这样,我们可以在protues中验证电路的功能和效果,并进行性能优化和调试。当电路和程序都满足我们的要求后,我们就可以将程序烧录到实际的硬件上,并使用它作为一台完整的电子时钟了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄情书生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值