欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载
     

    单片机电子时钟课设论文 1.docx

    • 资源ID:2038965       资源大小:151.89KB        全文页数:20页
    • 资源格式: DOCX        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机电子时钟课设论文 1.docx

    电子时钟课程设计 班级:机自081 学号:200880724102 姓名:罗兰秀 完成日期:2011年06月18日 摘要 随着电子技术的飞速发展,单片机以体积小,性价比高,面向实时应用为特征;以不求规模大,力争小而全为宗旨;以在一块芯片上集成一台计算机为目的,而广泛应用于工业自动化、智能化仪表、电子产品等领域。单片机模块中最常见的是电子时钟,电子时钟是一种用DS1302芯片实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得电子时钟的精度,远远超过老式钟表, 同时也扩展了钟表原先的报时功能。如定时自动报警、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,都是以钟表数字化为基础的。因此,研究电子时钟及扩大其应用,有着非常现实的意义。 目录1、0··················课程设计的功能描述2、0··················课程设计分析设计3、0··················绘制硬件电路图并进行说明4、0··················绘制软件流程图并进行说明5、0··················程序的源代码清单6、0··················上机调试运行结果分析7、0··················课程设计经验教训总结8、0··················参考文献1.0课程设计功能描述该课程设计是利用MCS-51单片机内部的定时计数器、中断系统、LED显示器等部件设计的一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。具体如下:在启动初,LED显示器可以显示设计学号,接下来显示在设计时设定的初始时间。K是复位开关,K0是移位开关,用于设置时间时的定位,从而可以分别对时、分、秒进行设置和校准,K1对时、分、秒进行增加调制,K2对时、分、秒进行减小调制,并通过LED显示器显示出来,从而完成对时间的设置,启动,暂停等控制。2、0课程设计分析设计 单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的存储器、IO接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。电子时钟是利用单片机内部的定时器计数器来实现的,它的处理过程如下:首先设定单片机内部的一个定时器计数器工作于定时方式,对机器周期计数形成基准时间,然后用另一个定时器计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。然后通过数码管把它们的内容在相应位置显示出来。数码管有静态显示方法和动态显示方法。本科舍采用动态显示方法。在具体处理时,定时器计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。3、0绘制硬件电路图,并对硬件电路进行说明硬件电路图如下:3、1开关按钮 K0是选择键,按第一次选择时,按第二次选择分,按第三次选择选择秒;K1递增开关,每按下一次数值增一;K2为递减开关,每按下一次数值减一。3、2蜂鸣器驱动电路 为了使电子时钟能够进行整点报时,需要通过蜂鸣器的报警来提醒,因此在电路图中需要加入蜂鸣器。电路如下图所示: 3、3上拉电阻: 对电路和芯片起保护作用,防止电流过大造成损害。3、4复位电路 复位电路分两种方式,分别是上电自动复位和按键手动复位。该课设应用的是手动复位。电路如下图所示: 3、5电源电路 单片机正常工作是+5V电压,采用USB供电。4、0绘制软件流程图并对软件流程图进行说明 该课程设计采用C语言编程程序,程序设计框图如下: 5、0程序源代码清单#include<reg52.h> #include "ds1302.h"#define KeyPort P3 /按键端口#define DataPort P0 /数据端口sbit LATCH1=P22;/段锁存sbit LATCH2=P23;/位锁存sbit P2_0=P20;/报警sbit P2_5=P25;sbit P2_7=P27;unsigned int panduan,baojing;unsigned int bian1;/调时unsigned int bian2,bian3,bian4,bian5,bian6;/闹钟bit ReadTimeFlag;/定义读时间标志unsigned int xianshi,shijian;/显示学好是用unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位码unsigned char TempData8; /存储显示值的全局变量void DelayUs2x(unsigned char t);/us级延时函数声明 void DelayMs(unsigned char t); /ms级延时void Display(unsigned char FirstBit,unsigned char Num);/数码管显示函数+报警函数 unsigned char KeyScan(void);/键盘扫描void Init_Timer0(void);/定时器初始化/*- 主函数-*/void main (void)unsigned char num;/键盘扫描Init_Timer0(); /定时器初始化Ds1302_Init(); / DS1302初始化Ds1302_Write_Time();/向DS1302写入时钟数据while (1) /主循环 num=KeyScan(); switch(num) case 1:bian1+;if(bian1=4)bian1=0;break;/设置时间case 2:if(bian1=1) /设置时间加1 time_buf14+;if(time_buf14=24)time_buf14=0; Ds1302_Write_Time();/小时 else if(bian1=2) time_buf15+;if(time_buf15=60)time_buf15=0; Ds1302_Write_Time();/分 else if(bian1=3) time_buf16+;if(time_buf16=60)time_buf15=0; Ds1302_Write_Time(); /秒 break;case 3:if(bian1=1) /设置时间减1 time_buf14-;if(time_buf14=255)time_buf14=23; Ds1302_Write_Time();/小时 else if(bian1=2) time_buf15-;if(time_buf15=255)time_buf15=59; Ds1302_Write_Time();/分 else if(bian1=3) time_buf16-;if(time_buf16=255)time_buf15=59; Ds1302_Write_Time(); /秒 break; case 4:bian2+;if(bian2=2)bian2=0;break;/切换显示、闹铃case 5:bian3+;if(bian3=4)bian3=0;break;/设置闹钟时间case 6:if(bian3=1) /加1 bian4+;if(bian4=24)bian4=0;/小时 else if(bian3=2) bian5+;if(bian5=60)bian5=0;/分 else if(bian3=3) bian6+;if(bian6=60)bian6=0; /秒 break;case 7:if(bian3=1) /减1 bian4-;if(bian4=255)bian4=23;/小时 else if(bian3=2) bian5-;if(bian5=255)bian5=59;/分 else if(bian3=3) bian6-;if(bian6=255)bian6=59; /秒 break;case 8:panduan+;if(panduan=2)panduan=0; if(panduan=1) baojing=1; else baojing=0; default:break; if(ReadTimeFlag=1) ReadTimeFlag=0; Ds1302_Read_Time(); if(shijian=0)/显示制作着学好前六位 TempData0=0x5b;/2 TempData1=0x3f;/0 TempData2=0x3f;/0 TempData3=0x7f;/8 TempData4=0x7f;/8 TempData5=0x3f;/0 else if(shijian=1)/显示制作着学好后六位 TempData0=0x07;/7 TempData1=0x5b; /2 TempData2=0x66;/4 TempData3=0x66;/1 TempData4=0x3f;/0 TempData5=0x5b;/2 else if(shijian=2)/显示制作年、月、日 TempData0=dofly_DuanMatime_buf11/10;/年 TempData1=dofly_DuanMatime_buf11%10; TempData2=dofly_DuanMatime_buf12/10;/月 TempData3=dofly_DuanMatime_buf12%10; TempData4=dofly_DuanMatime_buf13/10;/日 TempData5=dofly_DuanMatime_buf13%10; else if(shijian=3)/显示周 秒 TempData0=0x40; TempData1=dofly_DuanMatime_buf17%10;/周 TempData2=0x40;/加入"-" TempData3=0; TempData4=dofly_DuanMatime_buf16/10;/秒 TempData5=dofly_DuanMatime_buf16%10; else if(shijian=4) if(bian2=0)/设置时间 if(bian1=0)/正常显示 TempData0=dofly_DuanMatime_buf14/10;/时 TempData1=dofly_DuanMatime_buf14%10; TempData2=dofly_DuanMatime_buf15/10;/分 TempData3=dofly_DuanMatime_buf15%10; TempData4=dofly_DuanMatime_buf16/10;/秒 TempData5=dofly_DuanMatime_buf16%10; else if(bian1=1)/调时 TempData0=dofly_DuanMatime_buf14/10;/时 TempData1=dofly_DuanMatime_buf14%10; TempData2=0x40;/分 TempData3=0x40; TempData4=0x40;/秒 TempData5=0x40; else if(bian1=2)/调分 TempData0=0x40;/时 TempData1=0x40; TempData2=dofly_DuanMatime_buf15/10;/分 TempData3=dofly_DuanMatime_buf15%10; TempData4=0x40;/秒 TempData5=0x40; else if(bian1=3)/调秒 TempData0=0x40;/时 TempData1=0x40; TempData2=0x40;/分 TempData3=0x40; TempData4=dofly_DuanMatime_buf16/10;/秒 TempData5=dofly_DuanMatime_buf16%10; else if(bian2=1)/设置闹钟 if(bian3=0) TempData0=dofly_DuanMabian4/10;/时 TempData1=dofly_DuanMabian4%10; TempData2=dofly_DuanMabian5/10;/分 TempData3=dofly_DuanMabian5%10; TempData4=dofly_DuanMabian6/10;/秒 TempData5=dofly_DuanMabian6%10; else if(bian3=1)/设置小时 TempData0=dofly_DuanMabian4/10;/时 TempData1=dofly_DuanMabian4%10; TempData2=0;/分 TempData3=0; TempData4=0;/秒 TempData5=0; else if(bian3=2)/设置分钟 TempData0=0;/时 TempData1=0; TempData2=dofly_DuanMabian5/10;/分 TempData3=dofly_DuanMabian5%10; TempData4=0;/秒 TempData5=0; else if(bian3=3)/设置秒 TempData0=0;/时 TempData1=0; TempData2=0;/分 TempData3=0; TempData4=dofly_DuanMabian6/10;/秒 TempData5=dofly_DuanMabian6%10; void DelayUs2x(unsigned char t)/ uS延时函数T=tx2+5 uS while(-t);void DelayMs(unsigned char t) / mS延时 while(t-) DelayUs2x(245); DelayUs2x(245); void Display(unsigned char FirstBit,unsigned char Num) / 显示+报警函数 static unsigned char i=0; DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0; if(time_buf15=00) P2_5=0; else P2_5=1; if(time_buf16=00) P2_7=0; else P2_7=1; if(time_buf14=bian4) if(time_buf15=bian5) if(baojing=0) P2_0=1; else P2_0=0; else P2_0=0; else P2_0=0; void Init_Timer0(void)/ 定时器初始化 TMOD |= 0x01; /使用模式1,16位定时器 EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开void Timer0_isr(void) interrupt 1 / 定时器中断 static unsigned int num1; TH0=(65536-2000)/256; /赋值 2ms TL0=(65536-2000)%256; Display(0,8); / 调用数码管扫描+报警函数 num1+; if(num1=500) /大致1s num1=0; ReadTimeFlag=1; /读标志位置1xianshi+; if(xianshi=3) /大致3s xianshi=0; shijian+; if(shijian=5) /大致3s shijian=4;unsigned char KeyScan(void)/按键扫描 unsigned char keyvalue; if(KeyPort!=0xff) DelayMs(10); if(KeyPort!=0xff) keyvalue=KeyPort; while(KeyPort!=0xff);switch(keyvalue) case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; case 0xef:return 5;break; case 0xdf:return 6;break; case 0xbf:return 7;break; case 0x7f:return 8;break; default:return 0;break; return 0;6、0上机调试运行结果及分析 上机调试时显示和按键运行正常,首先出现学号即:724102,接下来是系统设定的日期即:110612,然后是系统设定的时间。但在调试的过程中显示反应较慢,同时在测量数字钟精度时,在数字钟正常工作时,会出现秒与秒之间不相等的情况,比如在5分钟之内我们与标准时间进行比较会发现,有时发现时间走的快,有时时间走的慢。 原因是由于程序中的if判断语句,在判断过程中当满足条件时,会执行更多的语句,这样会有相应的机器周期的延时,所以会出现时间一会走的快一会走的慢的情况。所以在编程时尽量减少if语句的使用。7、0课程设计经验总结单片机电子时钟系统是一个相对简单的程序设计,但由于在学习单片机课程时并没有学扎实,因此在进行电路设计时遇到了一系列的问题,翻看了不少相关书籍才把问题解决。而这次的课设用到的软件也都是我们不曾接触的软件,并且是英文版的,虽然进行了汉化,但用起来仍然觉得挺困难。由于以前接触过关于时钟的设计,因此在设计时并没有特别的注意,好多的实际性的问题也没有考虑,使得在进行仿真时出现了问题,模式选择键K0在加载之后只能运行一次,数字钟精度不高,并且存在好多其他的问题。在以前编程时实现的都是小功能,或只是部分功能,所以按照自己的想法直接写下去就可以实现,但这次我们不但要实现数字钟的正常工作,而且需要加上定时报警,在这个设计过程中出现了一系列的矛盾,当然更重要的是在解决矛盾时我们要确保时间的准确性,这又需要我们计算机器周期和处理一些延时程序的延时,这可能是我们本次设计中最困难的问题,我们在解决这个问题中更深入的理解了单片机的内部结构,也学会了合理利用单片机中的定时器和中断处理。这次课设在设计的过程中遇到了很多的问题,但也学到了很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。同时,通过这次课程设计使我懂得了理论与实际相结合的重要性,以及做事要认真态度要端正的道理。在贾老师的指导下,我们完成了这次课设,感谢贾老师的指导和同学们的帮助,同时也感谢学校给我们的这次实践机会,希望学校在以后的课程安排中能够给我们更多的实习机会,让我们通过动手来提到自己的实际操作能力。8、0参考文献【1】单片机原理及接口技术(第3版)李朝青 编著 北京航空航天大学出版社 2008年5月【2】C语言编程(第三版) (美)Stephen G.Kochan著 张小潘译 电子工业出版社 2006年3月【3】51单片机C语言教程 郭天祥 编著 电子工业出版社 【4】 单片机原理与接口技术教程 倪晓军,章韵 编著 清华大学出版社

    注意事项

    本文(单片机电子时钟课设论文 1.docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开