




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子时钟课程设计 班级:机自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 #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课程设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电信服务合同协议模板:5G网络覆盖合作协议
- 2025年数字艺术展览虚拟现实技术与观众深度参与深度解析研究报告
- 2025年厂房购置中介服务费及佣金协议范本
- 2025版全屋定制家居设计与安装及家具定制合同
- 2025年度户外LED灯箱广告制作与安装服务合同
- 2025年吊车租赁及吊装作业风险评估合同
- 2025年度电脑系统安全防护与维护合同
- 2025版跨境离婚协议与子女抚养权及财产分割专项合同
- 2025年高新技术企业研发成果转化服务合同模板
- 2025版建筑工程节能合同模板
- 公安涉密载体管理制度
- 2025年中国蛇养殖行业市场前景预测及投资价值评估分析报告
- JG/T 536-2017热固复合聚苯乙烯泡沫保温板
- T/CSIQ 8008-2018正装鞋
- 浙江易锋机械有限公司年产2000万只空调压缩机活塞项目环评报告
- 视唱练耳讲课课件
- 酒店管理安全总监岗位职责
- 2025-2030中国电流传感器行业市场发展趋势与前景展望战略研究报告
- 桩基工程监理评估报告
- 2025年供水管道工职业技能竞赛参考试指导题库300题(含答案)
- 预包装食品配送服务投标方案(技术方案)
评论
0/150
提交评论