四、单片机之电子时钟设计

目录

前言

一、电子时钟原理

1、输入电路原理

2、输出电路原理

3、控制电路

二、单片机原理图绘制

1、所需元件名称

2、绘制原理图

三、编写程序

总结


前言

今天我们来学习单片机AT89C52控制电子时钟,此时钟可以分别显示“时-分-秒”,并且可以通过按键调节时间。期间我们用到的软件有proteus和keil两个软件,欢迎大家提问已经寻找错误,请大家点个关注和收藏,后续还会更新。


一、电子时钟原理

1、输入电路原理

主要是通过按键完成信息的采集,咱们是通过七个I/O口分别对七个按键进行检测。

2、输出电路原理

本实验采用8位LED数码管动态扫描显示电路,其A~DP分别与单片机的P2口相连,受P2口控制,位控制端由P3口连接。

3、控制电路

通过单片机内置定时器定时1秒不断刷新在显示屏中显示数值,对输入信息进行分析显示,实验中采用C52单片机进行控制

二、单片机原理图绘制

1、所需元件名称

proteus原理图中名称对应:

AT89C52——52单片机芯片;

BUTTON——按钮(复位按键);

CAP——无极性电容;

CAP-ELEC——电解电容;

CAP-POL——极性电容;

CRYSTAL——晶振;

RES——电阻;

7SEG-MPX8-CA-BLUE——共阳极数码管显示器;

以上就是我们这次设计需要用到的所有元器件,接下来我们就需要创建新工程,然后在右面添加元器件进行绘制。

2、绘制原理图

首先是绘制最小系统,将AT89C52、复位电路、时钟电路绘制出来。

然后就是咱们的输出电路,将数码管显示器加入原理图,将对应引脚与I/O口相连。

然后咱们对输出电路进行绘制。

这里我采用了网络标号的连接方法进行连接,可以增加原理图的整洁度,可以一眼看到是如何连接的。

至此,咱们的原理图就绘制完成,接下来咱们可以开始编写程序。

三、编写程序

这里咱们分出三部分分别展示程序,分别为输出电路、输入电路、控制电路。

1、输出电路

