单片机数码电子钟的设计制作

上传人:精****档 文档编号:43546217 上传时间:2018-06-06 格式:DOC 页数:8 大小:333KB
返回 下载 相关 举报
单片机数码电子钟的设计制作_第1页
第1页 / 共8页
单片机数码电子钟的设计制作_第2页
第2页 / 共8页
单片机数码电子钟的设计制作_第3页
第3页 / 共8页
单片机数码电子钟的设计制作_第4页
第4页 / 共8页
单片机数码电子钟的设计制作_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《单片机数码电子钟的设计制作》由会员分享,可在线阅读,更多相关《单片机数码电子钟的设计制作(8页珍藏版)》请在金锄头文库上搜索。

1、7.127.12 单片机数码电子钟的设计制作单片机数码电子钟的设计制作7.12.1 实验目的通过对“单片机数码电子钟”的设计制作,增强对单片机控制,实现数码电子钟功能 技术的理解与应用;熟练使用仪器仪表,完成电子电路系统的制作、安装、调整和测试并 实现电路系统的功能,增强动手能力和实践兴趣;通过对“单片机数码电子钟”基本原理 的研究与制作实践,进一步提高实践技能和创新能力。7.12.2 实验要求1、学习和了解数码电子钟的基本原理; 2、学会设计和制作数码电子钟; 3、学习系统硬件电路设计方法; 4、学习软件程序设计原理和方法; 5、学习单片机工作原理及实现软件程序控制的方法。7.12.3 实验

2、电路原理1 1、电路功能电路功能电子时钟已为人们所熟知,作为一个电子爱好者来说,自己动手制作一款数码显示的 电子钟是一件非常有意义的事。本次实验,是一款利用 AT89S52 作为主控制芯片的数码电 子钟的制作,同时结合这款制作的外围器件,特别编写了一些控制电路的驱动程序,供单 片机初学者参考。 本制作可显示当前时间信息,当前日期信息。还具有定时报警功能,同时接入了后备 电源,使得系统在外供电断电的情况下,仍可保持时钟数据不丢失。2 2、电路工作原理电路工作原理单片机数码电子时钟的设计制作是利用 51 单片机中的简易型产品 AT89S52 作为主控制 器件,利用单片机程序,通过与时钟芯片 DS1

3、302 的通读,读取实时时钟信息,通过对四位 一体共阴数码管的扫描控制,完成对时钟的显示。 直流 12V 输入电源经三端稳压集成电路 IC4 的稳压后,在其输出端输出一个稳定的 5V 工作电压,作为系统的工作电源。DS1302 是一款性价比较高的时钟芯片,外围元件少,其 第 8 脚为备用电源输入端,在这里我们设计用 3V 电池进行供电,当系统断电后,由备用电 源向时钟芯片供电,使时钟数据在外供电停电时也不会丢失。CD4543 为一款 BCD-七段译码 器,可弥补单片机输出引脚数量不够的问题。 当单片机通过与 DS1302 的通讯,向时钟芯片写入启动命令后,时钟芯片便开始工作, 时钟启动以后,自

4、动会进行计时操作,将最新的时钟信息保存在其内部寄存器中,包括年、 月、日、周、时、分、秒等信息,单片机只要不断地读取时钟芯片中各寄存器中的数据就 可以。单片机要将读取到的时钟信息进行显示时,通过对数据的处理,从 P1 口的高四位输 出显示数据,四位 BCD 码数据输入 CD4543 进行译码后,驱动七段数码管,同时配合四位电 子开关来完成四位数据的扫描显示。 单片机数码电子钟电路原理如图 7.12.1 所示。图7.12.1 单片机数码电子钟电路原理图7.12.4 实验内容1 1、实验方法、实验方法按照图 7.12.1 组装实验电路,学习理解电路工作原理,在掌握硬件电路系统设计和软 件程序控制原

5、理的基础上进行本次实验。 软件设计流程:2 2、制作与调试、制作与调试由于本制作主要通过单片机程序来完成时钟数据的读取与显示,因此对硬件电路的调 试显得非常简单,一般只要焊无误,插上我们提供的烧有程序的单片机后,便可以正常工 作。 (1)制作 制作过程中可以参考以下步骤来完成: 将所有元件焊好,先不要插上单片机,向电源插座送入 12V 直流电源,测量 78L05 输 出脚对地电压,是否为 5V 左右,这个电压的测量可以直接在 20 脚的集成电路插座上完成, 万用表负表笔接 10 脚,正表笔测 20 脚的电压。若电压为 0,应仔细查看电源插座边上的 极性保护二极管是否焊反。另外需要注意的是,CD

