本科毕业论文-基于51单片机的智能电子时钟设计【完稿】.doc_第1页
本科毕业论文-基于51单片机的智能电子时钟设计【完稿】.doc_第2页
本科毕业论文-基于51单片机的智能电子时钟设计【完稿】.doc_第3页
本科毕业论文-基于51单片机的智能电子时钟设计【完稿】.doc_第4页
本科毕业论文-基于51单片机的智能电子时钟设计【完稿】.doc_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课题名称: 单片机应用 指导教师: 系 别: 电子信息系 专 业: 应用电子技术 班 级: 姓 名: 目 录封面1任务书2目录3第一章 智能电子时钟的设计内容4(1.1)电子时钟设计思路4(1.2)电子时钟的程序流程图5(1.3)电子时钟原理图6(1.4)电子时钟的功能说明7第二章 电子时钟的硬件内容8(2.1)时钟插件指引图8(2.2)时钟零件清单9(2.3)焊接完毕的电子时钟10第三章 电子时钟的软件设计11(3.1)倒计时版本11(3.2)闹钟版本12毕业设计小节13致谢14主要参考文献15第一章 智能电子时钟设计内容1.1 电子时钟的设计思路1.要达到的目的 利用51单片机及数码管实现时钟的基本功能。 在6个数码管上显示年月日、并可切到时分秒。 利用4个按键,实现年月日及时分秒的调整。 能设置一组闹钟。 能实现秒表功能。2.关键问题的解决 6个数码管的动态扫描。 走时需要使用定时中断,以确保精度。 四个功能模块需要重复利用6个数码管来显示,需要组织好复杂的逻辑。1.2 电子时钟的程序流程图1.3电子时钟的原理图1.4 电子时钟的功能说明操作说明:4个按键依次为:Mode Set Up Down模式选择:按Mode键,选择不同的功能,依次为:时间秒表倒计时日期时间调整:按Mode键进入时间模式按Set 切换要设置的时分秒,按Up或Down对闪烁位置的时间进行设置。秒表功能:按Mode键进入秒表模式 按Up键启动秒表在秒表计时过程中按Up键,暂停跑时。再按Up将继续跑时。在暂停跑时状态下按Set键,重置秒表时间。倒计时功能:按Mode键进入倒计时功能。按Set键切换时分秒准备。在时分秒用Up或Down键设置倒计时的时间长度。在准备状态下按Down或Up键启动日期功能:按Mode键进入日期功能。按Set键切换年月日,按Up或Down进行调整。第二章 电子时钟的硬件内容2.1时钟插件指引图2.2时钟零件清单CLK01 BOMNODescriptionCommentDesignatorQuantity1电池盒BATTERYBT112蜂鸣器BUZZBZ113电容0.1C1, C424电容22pC2, C325电解电容100uFCx116数码管seg-2-10pDeg1, Deg2, Deg337LEDDot1LED1, LED228LEDDot2LED3, LED429LEDTimeLED5110LEDAlarmLED6111LEDStopWatchLED7112LEDDateLED8113三极管8550Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8814三极管8050Q9, Q10, Q11, Q12, Q13, Q14, Q15715电阻10kR1, R2, R3, R4, R5, R6, R7, R8, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R282016电阻220R9, R10, R11, R12, R13, R14, R15R16817轻触按键MODES1118轻触按键SETS2119轻触按键UPS3120轻触按键DOWNS4121单刀双掷开关SW-SPDTS5122单片机P89C51RD2HBPU11IC座123晶振12MXT112.3 焊接完毕的时钟第三章 电子时钟的软件设计3.1 倒计时版本/*项目编号: CLK01名称:多功能时钟tonkeys & 轻风工作室提供专业VB编程,毕业设计VB代编程,单片机程序设计。QQ:58507961 (技术支持)10+年编程经验拍拍:/58507961淘宝:日期:2013-8-25*/#includeat89x51.h/-/缩写宏定义/-#defineuchar unsigned char#define uint unsigned int/数码管位置宏#define DEG14#define DEG25#define DEG32#define DEG43#define DEG50#define DEG61/-/函数声明/-uchar GetMDays(uchar cyear, uchar cmonth);/返回当前日期的月份天数void T0_init();void LedSet(uchar pos, uchar num);uchar GetKey(void);/读取按键voidTaskSecond();/秒表模式voidTaskSetTime();/时间设置模式voidTaskStopWatch();/倒计时voidTaskDate();/日期ucharInKey();/等待一个按键void Beep();/200ms按键音/-/全局变量/-uchar tm_year=13,tm_month=8,tm_day=1;/年月日uchar tm_hour=10,tm_minute=15,tm_second=0;/时分秒uchar tm_x10ms=0;/x10mSuint gms;uchar mode=0;uchar beep_delay=0;uchar Light_Set=7;/7-最亮 20-暗uchar Light_Delay=60;/延时变暗/-/主函数/-void main()T0_init();while (1)/显示时间LedSet(DEG1,tm_hour / 10);LedSet(DEG2,tm_hour % 10);LedSet(DEG3,tm_minute / 10);LedSet(DEG4,tm_minute % 10);LedSet(DEG5,tm_second / 10);LedSet(DEG6,tm_second % 10);LedSet(6,0xE0);switch (GetKey()case 0x01:/modeBeep();TaskSecond();/秒表模式TaskStopWatch();/倒计时模式TaskDate();/日期模式break;case 0x02:/SetBeep();TaskSetTime();/进入时间设置模式break;case 0x04:/upbreak;case 0x08:/downbreak;default:;/-/LED动态扫描/-uchar code led_code=3,207,42,74,198,82,18,203,2,66,0,0,0,0,0,0,0,0,0,0,255;uchar led_buf8;uchar led_scan_step=0;void LedScan()P1=0; /offif (led_scan_step7)P0=led_bufled_scan_step;P1=1Light_Set ) led_scan_step=0;/-/定时器初始化 125uS for 12Mhz Osc/-void T0_init()TMOD=0X02;TH0=(256-125);TL0=(256-125);EA=1;ET0=1;TR0=1;/-/定时中断/-uchar xcou=0;uchar ms=0;bit bz_flag;bit beep_en=0;void time0 (void) interrupt 1if (beep_en)bz_flag=!bz_flag;P2_7=bz_flag;xcou+;if (xcou=2)LedScan();/LED扫描else if (xcou=8 )xcou=0;ms+;gms+;/临时计数用的if (ms=10)tm_x10ms+;ms=0;if (beep_delay!=0)beep_delay-;if (beep_delay !=0)beep_en=1;elsebeep_en=0;if (tm_x10ms=100)/秒tm_second+;if (Light_Delay !=0)Light_Delay-;if (Light_Delay =0)Light_Set=20;/变暗elseLight_Set=7;/亮度高tm_x10ms=0;if (tm_second=60) /分tm_minute+;tm_second=0;if (tm_minute=60) /时tm_hour+;tm_minute=0;if (tm_hour=24) /日tm_day+;tm_hour=0;if (tm_dayGetMDays(tm_year,tm_month) /月tm_month+;tm_day=1;if (tm_month12) /年tm_year+;tm_month=1;/-/返回当前日期的月份天数/-uchar code daylist=31,28,31,30,31,30,31,31,30,31,30,32; /平年各月天数uchar GetMDays(uchar cyear, uchar cmonth)uchar rtn;rtn=daylistcmonth-1;if (cyear % 4=0 & cmonth=2)/闰年2月rtn=29;return (rtn);/-/设置指定位置数码管的字符/-void LedSet(uchar pos, uchar num)if (pos=6)led_bufpos=num;elseled_bufpos=led_codenum;/-/GetKey 读取按键/-uchar GetKey(void)uchar rtn=0;bit flag;flag=1;if (P3_4=0)rtn =0x01;/modeelse if (P3_5=0) rtn|=0x02;/setelse if (P3_6=0)rtn|=0x04; /upelse if (P3_7=0)rtn|=0x08;/downelse flag=0;/pressedif (flag)gms=0;while (P3_4=0 | P3_5=0 |P3_6=0 | P3_7=0)if (gms1000) gms=1000;if (gms=24) tmp=0;tm_hour=tmp;else if (pos=1)/mmtmp=tm_minute;tmp+;if (tmp=60) tmp=0;tm_second=0;tm_minute=tmp;else if(pos=2)tm_second=0;cms=0;else if (tmp=0x08)/downif (pos=0)/hhtmp=tm_hour;if (tmp=0) tmp=23;else tmp-;tm_hour=tmp;else if (pos=1)/mmtmp=tm_minute;if (tmp=0) tmp=59;else tmp-;tm_second=0;tm_minute=tmp;else if(pos=2)tm_second=0;cms=0;if (cms=1)LedSet(DEG1,tm_hour / 10);LedSet(DEG2,tm_hour % 10);LedSet(DEG3,tm_minute / 10);LedSet(DEG4,tm_minute % 10);LedSet(DEG5,tm_second / 10);LedSet(DEG6,tm_second % 10);LedSet(6,0xE0);else if (cms=500)if (pos=0)LedSet(DEG1,20);LedSet(DEG2,20);else if (pos=1)LedSet(DEG3,20);LedSet(DEG4,20);else if (pos=2)LedSet(DEG5,20);LedSet(DEG6,20);else if (cms=1000)cms=0;/-/等待一个按键/-uchar InKey(void)uchar rtn=0;while (rtn =0)rtn=GetKey();return (rtn);/-/倒计时/-voidTaskStopWatch()uchar tmp,pos=0;uchar hh=0,mm=0,ss=30,mms=0,m10ms=0;uint cms=0;while (1)LedSet(DEG1,hh / 10);LedSet(DEG2,hh % 10);LedSet(DEG3,mm / 10);LedSet(DEG4,mm % 10);LedSet(DEG5,ss / 10);LedSet(DEG6,ss % 10);LedSet(6,0xB0);/hh=0,mm=0,ss=30,mms=0,m10ms=0;tmp=InKey();if (tmp=0x01)return;else if (tmp=0x02)/stop time setgms=0;cms=0;pos=1;while (1)if (gms!=0)cms+;gms-;tmp=GetKey();if (tmp=0x01)/exitreturn;else if (tmp=0x02)/next pospos+;if (pos=4) pos=0;break;else if (tmp=0x04)/upif ( pos=1)/hhif (hh99)hh+;else hh=0;else if (pos=2)/mmif (mm59)mm+;elsemm=0;else if (pos=3)/sif (ss0)hh-;else hh=99;else if (pos=2)/mmif (mm0)mm-;elsemm=59;else if (pos=3)/sif (ss0)ss-;elsess=59;if (cms=1)LedSet(DEG1,hh / 10);LedSet(DEG2,hh % 10);LedSet(DEG3,mm / 10);LedSet(DEG4,mm % 10);LedSet(DEG5,ss / 10);LedSet(DEG6,ss % 10);LedSet(6,0xB0);else if (cms=500)if (pos=1)LedSet(DEG1,20);LedSet(DEG2,20);else if (pos=2)LedSet(DEG3,20);LedSet(DEG4,20);else if (pos=3)LedSet(DEG5,20);LedSet(DEG6,20);else if (cms=1000)cms=0;else if (tmp=0x04 | tmp=0x08)/startcms=0;gms=0;while (1)if (gms!=0)cms+;gms-;if (cms % 10=1)if (m10ms=0)if (ss=0)if (mm=0)if (hh=0)/stopbreak;elsehh-;mm=59;elsemm-;ss=59;else ss-;m10ms=99;elsem10ms-; else if (hh!=0)LedSet(DEG1,hh / 10);LedSet(DEG2,hh % 10);LedSet(DEG3,mm / 10);LedSet(DEG4,mm % 10);LedSet(DEG5,ss / 10);LedSet(DEG6,ss % 10);LedSet(6,0xB0); elseLedSet(DEG1,mm / 10);LedSet(DEG2,mm % 10);LedSet(DEG3,ss / 10);LedSet(DEG4,ss % 10);LedSet(DEG5,m10ms / 10);LedSet(DEG6,m10ms % 10);LedSet(6,0xB4);if (cms=1000)cms=0;if (GetKey()!=0)return;/时间到gms=0;cms=0;while (1)if (gms!=0)cms+;gms-;if (cms=1)LedSet(DEG1,0);LedSet(DEG2,0);LedSet(DEG3,0);LedSet(DEG4,0);LedSet(DEG5,0);LedSet(DEG6,0);LedSet(6,0xB0);else if (cms=500)LedSet(DEG1,20);LedSet(DEG2,20);LedSet(DEG3,20);LedSet(DEG4,20);LedSet(DEG5,20);LedSet(DEG6,20);LedSet(6,0xFF);else if (cms=1000)cms=0;if (cms=1)beep_en=1;else if (cms=200)beep_en=0;else if (cms=300)beep_en=1;else if (cms=500)beep_en=0;if (GetKey()!=0 )beep_en=0 ;return;/-/日期/-voidTaskDate()uchar tmp,pos=0;uint cms=0;while (1)LedSet(DEG1,tm_year / 10);LedSet(DEG2,tm_year % 10);LedSet(DEG3,tm_month / 10);LedSet(DEG4,tm_month % 10);LedSet(DEG5,tm_day / 10);LedSet(DEG6,tm_day % 10);LedSet(6,0x7A);tmp=GetKey();if (tmp=0x01)return;else if (tmp=0x02)/date setpos=1;/yearcms=0;gms=0;while (1)if (gms!=0)gms-;cms+;if (cms=1)LedSet(DEG1,tm_year / 10);LedSet(DEG2,tm_year % 10);LedSet(DEG3,tm_month / 10);LedSet(DEG4,tm_month % 10);LedSet(DEG5,tm_day / 10);LedSet(DEG6,tm_day % 10);LedSet(6,0x7A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论