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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于AT89C52的数字时钟.docx

1、基于AT89C52的数字时钟 电子系统设计创新实验报告题目: 基于AT89C52的数字时钟 学生姓名: 学生学号: 专业名称: 电子信息工程 指导教师: 2013年12月29 日一系统总体设计 数字时钟设计框图如图所示,系统共由三部分组成:主控制器、按键控制电路,1602LCD显示电路。其中按键控制电路用于校准时,分,秒。1602液晶实时显示时间。二系统硬件电路设计 (1)系统的复位电路任何含有计算机的系统,在启动运行时都需要复位,以便CPU和系统中的其他部件都处于某一确定的初始状态,并从这个状态开始执行工作。同样,单片机在外界的干扰下出现程序跑飞或者进入死循环的状况时,需要人为低进行复位操作

2、,恢复正常状态。因此,手动复位是微机子系统的一个基本功能要求。复位电路如下图所示:该复位电路由R2,C3和开关K组成,当开关K断开时,C3两端电压较高,单片机RST端则为高电平,而当开关K闭合时,RST端接地,变为低电平,此时单片机复位(2)时钟电路此系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。这个放大器外接晶体谐振器以及电容CX1和CX2构成并联谐振电路,接在放大器的反馈回路中构成时钟电路。时钟频率越高,单片机控制器的控制节拍越快,运算速度也就越快。(3)独立按键 本例所需要三个独立按键,由于此设计较功能简单,按键数目

3、较少。故本系统采用扫描式的独立按键,同时利用软件消抖。 (4)LCD1602 液晶显示 本设计仅需要显示数字和分隔号,故选择直接可以和5V的TTL电平兼容16*2的LCD1602 液晶集成模块 三系统软件设计 (1)软件流程图主函数流程图 (2)源程序主程序: #includeextern void display();extern void lcd_init(); sbit adjust_hour=P13; sbit adjust_minute=P14; sbit adjust_second=P15; unsigned int hour,minute,second; unsigned cha

4、r count,show16; void delay1() unsigned char i; for(i=0;i200;i+); void main() EA=1; ET0=1; TMOD=0X01; TH0=-5000/256; TL0=-5000%256; show3=:; show6=:; count=0; minute=0; hour=0; second=0; lcd_init(); while(1) if(adjust_second=0) delay1(); if(adjust_second=0) TR0=0; if(+second=60) second=0; while(!adju

5、st_second) display(); else if(adjust_minute=0) delay1(); if(adjust_minute=0) TR0=0; if(+minute=60) minute=0; while(!adjust_minute) display(); else if(adjust_hour=0) delay1(); if(adjust_hour=0) TR0=0; if(+hour=24) hour=0; while(!adjust_hour) display(); else TR0=1; display(); void timer()interrupt 1 i

6、f(+count=20) count=0; if(+second=60) second=0; if(+minute=60) minute=0; if(+hour=24) hour=0; 液晶显示子程序:#include intrins.h#includesbit rs=P24; sbit rw=P25;sbit ep=P26;extern unsigned char show16;extern unsigned int second,minute,hour;void delay(unsigned char ms) unsigned char i; while(ms-) for(i=0;i250