6、4543 和 DS1302 两块集成电路不要焊反, 焊时查看线路板上的标识上的半圆缺口与集成电路上的缺口对牢,5 只三极管的方向应将 实际型状与线路板上的标识一致。以上几步都正确后,断后,再插上单片机,通电便可以 正常工作。 制作实物照片如图 7.12.2 所示,在周围环境光照较暗时,能具有更好的显示效果。3、时钟的操作时钟芯片在初次上电时,其数据都为初始值,我们必须将时钟、日期等信息进行设定。1、当前时钟的设定:长按左边的 SB1 按键不要松,当听到蜂鸣器“嘟”叫一声后松开,这 时系统进入时钟设定模式。此时按动 SB1 键便可以调整时信息,每按一次蜂鸣器响一声, 同时小时显示加 1,当加到

7、23 时,再按一下,便显示为 00,其余类推;当小时设定完后, 按一下右边的 SB2 键,退出时单元的设定,时入分的设定。这时再按 SB1 时,相应的分单 元动作,操作过程同设定小时时一致。当分单元与设定完后,再一下 SB2,这时蜂鸣器响 二声,表示时钟设定完成,系统退出时钟设定,显示当前时钟,同时每过一秒,中间的亮 点闪一下。2、闹钟设定:短按左边的 SB1 键一下,系统进入闹钟设定状态,初始上电后的闹钟时间为 06:00,闹钟的调整方法同前面的时钟设定。3、日期设定:长按右边的 SB2 键不要松,当听到蜂鸣器“嘟”叫一声后松开,这时系统进 入日期设定模式。四位数码显示的两位月信息,两位日期

8、信息,调整的方法与前面调时间 的方法类似。4、日期显示:短按 SB2 键一下,系统便显示当前日期,这时不用按任何按键,延时一段时 间后返回到时钟显示状态。参考程序(DS1302 驱动程序): #include #include sbit SCK=P34; / DS1302 时钟 sbit SDA=P30; / DS1302 输入输出口 sbit RST = P31; / DS1302 复位bit ReadRTC_Flag; /读 DS1302 全局变量unsigned char l_tmpdate7=0,0,12,15,5,3,8;/秒分时日月周年 08-05-15 12:00:00 unsi

9、gned char l_tmpdisplay8; code unsigned char write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分时日周 月年 最低位读写位 code unsigned char read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; code unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /共阴数码管 0-9 - 熄灭表 code unsigned

10、 char table1=0,1,2,3,4,5,6,7;/显示位码表/*/ void InitTIMER0(void) TMOD|=0x01;/定时器设置 16 位TH0=0xef;/初始化值TL0=0xf0;ET0=1;TR0=1;EA=1; /*/ void Write_Ds1302_Byte(unsigned char temp) unsigned char i;for (i=0;i=1; /右移一位SCK=1; /*/ void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0; _nop_();SCK=0;

11、_nop_();RST=1;_nop_(); /启动Write_Ds1302_Byte(address);/发送地址Write_Ds1302_Byte(dat);/发送数据RST=0; /恢复 /*/ unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00;RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_();Write_Ds1302_Byte(address);for (i=0;i=1;/右移一位SCK=1; RST=0; _nop_();/以下为 DS13

12、02 复位的稳定时间RST=0; SCK=0; _nop_(); SCK=1; _nop_(); SDA=0; _nop_(); SDA=1;_nop_(); return (temp);/返回 /*/ void Read_RTC(void)/读取 日历 unsigned char i,*p;p=read_rtc_address; /地址传递for(i=0;i7;i+)/分 7 次读取 秒分时日月周年l_tmpdatei=Read_Ds1302(*p);p+; /*/ void Set_RTC(void)/设定 日历 unsigned char i,*p,tmp; for(i=0;i7;i+)

13、 /BCD 处理 tmp=l_tmpdatei/10; l_tmpdatei=l_tmpdatei%10; l_tmpdatei=l_tmpdatei+tmp*16; Write_Ds1302(0x8E,0X00);p=write_rtc_address;/传地址for(i=0;i7;i+)/7 次写入 秒分时日月周年Write_Ds1302(*p,l_tmpdatei);p+; Write_Ds1302(0x8E,0x80); /*/ void tim(void) interrupt 1 using 1/中断,用于数码管扫描 static unsigned char i,num;TH0=0x

14、f5;TL0=0xe0;P0=tablel_tmpdisplayi;/查表法得到要显示数字的数码段 P2=table1i; i+; if(i=8)i=0;num+;if(10=num) /隔段时间读取 1302 的数据。时间间隔可以调整ReadRTC_Flag=1; /使用标志位判断num=0;/*/ void main(void) InitTIMER0();Set_RTC(); while(1)if(ReadRTC_Flag)ReadRTC_Flag=0; Read_RTC(); switch (l_tmpdate0/5) /设计每个 5 秒 交替显示 年月日 时分秒 case 0: case 2: case 4: case 6: case 8: ca

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号