好文档 - 专业文书写作范文服务资料分享网站

基于51单片机的万年历的设计

天下 分享 时间: 加入收藏 我要投稿 点赞

单片机实训报告

图1 系统设计图

如图2所示为系统仿真图。

图2 系统仿真图

2. 晶振电路

如图3所示,51单片机的内部有一个用于构成振荡器的高增益反相放大器,它的输入端为XTAL1引脚,输出端为XTAL2引脚,两个跨接石英晶体及两个电容就可以构成稳定的自激振荡器。电容器通常取30pF左右。

图3 晶振电路 图4 复位电路 3. 复位电路

往单片机的复位引脚上输入24个时钟周期以上的高电平,即执行复位操作。按键复位是指系统在运行时,按下一个开关,就能在RST引脚产生一段时间的高电平,使系统复位,常见的按键复位电路如图4所示。对12MHz晶振频率而言,电路中C取10pF,R取1KΩ。

- 4 -

单片机实训报告

4. DS1302时钟电路

DS1302是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、 时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

图5示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。

图5 DS1302时钟芯片 图6 温度采集系统电路 5. 温度采集系统电路

在本万年历当中温度的采集采用数字温度传感器DS18B20。它属于单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 具有如下的

- 5 -

单片机实训报告

经济特点:(1)只要求一个端口即可实现通信。(2)在DS18B20中的每个器件上都有独一无二的序列号。(3)实际应用中不需要外部任何元器件即可实现测温。(4)测量温度范围在-55。C到+125。C之间。(5)数字温度计的分辨率用户可以从9位到12位选择。(6)内部有温度上、下限告警设置。如图6所示。

6. 按键调整电路

按键采用4个独立的按键,一个功能键、一个退出键、一个加按键、一个减按键通过这四个按键可以来合理的设置时钟的调整和闹铃的设置等。如图7所示与51单片机的P0.0~P0.3的连接示意图。

图7 按键调整电路

7. 闹钟提示电路

当到达整点时或者当前的时间等于51单片机中设置闹钟时间时蜂鸣器便会发出声音进行提示。与单片机P0.5引脚的连接电路如图8所示。

图8 闹钟提示电路 图9 LCD显示电路 8. LCD显示电路

在本万年历当中12864液晶显示当前的实时时间重要的阴阳历节日等功能。

- 6 -

单片机实训报告

12864液晶具有如下的特性:

1)提供8位,4位并行接口及串行接口可选 2)并行接口适配M6800时序 3)自动电源启动复位功能 4)内部自建振荡源

64×16位字符显示RAM(DDRAM最多16字符×4行,LCD显示范围16×2行)(改为半角输入) 2M位中文字型ROM(CGROM),总共提供8192个中文字型(16×16点阵)16K位半宽字型ROM(HCGROM),总共提供126个西文字型(16×8点阵)64×16位字符产生RAM(CGRAM) 15×16位总共240点的ICONRAM(ICONRAM)其与单片机的连接电路如图9所示。 五、软件设计框图 1. 主程序流程图:

2. 阴阳历转换流程图:

- 7 -

单片机实训报告

六、程序源代码 1. 主程序

#include < reg52.h > #include < nongli.h > #include < lcd.h > #include < shezhi.h > #include < time.h> #include < wendu.h > #include < key.h >

#define uchar unsigned char #define uint unsigned int

/******************************************************************** sbit bell = P2 ^ 0; //定义蜂鸣器端口

/******************************************************************** 定时器设置整点报时

********************************************************************/ void Timer0_Service() interrupt 1 {

- 8 -

08wxw495wc3ibqw7s1xb7s7tu43p3900tsi
领取福利

微信扫码领取福利

微信扫码分享