好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

电子时钟设计报告

电子时钟设计报告 本文关键词:时钟,报告,设计,电子

电子时钟设计报告 本文简介:电子时钟设计报告1设计任务与要求1.1设计任务用STM32设计一个数字电子钟,采用LCD12864来显示并修改,时间或闹铃。1.2设计要求1)显示功能:可显示时间等基本功能。2)具有闹铃功能。3)按键改变时间。4)按键改变闹铃。5)温度的显示。2方案设计与论证整个系统用stm32单片机作为中央控制器

电子时钟设计报告 本文内容:

电子时钟设计报告

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

u8COMPILED_DATE=__DATE__;//获得编译日期

const

u8COMPILED_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)

{

t=timer.sec;

LCD_ShowNum(60,130,timer.w_year,4,16);

LCD_ShowNum(100,130,timer.w_month,2,16);

LCD_ShowNum(124,130,timer.w_date,2,16);

switch(timer.week)

{

case

0:

LCD_ShowString(60,148,“Sunday

“);

break;

case

1:

LCD_ShowString(60,148,“Monday

“);

break;

case

2:

LCD_ShowString(60,148,“Tuesday

“);

break;

case

3:

LCD_ShowString(60,148,“Wednesday“);

break;

case

4:

LCD_ShowString(60,148,“Thursday

“);

break;

case

5:

LCD_ShowString(60,148,“Friday

“);

break;

case

6:

LCD_ShowString(60,148,“Saturday

“);

break;

}

LCD_ShowNum(60,162,timer.hour,2,16);

LCD_ShowNum(84,162,timer.min,2,16);

LCD_ShowNum(108,162,timer.sec,2,16);

LED0=!LED0;

}

delay_ms(10);

temp=DS18B20_Get_Temp();

if(temp<0)

{

temp=-temp;

LCD_ShowChar(140,200,-,16,0);//显示负号

}

LCD_ShowNum(148,200,temp/10,2,16);//显示温度值

LCD_ShowNum(172,200,temp%10,1,16);//显示温度值

//printf(“t1:%d/n“,temp);

delay_ms(200);

LED0=!LED0;

};

}

参考文献

[1]

康华光.电子技术基础模拟部分第四版[M].北京:高等教育出版社,1999.6.

[2]

阎石.数字电子技术基础第四版[M].北京:高等教育出版社,1999.6.

[3]王福瑞等.单片微机测控系统设计大全[M].北京航空航天大学出版社,1998(331-337).

[4]宁改娣,杨拴科.DSP控制器原理及应用[M].科学出版社,2002.

[5]

周立功等.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.1.

[6]

周立功等.ARM嵌入式系统实验教程[M].北京:北京航空航天大学出版社,2005.1.

[7]

罗浩等.一种新的基于ARM的数据采集系统设计[J].信阳师范学院学报(自然科学版),2006.4.

[8]

秦伟等.基于ARM

处理器的数据采集系统的设计[J].自动化技术与应用.2006

年第10

期.

[9]

杜春雷.ARM体系结构与编程.清华大学出版社,2003.

第9页

共9页

TAG标签: