单片机的电子时钟方案设计书.docx

上传人:b****1 文档编号:2409890 上传时间:2023-05-03 格式:DOCX 页数:21 大小:422.35KB
下载 相关 举报
单片机的电子时钟方案设计书.docx_第1页
第1页 / 共21页
单片机的电子时钟方案设计书.docx_第2页
第2页 / 共21页
单片机的电子时钟方案设计书.docx_第3页
第3页 / 共21页
单片机的电子时钟方案设计书.docx_第4页
第4页 / 共21页
单片机的电子时钟方案设计书.docx_第5页
第5页 / 共21页
单片机的电子时钟方案设计书.docx_第6页
第6页 / 共21页
单片机的电子时钟方案设计书.docx_第7页
第7页 / 共21页
单片机的电子时钟方案设计书.docx_第8页
第8页 / 共21页
单片机的电子时钟方案设计书.docx_第9页
第9页 / 共21页
单片机的电子时钟方案设计书.docx_第10页
第10页 / 共21页
单片机的电子时钟方案设计书.docx_第11页
第11页 / 共21页
单片机的电子时钟方案设计书.docx_第12页
第12页 / 共21页
单片机的电子时钟方案设计书.docx_第13页
第13页 / 共21页
单片机的电子时钟方案设计书.docx_第14页
第14页 / 共21页
单片机的电子时钟方案设计书.docx_第15页
第15页 / 共21页
单片机的电子时钟方案设计书.docx_第16页
第16页 / 共21页
单片机的电子时钟方案设计书.docx_第17页
第17页 / 共21页
单片机的电子时钟方案设计书.docx_第18页
第18页 / 共21页
单片机的电子时钟方案设计书.docx_第19页
第19页 / 共21页
单片机的电子时钟方案设计书.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机的电子时钟方案设计书.docx

《单片机的电子时钟方案设计书.docx》由会员分享,可在线阅读,更多相关《单片机的电子时钟方案设计书.docx(21页珍藏版)》请在冰点文库上搜索。

单片机的电子时钟方案设计书.docx

单片机的电子时钟方案设计书

《单片机应用系统设计》

课程设计报告

 

标题:

基于单片机的电子时钟设计

学生姓名:

XXX

系部:

汽车电子系

专业:

应用电子技术

班级:

XXXX

指导教师:

XXXX

 

摘要…………………………………………………………………(Ι)

1、方案选择…………………………………………1

1.1DS1302+液晶显示屏………………………………………

2、设计方框图…………………………………………

2.1电路设计总体框图………………………………………

2.2整体设计思路框图………………………………………

2.3程序设计框图………………………………………

3、硬件电路设计…………………………………………

3.151单片机最小系统设计……………

3.2电源供电电路设计……………

3.3串口通信电路设计……………

3.4时钟芯片电路设计……………

3.5LCD显示电路设计……………

3.6报警电路设计……………

4、软件设计…………………………………………

4.1系统程序流程图设计……………

4.2系统程序设计……………

结论…………………………………………………………………

参考文献……………………………………………………………

附录…………………………………………………………………

摘要

基于单片机设计的电子时钟精确度较高,因为在程序执行过程中,任何指令都不影响定时器的正常计数,即使程序很复杂也不会影响到中断时间。

单片机是集CPU,RAM,ROM,定时器,计数器和多种接口于一体的微控制器。

它体积小、重量轻、抗干扰能力强、环境要求不高、价格低、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。

本系统为基于DS1302的多功能电子钟,以STC89C51单片机作为主控芯,采用实时时钟芯片DS1302,使用1602液晶作为显示输出。

该系统走时精确,具有闹钟设置,时间模式切换,秒表以及可同时显示时间、日期等多种功能。

关键词:

SCT89C51单片机液晶屏时钟芯片蜂鸣器

 

1方案选择

1.1DS1302+1602LCD液晶屏

DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1RES复位2I/O数据线3SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW。

1602LCD液晶屏为显示器。

程序控制DS1302时钟芯片实现小时、分钟、秒和年、月、日的计时,并在1602LCD液晶屏上显示出来。

通过按键对12小时/24小时显示模式切换。

当时间走到程序设定的时间时,蜂鸣器响起,起到闹铃功能。

 

2设计方框图

2.1电路的总体设计框图

2.2整体设计思路

2.3程序设计框图

 

3硬件电路设计

3.151单片机最小系统设计

单片机最小系统如下图3-1所示:

以SCT89C51单片机为核心,选用12MHZ的晶振,由于晶振的频率越高,单片机的运行速度就越快,但考虑到单片机的运行速度快会导致对存储器的要求就会变高,所以12MHZ晶振为最佳选择。

外接电容的值虽然没有严格要求,但它的大小会影响振荡器频率的高低、稳定性和起振的快速性,因此选用30PF的电容作为起振电容。

复位电路为按键高电平复位。

3.2电源供电电路设计

电源供电电路如下图3-2所示:

我们采用外接USB端口的方式为单片机供电,LOPW1为电源显示灯,当按键S5按下,显示灯亮,表示单片机供+5V电压。

