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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机电子万历设计分析方案书.docx

1、单片机电子万历设计分析方案书摘 要随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS130。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用35V电压供电。综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符

2、合电子仪器仪表的发展趋势,具有广阔的市场前景。关键词:时钟电钟,DS1302,动态扫描,单片机1 方案论证1.1 单片机芯片的选择方案和论证方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内

3、部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。1.2显示模块选择方案和论证方案一:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以

4、也不用此种作为显示。方案三: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,并且我做的最小系统上带一个TS1620-1,和AT89S52已经接好,省了很多麻烦,所以在此设计中采用LCD液晶显示屏。1.3 时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做

5、为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA。1.4 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统。 DS1302提供时钟。LCD液晶显示屏作为显示。2 系统的硬件设计与实现2.1 电路设计框图图1系统原理图2.2 系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可

6、采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由LCD液晶显示屏显示。2.3 主要单元电路的设计2.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接外

7、部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。 如图2 所示:图2 主控制系统2.3.2 时钟电路模块的设计图.3示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源

8、,外接32.KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端 时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化

9、,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表.2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前

10、,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2 DS1302的控制字节:DS1302控制字节的高有效位位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位 数据输入输出 DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RA

11、M相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写、FFH(读。 2.3.4 显示模块的设计如图.4为LCD显示模块,和最小系统上的连线一样,无需修改。图-4 LCD液晶显示屏显示模块3 系统的软件设计3.1 程序流程框图 图5主程序流程图图6 时间调整程序流程图4 测试与结果分析4.1 硬件测试电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很

12、大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺破带有包皮的导线,则会对电路造成短路现象。在本成电子万年历的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:)LCD液晶显示屏显示部分已经连在最小系统上,节省了不少时间和精力。2)对万年历修改时间或日期时,有时LCD液晶显示屏被屏蔽掉,造成不亮现象。解决:根据仪器的测试,发现电路的驱动能力不足,最后在DS1302时钟芯片的/CS、SCLK、RET端接入5.1K的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。4.2 软件测试电子万年历是多功能的数字型,可以看当前日期,时间。电子万年

13、历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。在软件的调试过程中遇到的主要问题是: 1.烧入程序后,LCD液晶显示屏显示亮度不好。 解决:一遍旋转10K欧的滑动变阻器,一遍观看LCD显示屏,知道看到合适的亮度为止。4.3 测试结果分析与结论4.3.1 测试结果分析 1.在测试中遇到LCD液晶显示屏为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏,滑动变阻器器没有调好:查看烧写的程序是否正确无误,对程序进行认真修改。4.3.2 测试结论经过多次的反复测试与分析,可以

14、对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。同时在软件的编程方面得到更到的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。5 课设总结在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品,达到了预期的目的,完了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。反而达到事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了

15、思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次比赛中学到了很多很多东西,这是最重要的。总之,此次课设使我的能力得到了全方位的提高。致 谢感谢学院给我提供了一个展现自己的舞台,给我一次难得煅炼的机会,使得我的动手能力和专业技能都有了很大的提高。在做课设的日子里得到了陈老师王老师的悉心指导,在此向他们致以诚挚的谢意。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我们对这次的作品完成有了信心和动力,也给了我们很多无私的帮助和支持,我们在此深表谢意。参考文献1刘勇 编 数字电路 电子工业出版社 20042陈

16、正振 编 电子电路设计与制作 广西交通职业技术学院信息工程系 20073杨子文 编 单片机原理及应用 西安电子科技大学出版社 20064 王法能 编 单片机原理及应用 科学出版社 2004附录一:系统电路图附录二:系统程序清单#include #include /#include LCD1602.h/#include DS1302.h#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P17。 /实时时钟时钟线引脚 sbit DS1302_IO = P16。 /实时时钟数据线引脚 sbit DS1302_R

17、ST = P15。 /实时时钟复位线引脚sbit ACC0 = ACC0。sbit ACC7 = ACC7。char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year。 /秒,分,时到日,月,年位闪的计数sbit Set = P20。 /模式切换键sbit Up = P21。 /加法按钮sbit Down = P22。 /减法按钮sbit out = P23。 /立刻跳出调整模式按钮char done,count,temp,flag,up_flag,down_flag。uchar TempBuffer5,we

18、ek_value2。void show_time(。 /液晶显示程序/*1602液晶显示部分子程序*/Port Definitions*sbit LcdRs = P25。sbit LcdRw = P26。sbit LcdEn = P27。sfr DBPort = 0x80。 /P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/内部等待函数*unsigned char LCD_Wait(voidLcdRs=0。LcdRw=1。 _nop_(。LcdEn=1。 _nop_(。 LcdEn=0。return DBPort。 /向LCD写入命令或数据*#define LCD_C

19、OMMAND 0 / Command#define LCD_DATA 1 / Data#define LCD_CLEAR_SCREEN 0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char inputLcdEn=0。LcdRs=style。LcdRw=0。 _nop_(。DBPort=input。 _nop_(。/注意顺序LcdEn=1。 _nop_(。/注意顺序LcdEn=0。 _nop_(。LCD_Wait(。 /设置显示模式*#define LCD_SHOW 0x04 /显示开#d

20、efine LCD_HIDE 0x00 /显示关 #define LCD_CURSOR 0x02 /显示光标#define LCD_NO_CURSOR 0x00 /无光标 #define LCD_FLASH 0x01 /光标闪动#define LCD_NO_FLASH 0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayModeLCD_Write(LCD_COMMAND, 0x08|DisplayMode。 /设置输入模式*#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 / default#def

21、ine LCD_MOVE 0x01 / 画面可平移#define LCD_NO_MOVE 0x00 /defaultvoid LCD_SetInput(unsigned char InputModeLCD_Write(LCD_COMMAND, 0x04|InputMode。/初始化LCD*void LCD_Initial(LcdEn=0。 LCD_Write(LCD_COMMAND,0x38。 /8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38。 LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR。 /开启显示, 无光标 LCD_

22、Write(LCD_COMMAND,LCD_CLEAR_SCREEN。 /清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE。 /AC递增, 画面不动/液晶字符输入的位置*void GotoXY(unsigned char x, unsigned char yif(y=0LCD_Write(LCD_COMMAND,0x80|x。 if(y=1LCD_Write(LCD_COMMAND,0x80|(x-0x40。/将字符输出到液晶显示void Print(unsigned char *strwhile(*str!=0 LCD_Write(LCD_DATA,*str。str

23、+。/*DS1302时钟部分子程序*/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 DateString11。 unsigned char TimeString9。SYSTEMTIME。 /定义的时间类型SYSTEMTIME CurrentTime。#define AM(X

24、 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 void DS1302InputByte(unsigned char d /实时时钟写入一字节(内部函数 unsigned char i。ACC = d。 f

25、or(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 = DS1302_IO。 DS1302_CLK = 1。DS1302_CLK = 0。 return(ACC。 void Write1302(unsigned char ucAddr,

26、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 = 0。 unsigned char Read1302(unsigned char ucAddr /读取DS1302某地址的数据 unsigned char ucData。 DS1302_RST = 0。 DS130

27、2_CLK = 0。 DS1302_RST = 1。 DS1302InputByte(ucAddr|0x01。 / 地址,命令 ucData = DS1302OutputByte(。 / 读1Byte数据 DS1302_CLK = 1。 DS1302_RST = 0。 return(ucData。void DS1302_GetTime(SYSTEMTIME *Time /获取时钟芯片的时钟数据到自定义的结构型数组unsigned char ReadValue。 ReadValue = Read1302(DS1302_SECOND。 Time-Second = (ReadValue&0x704*

28、10 + (ReadValue&0x0F。 ReadValue = Read1302(DS1302_MINUTE。 Time-Minute = (ReadValue&0x704*10 + (ReadValue&0x0F。 ReadValue = Read1302(DS1302_HOUR。 Time-Hour = (ReadValue&0x704*10 + (ReadValue&0x0F。 ReadValue = Read1302(DS1302_DAY。 Time-Day = (ReadValue&0x704*10 + (ReadValue&0x0F。 ReadValue = Read1302(DS1302_WEEK。 Time-Week = (ReadValue&0x704*10 + (ReadValue&0x0F。 ReadValue = Read1302(DS1302_MONTH。 Time-Month = (ReadValue&0x704*10 + (ReadValue&0x0F。 ReadValue

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

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