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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

电子万年历设计与调试.docx

1、电子万年历设计与调试第1章 方案论证与比较以单片机为控制器设计的电子万年历单片机最小系统、利用温度传感器采集外界温度,利用时钟控制芯片进行时间控制,利用输入器件进行参数调整,并通过显示设备进行参数显示。1.1控制器选择方案一:AT89S52(图1-1)是ATMEL公司一款高性能8位单片机,兼容标准的MCS51指令系统级80C51引脚结构,片内含8K的可反复擦写的Flash只读存储器,256B的内部数据存储器,具有4个并行I/O口,1个全双工串行口, 3个16位的定时/计数器,6个中断源,2个中断优先级,广泛应用于各种控制系统中。 图1-1方案二:STC89C52RC(图1-2)是宏晶科技公司的

2、一款高性能低功耗8位单片机,兼容标准的8051内核,片内含8K的可反复擦写的Flash只读存储器,256B的内部数据存储器,具有4个并行I/O口,1个全双工串行口, 3个16位的定时/计数器,6个中断源,2个中断优先级,广泛应用于各种控制系统中。 图1-2方案选择:二者在结构和功能上基本一样,与AT89S52相比,STC89C52RC具有更好的性价比,实用性好,因此选择STC89C52RC为控制器。1.2显示设备选择方案1:LED数码管(图1-3)是由LED发光二极管组合显示字符的显示器件。它使用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点,故通常称为7段发光二极管。数码管

3、静态显示特点是数码管恒定亮,亮度较高,显示某个数值,直到显示字符的编码改变为止。这种显示方式由于太占据I/O线,所以用于1个或较少数码管显示的场合。数码管动态显示特点是数码管轮流点亮,显示亮度不够,所以通常加驱动电路,由于此中显示方式可以节省I/O口,所以用于多个数码管显示的场合。 图1-3方案2:LCD液晶屏(如图1-4)是一种专门用于显示字母、数字、符号等ASCII码的显示器件。LCD1602是一种常用的字符型液晶显示器,控制器大部分为HD44780,接口标准为SIP16引脚,分电源、通讯数据和控制3部分。LCD1602芯片和背光电路工作电压与单片机兼容,可以很方便的与单片机连接。 图1-

4、4 方案选择:LED数码管占I/O线较多设计不方便,LCD1602可以显示跟多内容节省I/O口可以很方便的与单片机连接故选LCD1602液晶屏。 1.3输入器件选择方案1:独立按键(如图1-5)的使用较简单,其特点是每个按键单独占用一根I/O口线,每个按键不会影响其它I/O口线的状态。方案2:矩阵按键(如图1-6)采用行列式结构并按照矩阵形式排列,可以节省I/O口。 图1-5 图1-6按键选择:由于电路需要按键功能较多所以选择独立按键更加方便。 1.4温度传感器 方案1:数字温度传感器(DS18 B20)(如图1-7)是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单、体积小的特

5、点。因此用它来组成一个测温系统,具有线路简单,在一根通信线可以接多个相同数字温度计的优点,十分方便。 方案2:DS1621是DALLAS(如图1-8)公司生产的一种功能较强的数字式温度传感器和恒温控制器。与同系列的DS1620相比控制更为简单,接口与12C总线兼容,且可以使用一片控制器控制多达8片的DS1621,其数字温度输出达9位,精度为0.5。通过读取内部的计数值和用于温度补偿的每摄氏度计数值,利用公式计算还可提高温度值的精度。DS1621可工作在最低2.7V电压下,适用于低功耗应用系统。利用DS1621和一片51单片机即可构成一个简洁但功能强大的低电压温度测量控制系统 图1-7 图1-8