3.3串口通信电路设计

串口通信如下图3-3所示:

图中通过MAX232进行TTL电平和232电平转换,从而单片机和上位机之间通信提供通道。

通信电路的目的就是让通信双发的匹配,单片机用的是TTL电平,上位机的串口用的是232电平。

3.4时钟芯片电路设计

DS1302时钟芯片是本系统实现高精度计时的关键。

利用DS1302时钟芯片独立于单片机来计时,在提高计时进度的同时也提高了整个系统的抗干扰能力。

DS1302通过SCLK、I/O、RES端口和单片机STC89C51进行通信。

SCLK接到单片机P1.7口,在读写操作时给DS1302提供相应的时钟脉冲;I/O接到P3.5口用来传送所有的数据;RES接到P1.6口上用来控制单片机与时钟芯片间的数据传送的开始与结束。

3.5LCD显示电路设计

1602LCD液晶屏显示电路如下图3-5所示:

1602LCD液晶屏为5V电压驱动,带背光,可显示2行,每行16个字符。

液晶1,2端为电源;15,16为背光电源。

液晶3端为液晶对比度调节端。

液晶4端为向液晶控制器写数据端。

液晶5端为读/写选择端。

液晶6端为使能信号,是操作时必须的信号,接单片机的P3.4口。

3.5报警电路设计

蜂鸣器闹铃电路如下图3-5所示:

蜂鸣器电路接在单片机的P2.3引脚上,当给该引脚一个低电平,三极管导通,蜂鸣器发出声音作为闹铃。

 

4软件设计

4.1系统程序流程图设计

实验主程序流程图如下图4-1.1所示:

定时中断程序流程图如下图4-1.2所示:

调时功能流程图如下图4-1.3所示:

设计小结

本系统实现了人机交互功能,有夏时令制以及万年历功能。

可对年、月、日、时、分、秒进行设定,闹钟设定,具有整点报时功能,模式切换。

本系统采用1602LCD显示信息,比其它电子时钟显示信息更丰富,可同时时间、日期、星期等。

秒表功能精确到毫秒。

可设置多组闹钟。

系统具有断最保护功能,芯片可以保存断电时的信息并继续工作。

通过这次的设计使我认识到对单片机的知识知道的太少了,书本上的很多知识不能灵活运用,尤其是不能充分理解程序的含义,导致编程过于复杂。

但也提高了我的动手能力,让我享受到电子时钟设计的快乐,让我开阔了视野,丰富了经验。

知道了如何把理论运用到实际中去,把理论与实际相结合。

这次电子时钟的设计给我奠定了一个基础,我会在以后的学习、生活中锻炼自己。

 

参考文献

1王建校.51系列单片机及C51程序设计[M].北京:

科学出版社,2002

2康华光主编.电子技术基础[M],第4版.北京高等教育出版社,1991

3李维缋.液晶显示器件应用技术[M].北京:

北京邮电学院出版社,1993

4范志新.液晶显示及其用应[J].国际光电与显示,2001

5鲍宏亚等编MCS-51系列单片机应用系统设计及实用技术中国宇航出版社2005

6杨文龙.单片机原理及应用[M].西安电子科技大学出版社2000

7赵文博,刘文涛.单片机语言C51程序设计[M].人民邮电出版社2006

8李朝青编单片机原理及接口应用技术(第三版)北京航空航天大学出版社2008

 

附录:

主要程序清单

/*包含器件配置文件*/

#defineucharunsignedchar

#defineuintunsignedint

charDATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,

0x92,0x82,0xF8,0x80,0x90,}。

/*0~9的数码管段码*/

ucharhour=0,min=0,sec=0。

/*时、分、秒单元清零*/

uchardeda=0。

/*5mS计数单元清零*/

uchart_hour=0,t_min=0。

/*闹时时、分单元清零*/

bitd_05s=0。

/*0.5秒标志*/

bito_f=0。

/*闹时启/停标志*/

ucharset=0。

/*模式设定标志*/

ucharm=0。

ucharflag=0。

/*RAM掉电标志*/

voiddelay(uintk)。

/*延时子函数*/

voidconv()。

/*走时单元转换*/

voidp_out()。

/*判别闹时到否子函数*/

voiddirve()。

/*走时时间输出驱动子函数*/

voidt_dirve()。

/*闹时时间输出驱动子函数*/

/*闹时启/停子函数*/

voidtime1_of()

{ucharm。

if(P3_7==0)delay

(1)。

if(P3_7==0)o_f=1。

for(m=0。

m<30。

m++)

{

t_dirve()。

P1=DATA_7SEG[t_min/10]。

P3=0xfd。

delay

(1)。

if(P3_1==0){if(o_f==1)P1_7=0。

}elseP1_7=1。

delay

(1)。

}

if(P3_5==0)delay

(1)。

if(P3_5==0)

o_f=0。

for(m=0。

m<30。

m++)

{

t_dirve()。

P1=DATA_7SEG[t_min/10]。

P3=0xfd。

delay

(1)。

if(P3_1==0){if(o_f==1)P1_7=0。

elseP1_7=1。

}

delay

(1)。

}

}

