ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:786.32KB ,
资源ID:3285024      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3285024.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的万年历课程设计.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于单片机的万年历课程设计.docx

1、基于单片机的万年历课程设计单片机课程设计任务书1课程设计的内容和要求(包括原始数据、技术要求、工作要求等):一、设计万年历与显示电路时间和日期是人们所需要的重要数据之一,关系中生活的方方面面。获得时间和日期的方法,有日历、机械表、数字表等方法。数字万年历精度高、显示灵活,现在得到了广泛的应用。本设计就是来制作一个数字万年历二、主要技术指标与要求: 时间、日期、星期均可显示; 时间出现误差时可调; 万年历掉电后能够继续运行; 可实时显示环境温度。三设计思路(1)万年历可以采用专用的时钟芯片来产生,由芯片产生稳定的时间,单片机读取,处理,然后显示出来。(2)用键盘实现数据的输入,和显示模式的选择。

2、(3)显示方案选择:共阴数码管加专用驱动芯片可实现显示亮度可调、不闪烁的优点,而且软件编程较容易。(4)温度传感器采用数字温度传感器,可实现更高精度、更简单的硬件电路。制作起来简单。2对课程设计成果的要求包括图表、实物等硬件要求:设计电路,安装调试或仿真,分析实验结果,并写出设计说明书。要求图纸布局合理,符合工程要求,所有的器件的选择要有计算依据。3主要参考文献:1 李广弟. 单片机基础M. 北京:北京航空航天大学出版社,20012 何立民. 单片机高级教程:应用与设计M. 北京:北京航空航天大学出版社,20073 陈明义. 电工电子技术课程设计指导M. 长沙:中南大学出版社,20024 零点

3、工作室. 精通Protel DXP 2004电路设计M. 北京:电子工业出版社,20065 .4课程设计工作进度计划:序号起 迄 日 期工 作 内 容12010-12-20布置任务,教师讲解设计方法及要求22010-12-21学生查找阅读资料,并确定方案32010-12-222010-12-24学生设计设计硬件电路并调试通过42010-12-25学生编写软件程序52010-12-272010-12-28学生写说明书和论文62010-12-29答辩72010-12-31答辩主指导教师赵宇红日期: 2010 年 12 月 31 日摘 要: 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类

4、生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。 本设计是基于51系列的单片机进行的电子万年历设计,采用八位数码管显示年月日时分秒及温度信息,具有可调整日期和时间功能。时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。日历能显示阳历和阴历年、月、日以及星期、时、分、秒。设计以STC89C52RC单片机为核心,构成单片机控制电路;以DS1302时钟芯片作为万年历信号发生器;以DS18B20作为检测温度的传感器。关键词:可调万年历;单片机;时钟芯片DS1302;实时温度显示;数码管显示 1、系统概述及方法论证1.1系统概述 本

5、电子万年历采用单片机控制技术和数码管显示方案,可以很好的完成万年历和实时温度显示。时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。日历能显示阳历和阴历年、月、日以及星期、时、分、秒。 ()基本功能 显示年、月、日、时、分、秒。 时钟时间可调节。 时钟掉电继续运行。( 2 ) 扩展功能 多路闹钟。 实时温度显示 遥控调节时间。 电脑自同步时间1.2 系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证:方案一: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C

6、51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用AT89S52作为主控制系统.方案二: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。1.2.2 时钟芯片的选择方案和论证:方案一: 直接采用单片机定时计数器

7、提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA.且同组同学已从Maxim申请到了这种芯片,所以本设计采用了这种芯片。1.2.2 测温传感器方式选择: 测温可以采用热敏电阻加上模数转换得到电压,然后将测到的电压送到单片机,由单片机处理得到温度值。但是这种方法实现

8、起来复杂,且精度难以达到很高,所以本设计没有采用这种方式。DS18B20是一种数字温度传感器,一根线就可以与单片机IO联接,将测到的温度以数字形式传送到单片机,所以使用简单;它的测温误差为+-0.5度,可以达到较好的精度,在日常的应用中足够。这种芯片应用广泛,所以本设计也采用了这种测温方式。1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;数字式温度传感器;八位数码管动态扫描作为显示,以DS18B20作为检测温度的传感器。2、系统的硬件设计与实现2.1 电路设计框图 2.2 系统核心控制部分2.2.1 STC89C52

9、RC芯片介绍 STC89C52RC/RD+系列单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/周期和6时钟/周期可任意选择。图2.1 STC89C52RC引脚功能图2.2.2 STC89C52RC连接电路图图2.2 单片机与外围连接图2.3 DS1302时钟电路2.3.1 DS1302芯片介绍DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的

10、时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。2.3.2 DS1302引脚说明图2.3 DS1302引脚封装图DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.7

11、68kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。2.3.3 DS1302连接电路图图2.4 DS1

12、302连接图2.4 DS18B20数字温度传感器介绍2.4.1 DS18B20芯片介绍DS18B20 数字温度传感器是美国DALLAS公司生产的可组网数字温度传感器芯片,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。图2.5 DS18B20引脚封装图2.4.2 DS18B20连接电路图图2.6 DS18B20连接图2.5 MAX7219共阴数码管专用驱动芯片2.5.1 MAX7219芯片介绍MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个

