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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字电子钟的设计.docx

1、数字电子钟的设计引言:本设计通过对一个能实现按键开关可调整时、分、秒,定时报警的24小时制的时间系统的设计学习。详细叙述了51单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机C语言系统的实现了各种功能。从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。该系统由AT89C51、独立式按键、二极管、LED数码管、蜂鸣器等部分构成,能实现24小时制时、分、秒的时钟显示,18B20温度、能实现时钟简单的功能。同时也可进行时、分、秒的校准、定时报警和LED二极管流水灯显示。本系统主要是和实际生活的数字钟结合起来,可用1功能键进入时间校准等。可用3个带有

2、不同按键分别对时钟的时、分、秒进行校准。每个按键伴有不同的声响以示区别。1 设计方案1.1软件实现数字时钟原理为:利用定时器0与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。1.2采用美国DALLAS公司的专用时钟芯片DS1302该芯片主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能

3、。其内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。1.3最终方案选择鉴于以上两种方案,时钟芯片DS1302具有更多的优点,本设计采用方案二完成数字时钟的功能。2 硬件详细设计2.1主板电路系统整体硬件电路包括温度显示电路,上下限报警调整电路,单片机主板电路等,如图1 所示。图1中

4、有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。图1 单片机数字钟硬件系统的总体设计框图2.2显示电路显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。显示电路如图2所示。图2 温度显示电路3 软件设计3.1 程序主要模块数字钟的模块主要包括:时钟模块,温度模块,显示模块,键盘模块,报警模块六大模块组成。图3列出了主要模块的关

5、系。数字时钟温度模块时钟模块温度显示时间计算温度报警显示日期图3 模块关系图3.2 主程序流程主程序的主要工作是:初始化DS1302时钟芯片和DS18B20温度芯片,以及单片机的初始工作状态,然后进入读取时间和温度的流程,用户课根据按键的功能进行选择其工作状态。主程序流程如图4所示。开始初始化Y有按键N需要响应NY松开键Y扫描计数加1按键处理松开键处理N图4 主程序流程图3.3 DS1302时钟芯片程序分析DS1302数据读取函数分析 ,程序源码如下所示:unsigned char i; unsigned char temp=0; for(i=8;i0;i-) temp=temp1;在控制指令

6、字输入后的下一个SCLK时钟的上升沿时,紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 DS1302数据写入函数分析 ,程序源码如下所示:unsigned char i; for(i=8;i0;i-) ds1302_io=(bit)(byte1&0x01);/先进最低位 ds1302_clk=1; if(ds1302_io)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。3.4 数据显示与刷新更新显示涉及到两个操作:发数据和改片选信号。但实践发现,代码中无论是先改片选信号还是先发数据信

7、号,都会出现重影(即相邻两位显示差不多)这也是动态扫描引起的。实践先该片选,则前一位的数据会在下一位显示一段时间;先发数据,则后一位的数据会在前一位显示一段时间。因而出现重影。解决这个问题的办法是先进行一个消影操作,然后再发片选,最后发数据。这样就很好地解决了重影问题。这样做的关键在于,在极短的一段时间内让显示器都不亮,等一切准备工作都做好了以后再发数据,只要显示频率足够快,是看不出显示器有闪烁的,这段显示程序代码如下: P1=0x00; / 消影 P2=选择选择;/ 发片选信号codetmp=acode echoarray选择;如果 (选择 =2&mod=0&dotflag)/ 判断是否显示

8、 .codetmp|=0x80; P1=codetmp; / 发数据 选择=+选择%4; / 片选计数器下移3.5键盘响应键盘处理程序流程相对简单,只是简单的判键与处理。所谓键盘消抖就是一次按建的多次响应问题。当然,一般一次按建只须响应一次,但有的时候需要多次响应,如系统进入修改模式,数字的增减。当出现这种问题时,用户的一次击键是作为一次还是多次处理,必须有一个标准。程序中我用到了一个标志位,相当于中断系统的中断标志。当用户按下键时,标志清零,松开键时,标志恢复;键按下超过一定时间(靠一扫描计数器判定)后,恢复标志,则经过一定的时间延迟(也靠一扫描计数器判定)可以响应一次按键(即一次按键的多次

9、响应)。而事实上,键盘响应程序就是一个事件触发器,键盘的每一个状态(按下,松开, 点击)都可能引发一段响应程序(如:重新设定键按下 = 准备复位;松开= 系统复位)。这里的时间延迟靠的是指令计数,由于受硬件中断等不确定因素影响,这个延迟一般不准确,但通过实践测试,可以找到一些合适的值。4结论本文通过对一个能实现按键开关可调整时、分、秒,定时报警的24小时制的时间系统的设计学习。详细介绍了51单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机C语言系统的实现了各种功能。从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。该系统由AT89C51、独立