/*走时函数*/

voidtime()

{

conv()。

/*走时单元转换*/

dirve()。

/*走时时间输出驱动子函数*/

p_out()。

/*判别闹时到否子函数*/

}

/*定时器T05mS初始化*/

voidinit_timer()

{

TMOD=0x01。

TH0=-(4800/256)。

TL0=-(4800%256)。

IE=0x82。

TR0=1。

}

/*扫描按键子函数*/

voidscan_key()

{

delay

(1)。

if(P3_4==0)set++。

if(set>=4)set=0。

if(set==1)flag=0x55。

F0:

if(P3_4==0)gotoF0。

/*按键未释放,在此等候*/

}

/*延时子函数*/

voiddelay(uintk)

{

uinti,j。

for(i=0。

i

for(j=0。

j<121。

j++)

{。

}}

}

/*5mS定时中断服务子函数*/

voidzd(void)interrupt1

{

TH0=-(4800/256)。

TL0=-(4800%256)。

deda++。

}

/*调整走时时间*/

voidtime_adj()

{ucharm。

if(P3_5==0)delay

(1)。

if(P3_5==0)hour++。

if(hour==24)hour=0。

for(m=0。

m<30。

m++)

{

dirve()。

if(P3_2==0)P1_7=0。

elseP1_7=1。

delay

(1)。

}

if(P3_7==0)delay

(1)。

if(P3_7==0)min++。

if(min==60)min=0。

for(m=0。

m<30。

m++)

{

dirve()。

if(P3_2==0)P1_7=0。

elseP1_7=1。

delay

(1)。

}

}

/*调整闹时时间*/

voidtime1_adj()

{ucharm。

if(P3_5==0)delay

(1)。

if(P3_5==0)t_hour++。

if(t_hour==24)t_hour=0。

for(m=0。

m<30。

m++)

{

t_dirve()。

}

if(P3_7==0)delay

(1)。

if(P3_7==0)t_min++。

if(t_min==60)t_min=0。

for(m=0。

m<30。

m++)

{

t_dirve()。

}

}

/*时、分、秒单元及走时单元转换*/

voidconv()

{

if(deda<=100)d_05s=0。

elsed_05s=1。

if(deda>=200){sec++。

deda=0。

}

if(sec==60){min++。

sec=0。

}

if(min==60){hour++。

min=0。

}

if(hour==24){hour=0。

}

}

/*走时时间输出驱动子函数*/

voiddirve()

{

P1=DATA_7SEG[hour/10]。

P3=0xf7。

delay

(1)。

P1=DATA_7SEG[hour%10]。

P3=0xfb。

delay

(1)。

if(d_05s==1){if(P3_2==0)P1_7=0。

elseP1_7=1。

}

delay

(1)。

P1=DATA_7SEG[min/10]。

P3=0xfd。

delay

(1)。

if(o_f==1){if(P3_1==0)P1_7=0。

elseP1_7=1。

delay

(1)。

}

P1=DATA_7SEG[min%10]。

P3=0xfe。

delay

(1)。

}

/*闹时时间输出驱动子函数*/

voidt_dirve()

{

P1=DATA_7SEG[t_hour/10]。

P3=0xf7。

delay

(1)。

if(P3_3==0)P1_7=0。

elseP1_7=1。

delay

(1)。

P1=DATA_7SEG[t_hour%10]。

P3=0xfb。

delay

(1)。

P1=DATA_7SEG[t_min/10]。

P3=0xfd。

delay

(1)。

P1=DATA_7SEG[t_min%10]。

P3=0xfe。

delay

(1)。

}

/*判别闹时到否子函数*/

voidp_out()

{

if(o_f==1){

if(t_hour==hour){if(t_min==min)

if(P3_0==0){P1_7=0。

delay

(1)。

}

elseP1_7=1。

}

}

}

/*主函数*/

voidmain()

{

init_timer()。

/*定时器T0初始化*/

while

(1)

/*无限循环*/

{

if(P3_4==0)scan_key()。

/*有按键,调用按键扫描子函数*/

switch(set)

/*根据set键值散转*/

{

case0:

time()。

break。

/*走时时间程序*/

case1:

time1_adj()。

break。

/*闹时时间调整*/

case2:

time_adj()。

break。

/*走时时间调整*/

case3:

time1_of()。

break。

/*启/停闹时*/

default:

break。

/*其它退出*/

}

if(flag!

=0x55)

/*判断掉电标志*/

{for(m=0。

m<100。

m++)

/*点亮四个8字400mS*/

{

P1=0x80。

P3=0xf7。

delay

(1)。

P1=0x80。

P3=0xfb。

delay

(1)。

P1=0x80。

P3=0xfd。

delay

(1)。

P1=0x80。

P3=0xfe。

delay

(1)。

}

P1=0xff。

P3=0xff。

delay(400)。

/*熄灭四个8字400mS*/

}

}

}

展开阅读全文
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2