7、;i-) _nop_(); _nop_(); _nop_(); _nop_(); bit lcd_bz() bit result; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P0&0x80); ep=0; return result; void LCD_cls() /LCD清屏 while(lcd_bz(); rs=0; rw=0; P0=1; ep=1; ep=0; void lcd_wcmd(unsigned char cmd) while(lcd_bz(); rs=0; rw=0; ep=0; _

8、nop_(); _nop_(); P0=cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; void lcd_pos(unsigned char pos) lcd_wcmd(pos|0x80); void lcd_wdat(unsigned char dat) while(lcd_bz(); rs=1; rw=0; ep=0; P0=dat; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop

9、_(); _nop_(); ep=0; void lcd_init() lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); LCD_cls(); void display() unsigned char i; show1=hour/10+0x30; show2=hour%10+0x30; show4=minute/10+0x30; show5=minute%10+0x30; show7=second/10+0x30; show8=secon

10、d%10+0x30; lcd_pos(0x42); for(i=0;i16;i+) lcd_wdat(showi); 四系统仿真初始化时,显示的时间 校准之后显示的时间从仿真效果上来看基本上完成了,设计要求五系统整体电路图如下 六、系统测试及调试(仿真) 1) 软件调试 软件调试,我们是在keil软件平台和单片机学习板上来完成的。当我们写部分程序在keil软件经过调试,开始出现很多错误和警告。通过逐个错误排错及修改。得出下列经验:(1)调用函数最好在头文件中进行申明,主函数写在最后;(2)特别注意一些字母的大小写,一般要用英语文字写,不要用中文汉写,这是最不容易检查的,如我在检查液晶显示程序时

11、,时钟没检查到错误,最后我删掉此行重新写,错误排除了,据我分析可能是中英文变换时出现问题。 经过一系列排错,最后文件没有错误但还有警告。由于c语言中有警告是没关系的,我将HEX文件下在到单片机竟显示一些乱码。我有回到文件,经过对警告的分析及上网查阅。将程序稍微修改警告慢慢被排除,最后没有错误和警告了,下载到单片机,发现乱码竟然还出现,还有多个界面叠加显示,里面还有一些乱码。经过分析,叠屏现象是没有对液晶清平所致。于是我又在不同界面程序前加入调用填充空格函数(void clrram_lcd ()),然后又下载,结果与前面一样,崩溃啊!经过几个小时后,无意间我去掉 调用函数前void。结果叠屏现象

12、解决。但是显示还是乱码。 又经过几天,排错,上网查阅与参考程序对照。最后在void R1302()函数中DS1302InputByte(ucAddr|0x01);掉了|0x01,加上生成HEX文件,下载到单片机中。能够正常显示了。界面的闪烁不能闪烁。 经过一段时间,我发现界面程序中的a=1与功能设置中a重赋值(a=0)相冲突,最后将if()语句中a=1改为a=0 。相应的问题也解决了。 最后对程序进行相应的扩展完善,由于按键不灵敏我们加上声音程序。加上另一个闹钟实现设计需求。 通过单片机学习板对照,程序基本实现我所预期的要求,但是界面显示闹钟1,闹钟2闪烁时,液晶竟然出现显示淡化。据分析,可能

13、使程序的问题。由于这部分显示复杂,用了多个if语句,可能出现语句冗余。 2)硬件调试 硬件调试,我们用万用表,单片机学习板来完成的。首先,我们调试LCD1602显示。我将液晶显示程序下载到单片机内,连好所有的线,通电后,观察显示结果。唉!液晶竟然不显示。我们用万用表测试各连线是否导通及某些点的电压,发现没问题。最后在网上发现我的P0口竟然没接上拉电阻,通过计算电阻应该去5K至10K,我们选用4.7k的电阻。由于没准备多的电阻,我在以前买的电阻找到了4.7k的电阻。开始布局没有为上拉电阻留下空间,我们在单片机插槽里插电阻,解决一些连线的复杂度。后来在调试液晶能够显示了。 然后,我们调试DS1302时钟芯片。连上按键模块,液晶显示模块,单片机最小系统,时钟系统,温度系统,连接所有线,通上电源后,我们观察到液晶显示 20858585 85:85:85 20.125C 温度能正常显示,时钟不能正常显示。我们还是用万用表检查所用线路,对照电路原理图,最后发现时钟上拉电阻没焊上电源。接上电源后,时钟能够正常显示,按键也能控制。 最后,我们对报警模块进行简单调试。最后发现没问题。七、结论系统在仿真过程中比较顺利,没有出现什么大问题,在实际电路中,都表现的很完整,能实现预期的所有要求。

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

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