6、 1.5时间控制芯片方案1时钟芯片DS12887是一个内嵌锂电池的并行通讯芯片,该器件提供完整的实时时钟/日历、定时闹钟,还包含三个可屏蔽中断(共用一个中断输出)以及可编程方波输出。DS12887内部还提供114字节静态RAM ,这些存储器是内部锂电池供电的,因此数据不会丢失。DS12C887对于少于31天的月份,其日期能够在月末自动调整,带有闰年的月份可以自动补偿。该器件可配置为24小时或12小时格式。精确的温度补偿电路用于监视的VCC状态。一旦检测到主电源失效,器件可自动切换到备用电源。支持Intel和Motorola模式。主要特点是:RTC计算秒、分、时、星期、日、月、年信息,具有润年补

7、偿,有效期至2099年; 用二进制或BCD表示时间 ;具有AM、PM标示的12小时模式或24小时模式 ;可选择Intel或Motorola总线时序 ;内部包含128字节存储单元,其中114字节供用户自由使用;三路中断可分别通过软件屏蔽与检测 ;闹钟可设置为每秒一次至每星期一次 ;可编程的方波输出信号; 自动电源失效检测和切换电路。方案2 DS1302是一种可编程的串行实时时钟芯片,内部具有实时时钟、日历和用户可用RAM,可计算2100年之前的秒、分、时、日、月、周、年,且对月末日期、闰年天数可自动调整,RAM容量为318bit,以SPI串行总线方式向单片机传送单字节或多字节的实时时间数据,当主

8、电源断电时备用电源可继续保持时钟连续运行。方案选择:第2章 仿真电路设计2.1控制系统框图根据控制系统要求设计的电子万年历控制系统由单片机STC89S52RC构成的最小系统,由独立按键构成的按键扫描电路、由LCD1602构成的显示电路,由DS1302构成的时间控制电路以及由DS18B20构成的温度采集电路等,控制系统框图如图2-1所示。图2-1 控制系统框图2.2仿真电路设计设计的电子万年历仿真图如图2-2所示,其中单片机最小系统由单片机、时钟电路、复位电路和电源组成,按键扫描电路由选择、调整和确定三个独立按键构成,温度采集电路由单总线温度传感器DS18B20和上拉电阻组成,时钟控制电路由时间

9、IC总线协议的时钟芯片DS1302和晶振构成,液晶显示电路由LCD1602液晶和排阻以并行连接方式与单片机相连,滑动变阻器用来调节液晶显示亮度。图2-2 电子万年历仿真图2.3 主要元器件清单电子万年历元器件清单如表2-1所示:表2-1 电子万年历元器件清单序号元器件名称规格型号数量标号备注1单片机STC89S52RC1U1DIP封装2液晶LM016L1LCD1并行接口3按键四脚4功能控制4晶振12MHz1X1时钟电路532768Hz1X2时钟控制6电容30pF2C1 C2瓷片,时钟电路10uf1C3电解,复位电路7电阻10k1R1复位4.7k1R2上拉8温度传感器DS18B201U2温度采集

10、9时钟控制芯片DS13021U3时间控制10排阻1K1RP1上拉电阻第3章 软件程序设计电子万年历程序采用自下而上的模块化编程方式,根据控制任务要求,将程序划分为主程序、液晶显示模块、温度采集模块、时间控制模块和按键扫描模块5个模块,其结构如图3-1所示:图3-1 程序结构图 3.1 液晶显示模块液晶显示模块完成日期、时间和温度显示,主要有初始化函数、写命令函数、写数据函数和液晶显示函数4部分组成。(1)液晶写命令函数液晶写命令操作时序图如图3-2所示,由此设计的流程图如图3-3所示:图3-2 液晶写命令操作时序图(2)液晶写数据函数液晶写数据操作时序图如图3-4所示,由此设计的流程图如图3-

11、5所示:图3-4 液晶写数据操作时序图 图3-3 写命令流程图 图3-5 写数据流程图(3)液晶初始化函数液晶初始化函数流程图如图3-6所示: 图3-6液晶显示函数流程图如图3-7所示: 图3-7 液晶显示模块程序清单如下:/*头文件及宏定义*/#include#define uchar unsigned char/*变量声明及定义*/sbit RS=P22;sbit RW=P23;sbit E=P24;uchar lcd1=D: - - W: ;uchar lcd2=T: : : T: ;/*延时函数*/void delay() uchar x; for(x=100;x0;x-);/*液晶写

