




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理课程设计题 目:基于AT89C52的电子时钟设计姓 名:学 院:专业:班级:学号:指导教师:年月日南京农业大学教务处制aortiu目录摘要 2关键词2引言 21设计要求与方案论证2设计要求 2系统方案选择方案和论证 21.2.1 单片机芯片的选择方案和论证 21.2.2 显示模块选择方案和论证 31.2.3 时钟芯片的选择方案和论证 32. 系 统 的 硬 件 设 计 与 实 现 3 电路设计框图 3 系统硬件概述 3主要单元电路的设计 42.3.1 单片机主控制模块的设计 42.3.2 时钟电路模块的设计 42.3.3 键盘模块设计 52.3.4 蜂鸣器模块的设计 52.3.5 显
2、示模块的设计53. 系统的软件设计6程序流程框图 6 程序的设计 74. 系 统 调 试 7 软件调试 7 硬件调试 8实验箱调试结果 85. 总结心得体会 9 附录一:系统程序 9基于AT89C52的电子时钟设计 指导教师:吕成绪 胡飞摘要: 单片机在电子产品中的应用越来越广泛,特别是 51 系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。AT89C52就是51系列中的一个比较成熟的型号。本设计是一个多功能的实时时钟,带秒表、整点报时、闹铃、调整时间等功能。可按键直接设置闹铃时间。由AT89C51单片机、DS1302、LCD1602等模块组成。现代社会,时间就是金钱,时
3、钟是每个人的必 备品。本设计实现了所需功能,给大家带来方便,整体性好、人性化强、可靠性高,实现了时钟的 多功能应用。关键词: 电子时钟; DS1302;LCD1602;引言:随着科技的快速发展,时间的流逝 , 从观太阳、摆钟到现在电子钟,人类不断研究, 不断创新纪录。美国 DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路 DS1302它可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等多种功能, 而且DS1302的使用寿命长,误差小。对于数字电子时钟采用直观的数字显示,可以同 时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该设计 以AT89C51单片
4、机作为核心,功耗小,能在3V的低压工作,电压可选用35V电压供电综上所述,此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉 等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1. 设计要求与方案 设计要求:(1) 启动时显示制作的年、月、日、制作者的学号等信息(2) 24 小时计时功能(精确到秒)(3) 整点报时功能。(4) 秒表功能(5) 省电功能模式(未设计) 系统基本方案选择1.2.1 单片机芯片的选择方案和论证采用89C51芯片作为硬件核心,采用 Flash ROM,内部具有4KB ROM存储空间,能 于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但
5、是运用于电路设计中时由于 不具备 ISP 在线编程技术 , 当在对电路进行调试时,由于程序的错误修改或对程序的新 增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。采用AT89S52片内RO全都采用Flash ROM能以3V的超底压工作;同时也与MCS-51 系列单片机完全该芯片内部存储器为 8KBROM存储空间,同样具有89C51的功能,且具 有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增 功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。相比之下,我们在实验箱实际仿真时选择采用AT89S52作为主控制系统,由于proteus库中没有
6、AT89S52在原理图仿真时采用了 AT89C51.1.2.2显示模块选择方案和论证方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于 显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种 作为显示方案二:采用LCD液晶显示屏,液晶显示屏的显示功能强大,显示多样,清晰可见.本设计采用LCD1602.123时钟芯片的选择方案和论证直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、时、分、秒计 数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以 不米用此方案。采用DS1302时钟芯片实现时钟,DS1302芯片是
7、一种高性能的时钟芯片,可自动对 秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM故为数据暂存区,工作电压范围内,时耗电小于300nA.综上各方案所述,对此次作品的方案选定:采用AT89C52作为主控制系统,DS1302 提供时钟计时,LCD1602屏幕显示.2. 系统的硬件设计与实现 电路设计框图系统硬件概述本电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带 RAM勺实时时钟电 路,它可以对年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为。 采用三线接口与CPU进行
8、同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM数据。DS1302内部有一个31*8的用于临时性存放数据的 RAM寄存器。可产生年、 月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电 自动保存功能;显示部份由LCD1602构成.主要单元电路的设计2.3.1 单片机主控制模块的设计图-1 主控制系统AT89C51 单片机为 40 引脚双列直插芯片 , 有四个 I/O 口 P0,P1,P2,P3 。单片机的最小系统如上图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微 调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电
9、容的另 一端,在片内它是振荡器倒相放大器的输出 .第9引脚为复位输入端 ,接上电容,电阻及开 关后够上电复位电路 . 如图 -1 所示.2.3.2 时钟电路模块的设计图 -2 DS1302 的引脚图图-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源 关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。 当 Vcc2 大于 Vcc1+ 时,Vcc2 给 DS1302供 电。当 Vcc2 小于 Vcc1 时,DS1302由 Vcc1 供 电。X1和X2是振荡源,外接晶振。RST是复位/片选线,通过把RST输入驱动置高电平 来启
10、动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命 令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在 Vcc 大于等于之前,RST必须保持低电平。中有在 SCLK为低电平时,才能将 RST置为高电 平,I/O为串行数据输入端(双向)。SCLK始终是输入端。2.3.3 键盘模块设计图 -3 键盘模块如图-3,K1、K2、K3 K4均为多功能键。K1为秒表设置键,按K4键时为时钟确定
11、 键;K2在K4按下时为时钟下调键,在 K3按下时为闹钟确定键,在 K1按下时为秒表开 始键;K3为闹钟设置键,在K4按下时为时钟上调键,在 K1按下时为秒表暂停键;K4 为时钟设置键,在K3按下时为闹钟移位键,在 K1按下时为秒表退出键。2.3.4 蜂鸣器模块的设计图-4 声音输出模块闹铃时间到和整点时,P3_7给低电平,蜂鸣器响。2.3.5 显示模块的设计图-5 LCD 显示输出模块如图一5, 1脚VSS和3脚VEE为电源接地,第2管脚VDD接电源,第4管脚RS为 寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;RW为读写信号 线,高电平1时进行读操作,低电平0时进行写操作
12、;E(或EN)端为使能(enable)端; 第714脚D旷D7为8位双向数据端。控制和数据端都接了上拉电阻用来驱动。3. 系统的软件设计 程序流程框图图 -A 主程序流程图图 -B 时间调整程序流程图程序的设计 见附录4. 系统调试软件调试结果用户秒表界面时钟主界面设置闹铃界面时钟仿真图硬件调试结果起初蜂鸣器有点问题不响,后来发现是定义错端口引起的。其他功能正常。实验箱调试结果实现功能的具体方法:时钟主界面时按下K1键进入秒表功能,按K2秒表开始,再按K3秒表停,按键K4 返回时间显示;按K4开始调试(移位“年一秒”),接着按K2、K3调节时间增减;按K2 开启闹钟,K3调节时间,K4(移位“
13、时分”);按“年一秒”的顺序移位,按键 K2进行 减运算,按键K3进行加运算,按键K1返回到主界面并显示设置值。按下K3键,实现闹钟定时调整,按键 K4进行“分-秒”移位,按键K3进行上调, 按键K2返回到主界面。主界面K2实现开启/关闭闹钟的功能。按下K1键进入秒表,按键K2开始计时,K3暂停计时,K4返回到主界面。5. 总结心得体会: 这次实习我们组选择的是电子时钟设计。实习任务包括理论设计、调试与仿真、撰 写设计报告等。其中理论设计又包括选择总体方案,硬件系统设计、软件系统设计;硬 件设计包括单元电路,选择元器件及计算参数等;软件设计包括模块化层次结构图,程 序流程图。程序设计是课程设计
14、的关键环节,开始以为时钟会很简单,就算遇到问题应 该也很好解决,但当自己真正去做的时候,发现了好多困难。于是查资料,问同学。经 过和同学的探讨,通过调试进一步完善程序设计,最后虽然省电模式没实现但其他基本 达到课题所要求的指标。完成了实习任务。这次实习我更加了解了单片机的应用,更加 牢牢的掌握了书本知识与现实的结合,总之这是实习收获很大,以后还需多动手实践, 多练习编程,才能熟练掌握单片机。附录一:程序:#include#include#include#include #define uchar unsigned char#define uint unsigned int#define TIM
15、E (0X)#define FLAG 0xf4, key2num是 key5 的计数uchar code table= GYY;uchar code table1= GLQ;uchar code table4= 00:00:00 MB void delay(uint z) uint x,y;for(x=z;x0;x-) for(y=110;y0;y-);/ 延时 1msdelay1ms(uchar time) uchar i,j;for(i=0;itime;i+) for(j=0;j250;j+); /LCD 驱动部分 enable() rs=0;rw=0;e=0;delay1ms(3);e=
16、1;write2(uchar i) P0=i;rs=1;rw=0;e=0;delay1ms(2);e=1;write1(uchar data *address,m) uchar i,j;for(i=0;im;i+,address+) j=*address; write2(j);/LCD 显示lcdshow() P0=0XC; / 显示器开、光标关 enable();P0=0x80; / 第一行 015 enable();write1(time1,16);P0=0xc1; / 第二行 114 enable();write1(time2,15);/DS1302 读写子程序 write(uchar
17、address) uchar i;clk=0;_nop_();rst=1;_nop_(); for(i=0;i=1;clk=0;uchar read() uchar i,j=0;for(i=0;i=1;_nop_();clk=0;_nop_();if(dat)j|=0x80;_nop_();clk=1;return(j);/ 部分显示数据初始化timestart()time16=time19=-;time12=2,time13=0;time22=time25=:; write(0xc1); alarm0=read();rst=0;write(0xc3);alarm1=read();rst=0;
18、write(0xc5);time10=read();rst=0;/ 读取时间readtime() uchar i,m,n;write(0x8d); / 读取年份 m=read();rst=0;time14=m/16+0x30;time15=m%16+0x30;/ 读取月份和日期time115=m+0x30; for(i=7,n=0x89;i11;i+=3,n-=2) write(n);m=read();rst=0;time1i=m/16+0x30;time1i+1=m%16+0x30;/ 读取时,分, 秒/ 将实时的时分秒给 time for(m=0,i=0,n=0x85;i7;i+=3,n-
19、=2,m+) write(n);timem=read();rst=0; time2i=timem/16+0x30; time2i+1=timem%16+0x30;baoshi() / 整点报时 beep=1;if(time1=0)if(time2=0) beep=0;delay(10);beep=1;/ 闹钟部分showalarm() uchar i;for(i=1;i0xc5)i=0x85;/K2 ,上调else if(P1=0xb0)year=(time14&0xf)*10+(time15&0xf); month=(time17&0xf)*10+(time18&0xf); day=(tim
20、e110&0xf)*10+(time111&0xf); if(i=0x85)year+;if(year99)year=0;if(year%4)!=0) if(month=2&day=29) day=28;else if(i=0x88)month+;if(month12)month=1;if(dayDaymonth-1)day=Daymonth-1;if(month=2&(year%4)=0)day=29;else if(i=0x8b)day+;if(dayDaymonth-1)if(month=2&(year%4)=0)if(day29)day=1;if(month!=2)day=1;else
21、 if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n+;if(n23)n=0;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time24&0xf);n+;if(n59)n=0;time23=n/10+0x30;time24=n%10+0x30;time14=year/10+0x30; time15=year%10+0x30; time17=month/10+0x30;time18=month%10+0x30;time110=day/10+0x30;time111=day%10+0x30;lcd
22、show();,下调else if(P1=0xd0) /K3 year=(time14&0xf)*10+(time15&0xf); month=(time17&0xf)*10+(time18&0xf); day=(time110&0xf)*10+(time111&0xf); if(i=0x85)year-;if(year1)year=99;if(year%4)!=0) if(month=2&day=29) day=28;else if(i=0x88)month-;if(monthDaymonth-1)day=Daymonth-1;if(month=2&(year%4)=0) day=29;el
23、se if(i=0x8b)day-;if(day1)if(month=2&(year%4)=0) day=29;if(month!=2)day=Daymonth-1;else if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n-;if(n0)n=23;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time24&0xf);n-;if(n0)n=59;time23=n/10+0x30;time24=n%10+0x30;time14=year/10+0x30; time15=year%10+0x30
24、; time17=month/10+0x30;time18=month%10+0x30; time110=day/10+0x30; time111=day%10+0x30; lcdshow();else if(P1=0xe0) /K4, 确定设置 delay1ms(1000);write(0x8c); write(time14&0xf)*16+(time15&0xf);rst=0;write(0x8a);rst=0;for(i=7,n=0x88;i11;i+=3,n-=2) write(n); write(time1i&0xf)*16+(time1i+1&0xf); rst=0; for(i=
25、0;i7;i+=3,n-=2)write(n); write(time2i&0xf)*16+(time2i+1&0xf); rst=0;TR0=0;return;elseTR0=0;return;if(j=0)TR0=0; return;/ 设置闹钟setalarm()uchar i,n;for(i=1;i0xc5) i=0xc2;else if(P1=0xb0)if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n+;if(n23)n=0;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time2
26、4&0xf);n+;if(n59)n=0;time23=n/10+0x30;time24=n%10+0x30;lcdshow();/ 确定闹钟设置else if(P1=0xd0)write(0xc0);write(time20&0x0f)*16+(time21&0x0f);rst=0;write(0xc2); write(time23&0xf)*16+(time24&0xf); rst=0;time10=FLAG;write(0xc4);write(time10);rst=0;TR0=0;timestart();return; elseTR0=0; timestart(); return;if
27、(j=0)TR0=0; timestart(); return;/lcdwrite() LCD 写指令 void lcdwrite(uchar write) rs=0;P0=write;delay(1);e=1;delay(1);e=0;/lcdshuju() LCD 写数据 void lcdshuju(uchar shuju)rs=1;P0=shuju;delay(1);e=1;delay(1);e=0;/ 秒显示函数/ 秒表函数/ 秒表部分void write_sfm(uchar add ,uchar date) uchar shi,ge;shi=date/10;ge=date%10;lc
28、dwrite(0x80+0x40+add);lcdshuju(0x30+shi);lcdshuju(0x30+ge);void mbiao( ) lcdwrite(0x80+0x40);for(num=0;num16;num+) lcdshuju(table4num);start:while(1) if(P1!=0Xf0)/ 延时去抖动/ 秒表开始计数/ 秒表暂停计数/ 退出 delay1ms(100);if(P1!=0Xf0) if(P1=0xd0) TR1=1;ET1=1;else if(P1=0xb0) TR1=0;else if(P1=0x70) return; goto start;void init() e=0;rw=0;lcdwrite(0x38);/ 显示模式lcdwrite(0x0c);/ 开显示,光标不闪烁 lcdwrite(0x80);for(i=0;i16;i+)lcdshuju(tablei);delay(200);lcdwrite(0x80+0x40);for(i=0;i16;i+)lcdshuju(table1i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论