电子万年历设计报告.docx

上传人:b****6 文档编号:5996172 上传时间:2023-01-02 格式:DOCX 页数:32 大小:208.77KB
下载 相关 举报
电子万年历设计报告.docx_第1页
第1页 / 共32页
电子万年历设计报告.docx_第2页
第2页 / 共32页
电子万年历设计报告.docx_第3页
第3页 / 共32页
电子万年历设计报告.docx_第4页
第4页 / 共32页
电子万年历设计报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

电子万年历设计报告.docx

《电子万年历设计报告.docx》由会员分享,可在线阅读,更多相关《电子万年历设计报告.docx(32页珍藏版)》请在冰豆网上搜索。

电子万年历设计报告.docx

电子万年历设计报告

 

单片机课程设计

 

课题:

电子万年历设计

 

系别:

电气与电子工程系

专业:

电子信息工程

姓名:

郑亚

学号:

093409175

 

河南城建学院

2011年12月28日

 

成绩评定·

一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。

 

二、评分

评分项目

设计报告评分

答辩评分

平时表现评分

合计

(100分)

任务完成

情况

(20分)

课程设计

报告质量

(40分)

表达情况

(10分)

回答问题

情况

(10分)

工作态度与纪律

(10分)

独立工作

能力

(10分)

得分

 

课程设计成绩评定

班级姓名学号

 

成绩:

分(折合等级)

 

指导教师签字年月日

 

摘要……………………………………………………………………Ⅰ

Abstract……………………………………………………………….Ⅰ

1绪论(课题背景、概述、目的)…………………………………..1

2设计要求与方案论述……………………………………………….3

2.1设计要求…………………………………………………………...3

2.2创新要求………………………………………………………….3

2.3系统的方案选择…………………………………………………...3

2.4电路设计最终方案……..………………………………….…….5

3系统的硬件设计与实现…………………………………………….6

3.1电路设计框图……………………………………………………...6

3.2硬件设计原理概述………………………………………………..6

3.3主要模块的设计…………………………………………………..6

4系统的软件设计与实现…………………………………………….10

4.1程序流程框图…………………………………………….……….10

4.2程序的设计………………………………………………………..10

5总结………………………………………………………………...14

参考文献……………………………………………………………..15

附录1硬件电路全图…………………………………………………16

附录2程序……………………………………………………………17

 

摘要

本设计基于AT89s51单片机,结合DS1302时钟芯片设计了一个数字万年历,显示部分用数码管动态显示,初始时间可由按键设置,此外还具有温度显示功能,掉电保护功能。

万年历还具有节能模式,具有很强的实用性。

关键词:

单片机万年历数码管显示温度

 

Abstract

ThispaperisdesignedbasedontheAT89s52SCM,CombiningDS1302clockchip.Displaysectionisusingdigitaltubedynamicdisplay;Initialtimecanbesetbythebutton;Inaddition,ithasthetemperaturedisplayfunctionandthepower-offprotectedfunction.Besides,ithasenergysavingmode;ThiscalendarhasstrongDigitaltubedisplaypracticability.

Keywords:

scm;calendar;digitaltubedisplay;temperaturedisplay

1绪论

1.1设计背景

电子万年历是实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人家庭,车站,码头,办公室,银行大厅等场所,成为人们日常生活中的必需品。

数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。

钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的万年历精度高,功能易于扩展。

可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等电路。

所有这些,都是以钟表数字化为基础的。

因此,研究数字时钟及扩大其应用有着非常现实的意义。

本设计就是数字时钟简单的扩展应用。

万年历的设计过程在硬件与软件方面进行同步设计。

1.2硬件部分

硬件部分主要由AT89S52单片机,LED显示电路,以及调时按键电路等组成。

在单片机的选择上使用AT89S52单片机,该单片机适合于许多较为复杂控制应用场合。

采用4-16译码器作为选择端,控制共阴数码管动态显示,结合时钟芯片DS1302和温度传感器18B20显示时间和温度。

制作前在Proteus软件中嵌入单片机内进行仿真可以更好的进行硬件布局。

1.3软件部分

软件方面主要包括日历程序、时间调整程序,显示程序等。