12、命令控制函数*/void lcd_com(uchar com) RS=0; /命令 RW=0; /写操作 E=1; /使能有效 P0=com; /送命令 E=0; /使能无效 delay(); /延时 RW=1; /复位 RS=1;/*液晶写数据控制函数*/void lcd_dat(uchar dat) RS=1; /数据 RW=0; /写操作 E=1; /使能有效 P0=dat; /送数据 E=0; /使能无效 delay(); /延时 RW=1; /复位 RS=1;/*液晶初始化控制函数*/void lcd_init() lcd_com(0x38); /模式设置 lcd_com(0x0c)

13、; /显示设置 lcd_com(0x01); /清屏 lcd_com(0x06); /输入模式/*液晶显示控制函数*/void disp_lcd() uchar i; lcd_com(0x80); /第一行地址 for(i=0;i16;i+) lcd_dat(lcd1i); lcd_com(0xc0); /第二行地址 for(i=0;i16;i+) lcd_dat(lcd2i);3.2 温度控制模块温度控制模块包括DS18B20初始化函数、写字节函数、读字节函数、温度控制函数4个部分。(1)初始化函数DS18B20初始化时序图如图3-8所示,流程图如图3-9所示。图3-8图3-9 初始化流程图

14、(2)写字节函数DS18B20写字节函数时序图如图3-10所示,流程图如图3-11所示。图3-10 写字节时序图图3-11 写字节流程图(2)读字节函数DS18B20读字节函数时序图如图3-12所示,流程图如图3-13所示。图3-12 写数据时序图图3-13 写数据流程图(4)温度控制函数温度控制函数流程图如图3-14所示。图3-13 写数据流程图温度控制程序头文件如下:#ifndef _DS18B20_H_#define _DS18B20_H_ void temperate();#endif温度控制程序清单如下:/*头文件及宏定义*/#include#define uchar unsigne

15、d char/*变量声明及定义*/uchar t,value=0x00,0x00;bit s;sbit DQ=P17;extern uchar lcd2;/*延时控制函数*/void del(uchar t) /7us uchar i; for(i=t;i0;i-);/*18B20初始化控制函数*/uchar init_18b20() uchar status; DQ=1; DQ=0; del(100); /700us DQ=1; del(5); /35us status=DQ; del(25); /175us DQ=1; del(30); /210us return status; /*读1

16、8B20控制函数*/uchar rd_18b20() uchar i,dat=0; for(i=0;i=1; DQ=1; if(DQ=1) dat|=0x80; del(5); /35us DQ=1; return dat; /*写18B20控制函数*/void wr_18b20(uchar dat) uchar i; DQ=1; for(i=0;i=1; /*温度控制函数*/void temperate() init_18b20(); wr_18b20(0xcc); wr_18b20(0x44); init_18b20(); wr_18b20(0xcc); wr_18b20(0xbe); v

17、alue0=rd_18b20(); value1=rd_18b20(); if(value1&0xf8)=0xf8) s=1; value0=value0+1; if(value0=0x00) value1=value1+1; else value1=value1; else s=0; t=(value04)|(value14); if(s=1) lcd213=-; else lcd213=t/100+0; lcd214=t%100/10+0; lcd215=t%10+0; 3.3 时间控制模块时间控制模块包括读字节函数、写字节函数、读数据函数、写数据函数和初始化函数5部分组成。(1)读字节函

18、数读字节操作时序图如图3-14所示,读字节函数流程图如图3-15所示:图3-14 读字节操作时序图 图3-15 读字节函数流程图 (2)写字节函数写字节操作时序图如图3-16所示,读字节函数流程图如图3-17所示:图3-16 写字节操作时序图(3)读数据函数读数据函数流程图如图3-18所示:(4)写数据函数写数据函数流程图如图3-19所示: 图1-7 图1-8 图1-9(5)初始化函数初始化函数流程图如图3-20所示:时间控制模块头文件如下:#ifndef _1302_H_#define _1302_H_ #define uchar unsigned charvoid set_1302(uch

19、ar wei,uchar beet);void time();#endif时间控制模块程序清单如下:/*头文件及宏定义*/#include#define uchar unsigned char#define uint unsigned int/*变量声明及定义*/sbit CLK=P10;sbit SDA=P11;sbit RST=P12;uchar *week=*,SUN,MON,TUS,WEN,THU,FRI,SAT;uchar datetime7;extern bit flag;extern uchar lcd1,lcd2;/*1302写数据控制函数*/void wr_1302(ucha