13、片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150A的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。1 DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。 2,3,5-8,10,11 DIG 0DIG7 八个数据驱动线路置显示器共阴极为低电平。关闭时7219此管脚输 出高电平,722

14、1呈现高阻抗。 4,9 GND 地线 (4脚和9脚必须同时接地) 12 LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。 CS (MAX7221) 片选端。该端为低电平时串行数据被载入移位寄存器。连续数据的后 16位在cs端的上升沿时被锁定。 13 CLK 时钟序列输入端。最大速率为 10MHz.在时钟的上升沿, 数据移入内 部移位寄存器。 下降沿时, 数据从DOUT端输出。对MAX7221来 说,只有当cs端为低电平时时钟输入才有效。 14-17,20-23 SEG 7 段和小数点驱动,为显示器提供电流。当一个段驱动关闭时,7219的此端呈低电平,72

15、21呈现高阻抗。 18 SET 通过一个电阻连接到VDD 来提高段电流。 19 V+ 正极电压输入,+5V 24 DOUT 串行数据输出端口,从DIN输入的数据在16.5个时钟周期后在此端有效。当使用多个MAX7219/MAX7221时用此端方便扩展。2.5.2 MAX7219连接电路图图2.7 MAX7219与数码管连接图3、系统程序设计3.1 DS1302.h头文件设计#ifndef _DS1302_H_#define _DS1302_H_sbit DS1302_CLK = P22; /实时时钟时钟线引脚 sbit DS1302_IO = P21; /实时时钟数据线引脚 sbit DS13

16、02_RST = P20; /实时时钟复位线引脚sbit ACC0 = ACC0;sbit ACC7 = ACC7;typedef struct _SYSTEMTIME_ unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString9; unsigned char TimeString9;SYSTEMTIME; /定义的时

17、间类型#define AM(X) X#define PM(X) (X+12) / 转成24小时制#define DS1302_SECOND 0x80 /秒寄存器 #define DS1302_MINUTE 0x82 /分寄存器#define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C#define DS1302_RAM(X) (0xC0+(X)*2) /用于计算 DS1302_RAM 地址的宏 void DS1

18、302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned char i; ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; /发一个高跳变到低的脉冲 ACC = ACC 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于汇编中的 RRC ACC7 =

19、DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; /发一个高跳变到低的脉冲 return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST

20、 = 0; /RST 0-1-0,CLK 0-1 unsigned char Read1302(unsigned char ucAddr)/读取DS1302某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; /enable DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 读1Byte数据 DS1302_CLK = 1; /RST 0-1-0,CLK 0-1 DS1302_RST = 0; return(u

21、cData);void DS1302_SetProtect(bit flag) /是否写保护 if(flag) Write1302(0x8E,0x10); /WP=1,不能写入 else Write1302(0x8E,0x00);/WP=0,可以写入 void DS1302_SetTime(unsigned char Address, unsigned char Value) / 设置时间函数 DS1302_SetProtect(0); Write1302(Address, (Value/10)Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);

22、/转换成10进制的秒 ReadValue = Read1302(DS1302_MINUTE); Time-Minute = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR); Time-Hour = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_DAY); Time-Day = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302

23、(DS1302_WEEK); Time-Week = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH); Time-Month = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time-Year = (ReadValue&0xf0)4)*10 + (ReadValue&0x0F); void Initial_DS1302(void) unsigned char Second=Read

24、1302(DS1302_SECOND); if(Second&0x80) /如果第七为1(表明没有启动), 则启动时钟 DS1302_SetTime(DS1302_SECOND,0);#endif3.2 MAX7219.h头文件设计/*MAX7219驱动程序*/#define DECODE_MODE 0x09#define INTENSITY 0x0A#define SCAN_LIMIT 0x0B#define SHUTDOWN 0x0C#define DISPLAY_TEST 0x0Funsigned char dispcode=0x7e,0x30,0x6d,0x79,0x33,0x5b,0

25、x5f,0x70,0x7f,0x7b,0x01;sbit DIN = P12;sbit LOAD = P11;sbit CLK = P10;void send_max7219(unsigned char addr1,unsigned char data1) unsigned char i,mask; LOAD = 0; for (i=8; i0; i-) mask = 1 0; i-) mask = 1 0;j-); unsigned char button_time(unsigned char n,unsigned char x) /时钟调整子程序 /key1是自增 if(key1=0) d

26、elay(50); if(key1=0) n+; if(n=x) /x为最大值 n=0; while(key1=0); return n;unsigned char button_date(unsigned char n,unsigned char x) /日期调整子程序 if(key1=0) delay(50); if(key1=0) n+; if(n=x) n=1; while(key1=0); return n;void display(unsigned char hour10,unsigned char hour1,unsigned char minute10,unsigned char minute1,unsigned char second10,unsigned char second1) /显示子程序

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

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