10、式按键、二极管、LED数码管、蜂鸣器等部分构成,能实现24小时制时、分、秒的时钟显示,18B20温度、能实现时钟简单的功能。同时也可进行时、分、秒的校准、定时报警和LED二极管流水灯显示。5课程设计体会通过此次单片机课程设计,我掌握单片机应用系统的有关知识,加深了解单片机的工作原理。初步掌握简单单片机应用系统的设计、制作、调试的方法。提高动手实践能力。以下是我的心得体会。首先,我们组员首先根据自己所掌握的知识集合老师推荐的参考资料,逐次设计没个部分的电路。计时功能主要用DS1302芯片的实现,至于报时则要要把符合要求的时刻信号输入给相关器件,让它在老师所要求的时刻让灯泡亮灯,校时系统就是要在随

11、意时刻让电路产生进位信号,对分、时进行调节,使数字钟显示系统与标准时间相同。在这样的思路下,我们设计出数字电子钟的电路。随后我们根据自己正确的仿真图来连接实物图并且连接成功。我的主要任务是进行系统的调试功能。在调试时遇到了一些问题,比如,刚开始进行按键输入检测时,我们直接用万用表测量按键两端的电平,刚测时,万用表显示高电平,当有按键按下时,则万用表显示低电平,这说明了按键是正常的,但当直接用按键时,系统板则不能正常使用按键。后面重新焊接了按键,系统板则才能正常使用按键。原先焊接时发现了电阻的管脚比之前看到的同阻值电阻管脚细。后面经过万用表调试后,重新焊接了电阻,问题就解决了。通过整个电路设计与

12、制作的整个过程,掌握了对电子钟的一些简单的基本的设计,组装与调试方法。熟悉了COMS系列中、小规模集成电路的使用;更教会了我在以后的学习和工作中要养成严谨、耐心的工作态度,遇到困难要主动出击,而不是坐着等人指导。通过理论与实际的相结合,进一步深入的体会到一种学习的方法,特别是对电子设计方面。首先,要明确总体的设计方案与方法;其次,对各个部分进行设计与改进;最后,将各个部分整合到一起进行比较、观察。最后,要进行严格的调试过程才能最终完成。这次课程设计锻炼了我们的动手能力,激发了我们的创新思维,培养了我们勇于面对困难克服困难的坚强意志和不懈的精神,使我们又一次体味到团队的力量和合作的重要性;更重要

13、的是使我们深深的体会到理论结合实际的重要性,体会到知识的海洋是无穷无尽,激发我们去追求。 temp=temp|0x80; /先出最低位参考文献1李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,19982李广弟.单片机基础.北京:北京航空航天大学出版社,19943阎石.数字电子技术基础(第三版). 北京:高等教育出版社,19894廖常初.现场总线概述J.电工技术,1999. ds1302_clk=1; _nop_(); ds1302_clk=0; _nop_(); ds1302_clk=0; byte1=1;附录1 程序清单C51 COMPILER V7.09 ZG_1

14、302_18B20 11/24/2009 17:05:18 PAGE 1 C51 COMPILER V7.09, COMPILATION OF MODULE ZG_1302_18B20OBJECT MODULE PLACED IN ZG-1302-18B20.OBJCOMPILER INVOKED BY: C:KeilC51BINC51.EXE ZG-1302-18B20.c BROWSE DEBUG OBJECTEXTENDline level source 1 #include 2 #include 3 4 #define uchar unsigned char 5 #define uin

15、t unsigned int 6 7 sbit QUEDING = P17; 8 sbit FANHUI = P13; 9 sbit SHANG = P15; 10 sbit XIA = P14; 11 sbit QIEHUAN = P16; /按键 12 13 sbit ds1302_rst = P12; 14 sbit ds1302_clk = P10; 15 sbit ds1302_io = P11; /1302 16 17 18 sbit wei1 = P30; 19 sbit wei2 = P31; 20 sbit wei3 = P32; 21 sbit wei4 = P34; 22

16、 sbit wei5 = P35; 23 sbit wei6 = P33; /数码管位选位 24 25 sbit DQ = P37; /定义DS18B20端口DQ 26 27 sbit BEEP = P27; /蜂鸣器 28 29 /18b20/ 30 31 unsigned char presence ; 32 33 unsigned char code LEDData = 0x81,0xED,0xA2,0xA8,0xCC,0x98,0x90,0xAD,0x80,0x88,0xff; 34 unsigned char code dispbitcode=0x01,0x02,0x04,0x10,