20、r dat) uchar i; for(i=0;i=1; /*1302读数据控制函数*/uchar rd_1302() uchar i,b,t; for(i=0;i=1; t=SDA; b|=t7; CLK=1; CLK=0; return b/16*10+b%16; /*读数据控制函数*/uchar rd_dat(uchar addr) uchar dat; RST=0; CLK=0; RST=1; wr_1302(addr); dat=rd_1302(); CLK=1; RST=0; return dat;/*写数据控制函数*/void wr_dat(uchar add,uchar dat

21、) RST=0; CLK=0; RST=1; wr_1302(add); CLK=0; wr_1302(dat); CLK=0; RST=0;/*时间数据写入控制函数*/void set_1302(uchar wei,uchar beet) wr_dat(0x8e,0x00); wr_dat(wei,beet); wr_dat(0x8e,0x80);/*时间控制函数*/void time() uchar i; if(flag=0) for(i=0;i7;i+) datetimei=rd_dat(0x81+2*i); lcd113=*(weekdatetime5); lcd114=*(weekd

22、atetime5+1); lcd115=*(weekdatetime5+2); lcd18=datetime3/10+0; lcd19=datetime3%10+0; lcd15=datetime4/10+0; lcd16=datetime4%10+0; lcd12=datetime6/10+0; lcd13=datetime6%10+0; lcd28=datetime0/10+0; lcd29=datetime0%10+0; lcd25=datetime1/10+0; lcd26=datetime1%10+0; lcd22=datetime2/10+0; lcd23=datetime2%10

23、+0; 3.4 按键扫描模块按键扫描模块包含延时消抖函数、按键处理函数、选择按键函数、调节按键函数和确定按键函数5个部分。(1)按键处理函数按键处理函数程序流程图如图3-22所示:图3-22 按键处理函数程序流程图(2)选择按键函数选择按键函数程序流程图如图3-23所示:(3)确定按键函数确定按键函数程序流程图如图3-24所示:图3-23 图 3-24(4)调节按键函数调节按键函数程序流程图如图3-25所示:图3-25按键处理模块头文件如下:#ifndef _KEY_H_#define _KEY_H_void key();#endif按键处理模块程序清单如下:/*头文件及宏定义*/#inclu

24、de#include1302.h/*变量声明及定义*/#define uchar unsigned charuchar k,set,shi,fen,miao,day,month,w,year;bit flag;extern uchar lcd1,lcd2,*week;/*按键消抖函数*/void del() uchar i,j; for(i=0;i10;i+) for(j=0;j250;j+); /*选择按键控制函数*/void key_xuan() flag=1; set+; if(set=7) set=0; /*调节按键控制函数*/void key_tiao() if(set=0) yea

25、r+; if(year=100) year=0; lcd12=year/10+0; lcd13=year%10+0; if(set=1) month+; if(month=13) month=1; lcd15=month/10+0; lcd16=month%10+0; if(set=2) day+; if(month=0)|(month=2)|(month=4)|(month=6) |(month=7)|(month=9)|(month=11)&(day=32) day=1; if(month=3)|(month=5)|(month=8)|(month=10)&(day=31) day=1; if(year%4=0)&(month=2)&(day=30) day=1; if(year%4!=0)&(month=2)&(day=29) day=1; lcd18=day/10+0; lcd19=day%10+0; if(set=3) w+; if(w=8) w=1; lcd113=*(weekw); lcd114=*(weekw+1); lcd115=*(weekw+2); if(set=4) shi+; if(sh

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

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