u8 gsmg_code[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳
u8 place_code[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
void smg_display(void)
{
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
       switch(i)
			 {
				 case 0:PLACE=0x01;SMG_A_DP_PORT=gsmg_code[hour/10];break;
				 case 1:PLACE=0x02;SMG_A_DP_PORT=gsmg_code[hour%10];break;
			    case 2:PLACE=0x04;SMG_A_DP_PORT=0xbf;break;
				 case 3:PLACE=0x08;SMG_A_DP_PORT=gsmg_code[min/10];break;
				 case 4:PLACE=0x10;SMG_A_DP_PORT=gsmg_code[min%10];break;
			    case 5:PLACE=0x20;SMG_A_DP_PORT=0xbf;break;
				 case 6:PLACE=0x40;SMG_A_DP_PORT=gsmg_code[sec/10];break;
				 case 7:PLACE=0x80;SMG_A_DP_PORT=gsmg_code[sec%10];break;
				 
			 }				 
			 delay(1);
	}
}//PLACE对应的是1~8位控制端的I/O口;SMG_A_DP_PORT对应的是8位共阳极数码管A~DP的I/O口;hour、min、sec分别代表小时、分钟、秒。

2、输入电路

void Button_c()
{
   BUTTON=0xFF;//P1口控制七个按键进行控制
	if(BUTTON!=0xFF)
	{
		delay(1);
		if(BUTTON!=0xFF)//消抖处理
      {
		   switch(BUTTON)
			{
			   case 0xBF:sec--;break;
				case 0xDF:sec++;break;
				case 0xEF:min--;break;
				case 0xF7:min++;break;
				case 0xFB:hour--;break;
				case 0xFD:hour++;break;
				case 0xFE:sec=0;min=0;hour=0;break;
			}
		while(BUTTON!=0xFF);//按钮按一下做出一次反应
		}
	}
}

3、控制电路

void time0_int(void)//定时
{
   TMOD|=0x01;
	TH0=0xfc;
	TL0=0x66;
	ET0=1;
	EA=1;
	TR0=1;
}
void main()
{
	time0_int();
while(1)
	{
	  smg_display();//输出
	  Time_Line_Negative();//此函数是对00:00:00时继续进行减操作的限制行为,继续减会到23:59:59
	  Time_Line_Add();//此函数是对24:60:60时继续进行加操作的限制行为,继续加会到00:00:00
		Button_c();//输入
	}
}
void time0() interrupt 1//定时
{
static u16 i=0;
	TH0=0xfc;
	TL0=0x66;
	i++;
	if(i==1000)
	{
	   i=0;
		sec++;
		LED1=!LED1;
	}

}

至此,程序编写完成。

代码效果:

根据以上步骤,咱们就可以得到想要的实验效果啦!


总结

以上就是咱们的实验步骤,在实验中咱们需要注意定时器初始化,以及8位共阳极数码管的显示。通过porteus和keil对电子时钟进行了简单的设计。希望对你有帮助,后续我还会持续更新,帮忙点赞收藏,欢迎大家来看。

<think>好的,用户想了解AT89C52单片机的最小系统组成和设计。首先,我需要回忆一下AT89C52的基本结构,它属于8051系列单片机,所以最小系统应该包括时钟电路、复位电路、电源部分以及可能的外部存储器连接。不过AT89C52内部有Flash程序存储器,所以可能不需要外扩ROM。 接下来,时钟电路部分,通常使用晶体振荡器和两个电容组成,频率常见的是12MHz或者11.0592MHz。这部分需要确保正确连接XTAL1和XTAL2引脚。然后是复位电路,包括上电复位和手动复位,一般由电阻、电容和按钮组成,确保复位引脚在启动时保持足够时间的高电平。 电源部分,AT89C52需要5V电压,所以需要稳压电路,比如7805稳压器,同时要注意滤波电容的使用,以稳定电源。另外,EA引脚是否需要接高电平?因为内部有程序存储器,所以EA应该接Vcc,表示使用内部ROM。 I/O端口部分,可能需要上拉电阻,特别是P0口在作为通用I/O时,需要外接上拉电阻。不过如果用户的应用中P0口用作地址/数据总线,则可能需要锁存器,但在最小系统中可能不需要这部分。 还需要检查是否有必要连接ALE信号,或者是否在最小系统中可以悬空。另外,看门狗电路是否需要,但通常最小系统可能不包括这个,除非用户有特殊需求。 然后考虑设计步骤,比如先确定电源和地连接,再添加时钟和复位电路,最后处理I/O和可能的其他外设。还需要注意去耦电容的位置,靠近电源引脚,确保稳定性。 用户可能需要知道每个部分的具体参数,比如复位电路的电阻电容值,通常10k电阻和10uF电容。时钟电路的电容一般22pF左右。此外,是否需要外部RAM?AT89C52内部有256字节RAM,可能足够最小系统使用,所以不需要外扩。 最后,可能需要提醒用户在实际制作时注意PCB布局,电源线宽度,信号线走线,避免干扰。还有,下载程序需要连接哪些引脚,比如可能需要串口或者专用的编程接口,但最小系统可能不包含这部分,需要额外电路。 总结下来,最小系统的组成包括电源、时钟、复位、EA引脚处理,以及可能的P0口上拉电阻。设计时要按照模块逐一搭建,确保每个部分正常工作。</think>### AT89C52单片机最小系统组成与设计 #### 一、核心组成部分 1. **单片机芯片** - AT89C52芯片本体,采用40引脚DIP封装,工作电压范围4.0V-5.5V,内部包含8KB Flash程序存储器 2. **时钟电路** - 晶振频率选择11.0592MHz或12MHz - 计算公式:$f_{osc} = \frac{1}{2\pi \sqrt{LC}}$ - 配置30pF陶瓷电容$C_1$、$C_2$,连接XTAL1(19脚)和XTAL2(18脚) 3. **复位电路** - 典型RC复位电路,包含10kΩ电阻$R_1$和10μF电解电容$C_3$ - 时间常数$\tau = R \times C = 10ms$,满足复位脉冲宽度要求[^1] 4. **电源电路** - 采用AMS1117-5.0稳压芯片 - 输入滤波电容100μF,输出滤波电容10μF+0.1μF $$ V_{out} = V_{ref} \times (1 + \frac{R_2}{R_3}) $$ #### 二、电路设计步骤 1. **电源模块设计** - VCC(40脚)与GND(20脚)间并联0.1μF去耦电容 - 使用USB转TTL模块供电时需注意极性保护 2. **时钟电路连接** ```proteus XTAL1 --|C1|-- GND |--- XTAL XTAL2 --|C2|-- GND ``` 3. **复位电路实现** - 上电复位:RC电路自然响应 - 手动复位:增加按钮开关$S_1$ 4. **特殊引脚处理** - EA/VPP(31脚)接VCC,选择内部存储器 - PSEN(29脚)悬空,ALE(30脚)可悬空 #### 三、典型电路图 ![AT89C52最小系统框图](https://example.com/min_system.png) #### 、调试要点 1. 测量电源电压稳定在$5V \pm 5\%$ 2. 用示波器检测时钟信号波形幅度$V_{pp} \geq 4.5V$ 3. 复位时RST引脚电压应保持$> 2.5V$持续2个机器周期
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值