17、0x20,0x08; 35 unsigned char data temp_data2 = 0x00,0x00; 36 unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00; 37 unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 38 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09; 39 40 41 /bit wendu; 42 43 44 /uchar init2 =0x11,0x26,0x18,0x21,0x1

18、1,0x07,0x09; /初始时间数组 45 /秒, 分, 时, 日, 月,星期,年 46 47 显示缓存区 48 unsigned char dispbuf6=0,0,0,0,0,0; 49 定义全局变量 50 unsigned char hour=0,minute=0,second=0,year=0,mounth=0,date=0,week=0; 51 unsigned char hor=0,min=0,sec=0,yer,mnth,dat,wk; 52 /unsigned char time=0x06,0x03,0x14,0x03,0x00,0x00,0x00; /初始时间数组 53

19、/unsigned char id,temp,num; 54 unsigned char mscnt,flag_shan=0;/闪动标志; 55 /unsigned char flag_qiehuan=0;/时分秒年月日星期的显示切换C51 COMPILER V7.09 ZG_1302_18B20 11/24/2009 17:05:18 PAGE 2 56 unsigned char temp,i; 57 /unsigned char shan_qiehuan=0;/闪烁切换;停止时分秒年月日星期的显示切换 58 unsigned char flag_tiaoshi_sfm,flag_tiao

20、shi_nyr,flag_tiaoshi_bj;/调时间标志 59 60 uchar bj_time2 =0x00,0x00; 61 unsigned char dispbuf_bj4=0,0,0,0; 62 / 分, 时 报警时间 63 bit alarm_flag=0; 64 uchar qiehuan; 65 66 bit flag=0; 67 bit flag_jinzhi=0;/时钟跑时禁止其他键盘调时间 68 bit flag_qd_zt=0;/启动跟暂停标志; 69 70 71 /BEEP 数码管显示/ 72 void Delay(unsigned int num)/延时函数 7

21、3 74 1 while( -num ); 75 1 76 77 void delayms(unsigned int ms) 78 79 1 unsigned char y; 80 1 while(ms-) 81 1 82 2 for(y = 0; y 0; i-) 151 1 152 2 DQ = 0; / 给脉冲信号 153 2 dat = 1; 154 2 DQ = 1; / 给脉冲信号 155 2 156 2 if(DQ) 157 2 dat |= 0x80; 158 2 Delay(4); 159 2 160 1 161 1 return (dat); 162 1 163 164 1

22、65 WriteOneChar(unsigned char dat)/写一个字节 166 167 1 unsigned char i = 0; 168 1 for (i = 8; i 0; i-) 169 1 170 2 DQ = 0; 171 2 DQ = dat&0x01; 172 2 Delay(5); 173 2 174 2 DQ = 1; 175 2 dat=1; 176 2 177 1 178 179 C51 COMPILER V7.09 ZG_1302_18B20 11/24/2009 17:05:18 PAGE 4 180 181 Read_Temperature(void)/

23、读取温度 182 183 1 Init_DS18B20(); 184 1 if(presence=1) 185 1 beep(20); /DS18B20不正常,蜂鸣器报警 186 1 else 187 1 188 2 /flash=0; 189 2 WriteOneChar(0xCC); / 跳过读序号列号的操作 190 2 WriteOneChar(0x44); / 启动温度转换 191 2 192 2 Init_DS18B20(); 193 2 WriteOneChar(0xCC); /跳过读序号列号的操作 194 2 WriteOneChar(0xBE); /读取温度寄存器 195 2

24、196 2 temp_data0 = ReadOneChar(); /温度低8位 197 2 temp_data1 = ReadOneChar(); /温度高8位 198 2 199 1 200 201 Disp_Temperature()/显示温度 202 203 1 unsigned char n=0; 204 1 205 1 display4=temp_data0&0x0f; 206 1 display0=ditabdisplay4; /查表得小数位的值 207 1 208 1 display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4); 209 1

25、 display3=display4/100; 210 1 display1=display4%100; 211 1 display2=display1/10; 212 1 display1=display1%10; 213 1 214 1 if(!display3) /高位为0,不显示 215 1 216 2 display3=0x0a; 217 2 if(!display2) /次高位为0,不显示 218 2 display2=0x0a; 219 2 220 1 221 1 /*P0 = 0xc6; /显示 C 222 1 P2 = 0x7f; 223 1 Delay(300); 224 1 225 1 P0 = 0x9c; /显示

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

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