电子时钟设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子时钟设计报告
1 设计任务与要求
1.1 设计任务
用STM32设计一个数字电子钟,采用LCD12864来显示并修改,时间或闹铃。
1.2 设计要求
1)显示功能:可显示时间等基本功能。
2)具有闹铃功能。
3)按键改变时间。
4)按键改变闹铃。
5)温度的显示。
2 方案设计与论证
整个系统用stm32单片机作为中央控制器,由单片机执行采集内部RTC值,时钟信号通过单片机I/O口传给TFT彩屏,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出。系统设有按键模块用于对时间进行调整及扩展多个小键盘。
2.1 显示电路
方案一:TFT彩屏。显示质量高,没有电磁辐射,可视面积大,应用范围广,画面效果好,数字式接口,“身材”匀称小巧,功耗小。
方案二:数码管动态显示。动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。
从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案一,既TFT彩屏显示。
2.2 电源电路
本数字电子钟设计所需电源电压为直流、电压值大小5V的电压源直接用mini USB通过电脑USB接口供电。
2.3 按键电路
本数字电子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。
单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。
2.4 RTC时钟
Stm32自带RTC模块,实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。在RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL)赋值可改变时间,在RTC闹钟寄存器(RTC_ALRH/RTC_ALRL)中改变闹铃时间。
2.5 TFT 彩屏显示电路
数字电子钟设计的显示模块用一个TFT彩屏来实现。
2.6 温度传感器模块
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
技术性能描述:
①独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)0.5℃。
③支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④工作电源: 3~5V/DC (可以数据线寄生电源)
⑤在使用中不需要任何外围元件。
3 硬件电路设计
图1 stm32f103引脚图
图2 指示灯与复位电路
图3 稳压电路,变压电路,晶震
图4 实物图4 软件设计
主程序如下
#include
#include "rtc.h"
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "lcd.h"
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "dma.h"
#include "24cxx.h"
#include "flash.h"
#include "touch.h"
#include "24l01.h"
#include "mmc_sd.h"
#include "remote.h"
#include "ds18b20.h"
const u8 *COMPILED_DATE=__DATE__;//获得编译日期
const u8 *COMPILED_TIME=__TIME__;//获得编译时间
const u8* Week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; int main(void)
{
u8 t=0;
short temp;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72);//延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
LCD_Init();
RTC_Init();
//RTC_Set(2015,7,15,20,27,50); //设置时间
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(30,50," CCNU - NERCEL");
LCD_ShowString(30,70," Zhu Xiaobin 2014112786");
LCD_ShowString(30,90,"Jiang Xiaomei 2014112787");
//LCD_ShowString(30,110,"2015/07/15");
//显示时间
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130," - - ");
LCD_ShowString(60,162," : : ");
while(DS18B20_Init())//初始化DS18B20,兼检测18B20
{
LCD_ShowString(60,180,"DS18B20 Check Failed!");
delay_ms(500);
LCD_ShowString(60,180,"Please Check! ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
LCD_ShowString(60,180,"DS18B20 Ready! ");
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,200, "Temperate: . C");
while(1)
{
if(t!=timer.sec)