程序采用C语言编写,以便更简单地实现调整时间及阴历显示功能。

所有程序编写完成后,在keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。

 

2设计要求与方案论证

2.1设计要求:

2.1.1具有年、月、日、星期、时、分、秒等功能;

2.1.2万年历具有闰月识别显示功能;

2.1.3具备年、月、日、星期、时、分、秒校准功能;

2.2创新要求

2.2.1万年历具有阴历显示功能;

2.2.2具有测量室内温度功能;

2.3系统基本方案选择和论证

2.3.1单片机芯片的选择方案和论证:

方案一:

采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。

所以选择采用AT89S52作为主控制系统.

2.3.2显示模块选择方案和论证:

方案一:

采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏.

方案二:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.

方案三:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

所以采用了LED数码管作为显示。

2.3.3时钟芯片的选择方案和论证:

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。

采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。

所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.

2.4电路设计最终方案

综上各方案所述,对此次作品的方案选定:

采用AT89S52作为主控制系统;DS1302提供时钟;数字式温度传感器;LED数码管动态扫描作为显示。

 

3.系统的硬件设计与实现

3.1电路设计框图

图2.1电路设计框图

3.2系统硬件概述

本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

温度的采集由DS18B20构成;显示部份由17个数码管,74ls154译码器构成。

使用动态扫描显示方式对数字的显示。

3.3主要模块的设计

3.3.1单片机主控制模块的设计

AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.如图3.3.1所示

图3.3.1主控制系统

3.3.2时钟电路模块的设计

图3.3.2示出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始终是输入端。

图3.3.2DS1302的引脚图

3.3.3温度传感器模块

图3.3.318B20的引脚图

3.3.4显示模块的设计

如图3.3.4所示,采用动态扫描显示,由17个数码管,4-16译码器74LS154接1K限流电阻接到共阴数码管的CoM端作为选通位码,每位选择相应的列,P0口输出数据再接9013三极管送达数码管。

图3.3.4显示模块

 

4.系统的软件设计

4.1程序流程框图

图4.1程序流程框图

4.2子程序的设计

4.2.1读、写DS1302子程序

unsignedcharDS1302OutputByte(void)//实时时钟读取一字节(内部函数)

voidDS1302InputByte(unsignedchard)//实时时钟写入一字节(内部函数)

unsignedcharRead1302(unsignedcharucAddr)//读取DS1302某地址的数据

voidWrite1302(unsignedcharucAddr,unsignedcharucDa)//ucAddr:

DS1302地址,ucData:

要写的数据

voidWrite1302(unsignedcharucAddr,unsignedcharucDa)

Write1302(0x8e,0x00);//允许写入

Write1302(0x8c,num);//写入year

Write1302(0x8e,0x80);//禁止写操作

4.2.2读18b20子程序

//读取温度

unsignedcharReadTemperature(void)

{

unsignedchara=0;

unsignedcharb=0;

unsignedchart=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

delay_18b20(200);

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=ReadOneChar();

b=ReadOneChar();

b<<=4;

b+=(a&0xf0)>>4;

t=b;

return(t);

}

4.2.3显示模块子程序

voiddisplay()

{

//年

P2=0xf0;

P0=seg[2];

delay

(1);

}

4.2.4按键子程序

图4.2.4按键子程序流程图

 

5总结

在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。

较好的完成了作品。

达到了预期的目的,在最初的设计中,相互学习、相互讨论、研究,完了最初的设想。

在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。

对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。

程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路。

在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。

也练就了我们的耐心,做什么事都在有耐心。

致谢:

感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。

感谢给我帮助的老师和同学,在你们的帮助下我才能完成这次设计。

 

参考文献

1.张齐,朱宁西单片机系统设计与开发华南理工大学电子机械出版社.2008

2.陈正振电子电路设计与制作广西交通职业技术学院信息工程系.2007

3.张友德,赵志英,涂时亮单片微型机复旦大学复旦大学出版社.2006

4.谭浩强.C程序设计(第三版).北京:

清华大学出版社.2005

5.谭浩强.C程序设计题解与上机指导(第三版).北京:

清华大学出版社.2005

6.徐慧林锐C语言实例解析精粹.武汉:

华中理工大学出版社.1996

7.戴建鹏译C语言大全(第三版).北京:

电子工业大学出版社.1994

8.杨恢先,黄辉先单片机原理及应用人民邮电出版社.2006

 

附录1硬件电路全图

 

 

附录2程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDS1302_CLK=P1^1;//实时时钟时钟线引脚

sbitDS1302_IO=P1^0;//实时时钟数据线引脚

sbitDS1302_RST=P1^2;//实时时钟复位线引脚

sbitDQ=P1^4;//18B20接口

sbitmode=P3^4;

sbitinc=P3^5;

sbitdec=P3^6;

sbitpower=P3^7;

sbitweek_wei=P1^5;//星期位选

sbitencode=P1^6;//译码器使能

sbitACC0=ACC^0;//累加器位定义

sbitACC7=ACC^7;

ucharcodeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchartemp,year,month,date,hour,minute,second,week,position;

bitflag;//开关显示标志

/*********************延时ms***********************/

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=112;y>0;y--);

}

/***********************************************************

******************DS1302驱动程序******************

************************************************************/

voidDS1302InputByte(unsignedchard)//实时时钟写入一字节(内部函数)

{

unsignedchari;

ACC=d;

for(i=8;i>0;i--)

{

DS1302_IO=ACC0;//相当于汇编中的RRC

DS1302_CLK=1;

DS1302_CLK=0;

ACC=ACC>>1;

}

}

unsignedcharDS1302OutputByte(void)//实时时钟读取一字节(内部函数)

{

unsignedchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;//相当于汇编中的RRC

ACC7=DS1302_IO;

DS1302_CLK=1;

DS1302_CLK=0;

}

return(ACC);

}

voidWrite1302(unsignedcharucAddr,unsignedcharucDa)//ucAddr:

DS1302地址,ucData:

要写的数据

{

DS1302_RST=0;

DS1302_CLK=0;

DS1302_RST=1;

DS1302InputByte(ucAddr);//地址,命令

DS1302InputByte(ucDa);//写1Byte数据

DS1302_CLK=1;

DS1302_RST=0;

}

unsignedcharRead1302(unsignedcharucAddr)//读取DS1302某地址的数据

{

unsignedcharucData;

DS1302_RST=0;

DS1302_CLK=0;

DS1302_RST=1;

DS1302InputByte(ucAddr|0x01);//地址,命令

ucData=DS1302OutputByte();//读1Byte数据

DS1302_CLK=1;

DS1302_RST=0;

return(ucData);

}

voidDS1302_init()

{

if(Read1302(0xc1)!

=0xf0)

{

Write1302(0x8e,0x00);//允许写操作

Write1302(0xc0,0xf0);//写入初始化标志,系统上电后检测此标志,即此子函数只会在第一次初始化一次。

/******时间初始值******/

Write1302(0x8c,0x10);//年

Write1302(0x88,0x04);//月

Write1302(0x86,0x06);//日

Write1302(0x84,0x22);//时

Write1302(0x82,0x59);//分

Write1302(0x80,0x55);//秒

Write1302(0x90,0xa4);//充电

Write1302(0x8e,0x80);//禁止写操作

}

}

/***********************************************************

******************DS18B20驱动程序******************

************************************************************/

/*************************************************************************************/

voiddelay_18b20(unsignedinti)//延时函数

{

while(i--);

}

/***************************************************************************************/

//18b20初始化函数

voidInit_DS18B20(void)

{

unsignedcharx=0;

DQ=1;//DQ复位

delay_18b20(8);//稍做延时

DQ=0;//单片机将DQ拉低

delay_18b20(80);//精确延时大于480us

DQ=1;//拉高总线

delay_18b20(10);

x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay_18b20(5);

}

//读一个字节

unsignedcharReadOneChar(void)

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18b20(5);

}

return(dat);

}

//写一个字节

voidWriteOneChar(unsignedchardat)

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

delay_18b20(5);

DQ=1;

dat>>=1;

}

delay_18b20(5);

}

//读取温度

unsignedcharReadTemperature(void)

{

unsignedchara=0;

unsignedcharb=0;

unsignedchart=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1