版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计任务书题目电子时钟系统设计专业、班级电信11-02学号姓名李瑞重要内容、基本规定、重要参考资料等:一、重要内容:=1\*GB3①熟悉单片机应用系统的设计方法和规范,达成综合的目的。=2\*GB3②学习文献检索和查找数据手册的能力。=3\*GB3③学习protel软件的使用。=4\*GB3④学会整理和总结设计文档报告。二、基本规定:=1\*GB3①以MCS-51系列单片机为核心,组成一个电子时钟系统。=2\*GB3②系统显示由6位数码管显示组成,分别显示时间值的时、分、秒。=3\*GB3③可以随时对当前时间进行调整。=4\*GB3④可以随时输入定期(闹钟)时间。=5\*GB3⑤定期(闹钟)时间到,发出闹钟提醒信号。=6\*GB3⑥闹钟提醒信号的声音为断续形式,最长不超过1分钟。三、重要参考资料:=1\*GB3①张毅坤等单片微型计算机原理及应用西安西安电子科技大学出版社=2\*GB3②李建忠编著单片机原理及应用西安西安电子科技大学出版社完成期限:2023年1月17日指导教师署名:课程负责人署名:2023年1月4日目录摘要 11设计方案选择 21.1单片机选型 21.2按键模块 21.3显示模块 21.4计时参考模块 31.5显示器驱动模块 31.6闹钟响铃模块 41.7电源模块 42硬件接线及设计 42.1单片机晶振配置 52.2复位电路设计 52.3按键电路设计 62.4蜂鸣器驱动电路设计 62.5显示模块电路设计 73软件部分 73.1主函数流程图 73.2定期器T0中断服务程序流程图 83.3闹钟响应程序流程图 93.4键盘扫描程序流程图 104系统综述 114.1上电界面 114.2调时界面 114.3闹钟设定界面 114.4正常走时界面 124.5闹钟响应 12附录1总体设计电路图 15附录2PCB图 16附录3元件清单 17附录4总程序 18摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广泛、发展不久。Intel公司生产的MCS-8051系列单片机是各单片机中最为典型和最有代表性的一种。本次设计以MCS-8051芯片为核心,辅助以必要的外围电路,设计了一个结构简朴功能齐全的数值时钟。在硬件方面,单片机外接12MHz芯片进行驱动。通过数码管可以准确明亮的显示时、分、秒;四个简朴的按键实现对时间的调整;蜂鸣器实现闹钟响铃功能;软件方面采用c语言编程。整个电子钟系统能完毕时间的显示、调试和一组定期闹钟的功能。关键词:51单片机定期器闹钟数码管
1设计方案选择1.1单片机选型根据选题芯片采用MCS-8051单片机,Intel公司生产的51系列8位单片机,凭借其成熟的技术标准和很高的性价比得到了广泛的普及与应用,其功能强大,用来做电子表硬件易实现,编程规范。1.2按键模块方案一:4×4行列式键盘假如选择此方案,那么在修改时钟或设立闹铃时间时就可以直接从键盘输入,方便、快捷。缺陷也很明显,一是浪费按键,用全键盘来实现设定期间的小功能不免大材小用;二是从实用性考虑,全键盘体积大,明显不经济不方便。故放弃。方案二:独立式按键假如设立过多按键,将会占用较多I/O口,并且会给布线带来不便,同时浪费按键,不高效,程序繁琐。本次设计合用于按键较少的情况。为了尽量实现按键的高效性,本次设计采用四个独立式按键,分别定义为key_mode、key_add、key_move,key_confirm,依次是模式键、加数键、移位键、确认键。1.3显示模块方案一:液晶显示器LCD假如选择此方案,将会减少系统的功耗,可以用电池供电,便于携带,但液晶显示器的驱动电路复杂,使用起来有一定的难度。方案二:数码管LED数码管的驱动电路简朴,使用方便,假如选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺陷是功耗较大。按照本次任务书设计规定,选择两个4位一体七段数码管用于显示。1.4计时参考模块方案一:专用时钟芯片假如使用时钟芯片,系统就不怕掉电且时间精确,但这种芯片比较贵,浪费资源不经济。方案二:单片机内部定期/计数器由于本次设计本重要是为了学习单片机程序的编写和调试,以及设计硬件电路的一些方法,因此采用软件的方法来计时。本次设计用单片机内部定期/计数器T0作为电子时钟参考。1.5显示器驱动模块由于通过数码管公共极的电流较大,单片机I/O口驱动能力是不够的,故LED驱动模块必不可少。为避免过多地使用分立元件,本次设计采用一片74LS245来驱动位码,用P2口进行位选扫描。图174LS245元件封装图74LS245是常用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据,74LS245还具有双向三态功能。片选端,接低电平时传输数据,接高电平时A、B均为高阻态。方向选择端AB/,接高电平时信号由A向B传输(发送),接低电平时信号由B向A传输(接受)。1.6闹钟响铃模块通过三极管放大后驱动蜂鸣器工作,单片机I/O接三极管基极。1.7电源模块本系统采用了数码管作为显示器,功耗较大,不便于使用电池供电。况且本系统的体积较大,即使使用电池供电也不便于随身携带,因此用5V外部稳压电源来供电。2硬件接线及设计8位七段LED显示器8位七段LED显示器MCS-8051段码驱动晶振MCS-8051段码驱动晶振复位电路位码驱动复位电路位码驱动按键蜂鸣器按键蜂鸣器图2系统硬件框图2.1单片机晶振配置图3单片机晶振配置和复位电路晶振选择12MHz,接到如图所示引脚。2.2复位电路设计图4复位电路复位电路兼具上电复位功能以及按键复位功能,接到如图所示引脚。2.3按键电路设计图5按键电路采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。四个独立式按键分别定义为key_mode、key_add、key_move、key_confirm,依次是模式键、调时加键、调时移位键、确认键。2.4蜂鸣器驱动电路设计图6蜂鸣器驱动电路蜂鸣器采用NPN三极管放大电路驱动,接到如图所示引脚。2.5显示模块电路设计显示设备为共阳7段数码管(LED),用单片机P0口作为LED段选控制端,用单片机P2口作为LED位选控制端,并采用集成块74LS245作为位驱动模块。片选端接地,方向选择端AB/接电源。3软件部分3.1主函数流程图开始开始初始化初始化定期器T0循环中断计时主循环定期器T0循环中断计时主循环键盘扫描键盘扫描闹钟鉴定闹钟鉴定显示响应显示响应闹钟响应闹钟响应结束结束图7主函数程序流程图开始3.2定期器T0中断服务程序流程图开始T0重装初值T0重装初值t+1t+1t=20?t=20?tt=0,sec+1secsec=60??sec=0,sec=0,min+1minmin=60??min=0,min=0,hour+1hourhour=24??hour=0hour=0结束结束图8定期器T0中断服务程序流程图3.3闹钟响应程序流程图开始开始闹钟鉴定闹钟鉴定闹钟定期到?闹钟定期到?闹钟打开?闹钟打开?key_confirmkey_confirm按下?响铃一分钟响铃一分钟关闭蜂鸣器关闭蜂鸣器结束结束图9闹钟响应程序流程图3.4键盘扫描程序流程图开始开始键盘扫描键盘扫描有键按下?有键按下?键盘抖动?键盘抖动?key_confirmkey_movekey_addkey_modekey_confirmkey_movekey_addkey_modeconfirm();mov+1confirm();mov+1add();moshi+1moshi>2?moshi>2?mov>2?moshi=0moshi=0mov=0结束结束图10键盘扫描程序流程图4系统综述4.1上电界面电子表上电后自动初始化,接着从00-00-00开始走时,显示正常走时界面,此时闹钟默认关掉。按下key_mode键,可依次切换到调时界面、调闹钟界面、正常走时界面,如此循环往复。上电初始化后,调时初值为0000-00,闹钟初值为00-0000。4.2调时界面调时界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。在调时界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。当且仅当在调时界面下,按下key_confirm键可确认设定,电子表按设定期间更新并走时,同时自动清零设定期间。此时再按key_mode键切换回正常走时界面即能看届时间已经更新。假如调时后没有按下key_confirm键确认,而是直接按key_mode键切换回正常走时界面,则设立时间被保存,当前时间并不更新。4.3闹钟设定界面闹钟设定界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。在闹钟设定界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。闹钟设立好后直接按key_mode键返回正常正常走时界面即可,无需按key_confirm键确认,闹钟设定值会自动保存。4.4正常走时界面正常走时界面,从左至右依次显示时、分、秒,小点亮灭代表闹钟开闭。在正常走时界面下,按下key_add键和key_move键不产生操作,LED显示无变化;按下key_confirm键可循环开闭闹钟,LED显示相应变换提醒闹钟的开闭;按下key_mode键可依次切换到调时模式、闹钟设定模式、正常走时模式,循环往复。4.5闹钟响应当正常走时到达闹铃设定值后,闹铃响应,正常情况下连续蜂鸣一分钟后自动关闭蜂鸣器。闹铃响铃过程中,若按下key_confirm键可立刻关闭蜂鸣器。闹铃响应后自动等待下次响应。
总结在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。此外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清楚的思绪和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改善是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应当让人一看就能明白你的思绪,这样也为资料的保存和交流提供了方便;在设计课程过程中碰到问题是很正常德,但我们应当将每次碰到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会碰到各种各样的问题。在设计的过程中发现了自己的局限性之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。参考文献[1]
郑君里,应启珩,杨为理.信号与系统(第二版)上册[M].高等教育出版社,2023[2]
郑君里,应启珩,杨为理.信号与系统(第二版)下册[M].高等教育出版社,2023[3]
谭浩强.C程序设计(第二版)[M].清华大学出版社,2023[4]于京.
51系列单片机C程序设计与应用案例[M].北京:中国电力出版社,2023.[5]孙育才.
ATMEL新型AT89S52系列单片机及其应用[M].北京:清华大学出版社,2023.[6]
吴坚,刘高平.基于GPRS网络的点对点图像传输方案[J].计算机应用研究,2023,
附录附录1总体设计电路图附录2PCB图附录3元件清单序号元件名称规格型号/参数数量(个)1单片机AT89C5112显示驱动三极管Q113晶振12MHz14电容33pF210μF15按键S116排阻10217电阻10K14.7K18蜂鸣器LS119数码管4BIT_8SEG_LED210驱动芯片74LS2451附录4总程序//****************头文献及宏定义*******************************#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint//****************软件延时程序*********************************voiddelay(uintii){while(--ii);}//****************定义数码管驱动码******************************ucharduan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0X7F};//段选,0123456789-灭.ucharwei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位选,共阳,从右至左//****************定义变量**************************************uchart=0,sec=0,min=0,hour=0; //正常走时时间变量ucharsec1=0,min1=0,hour1=0;//时间设定值变量ucharsec2=0,min2=0,hour2=0;//闹钟设定值变量ucharalarm_en=0;//闹钟开关变量ucharalarm_flag=0;//闹钟定期到达标志变量ucharp3=0,moshi=0,mov=0;//P3口查询,模式值,调整位//显示缓冲区,依次为正常、调时、闹钟设定、调整位带点标记uchartemp[8],temp1[8],temp2[8],temp3[8];//****************函数声明*************************************voidinitialize(void);//初始化voidshow(void);//正常走时显示voidshow1(void);//时间设定显示voidshow2(void);//闹钟设定显示voidshow3(void);//调整位标记voidshow4(void);//闹钟开关标记voidkeyscan(void);//键盘扫描voidadd(void);//调时调闹钟加数程序voidconfirm(void);//调时确认,闹钟开关voidalarm_judge(void);//闹钟定期到达鉴定voidbeep(void);//闹钟响铃程序//******************主函数***************************voidmain(){initialize();while(1){ keyscan(); alarm_judge(); switch(moshi) { case0:show();show4();break; //显示正常走时 case1:show1();show3();break;//显示设立时间 case2:show2();show3();break;//显示闹钟时间 } if(alarm_flag==1&&alarm_en==1) //定期时间到达且闹钟打开 {beep();} }}//*****************定期器初始化**************************voidinitialize(void){TMOD=0x01;TH0=0X3C;TL0=0XB0; //50msET0=1;EA=1;TR0=1; P1=0X7F;//初始化时关掉蜂鸣器alarm_flag=alarm_en=0;}//*****************定期器T0中断服务程序****************voidTimer0(void)interrupt1{TL0=0XB0;TH0=0X3C;t++;if(t==20)//(50ms*20=1s) {t=0;sec++;}if(sec==60)//秒为60,则清零,分加1 {sec=0;min++;}if(min==60)//分为60,则清零,时加1 {min=0;hour++;}if(hour==24)//时为24,则清零 {hour=0;}if(sec1==60) {sec1=0;min1++;}if(min1==60) {min1=0;hour1++;}if(hour1==24) {hour1=0;}if(sec2==60) {sec2=0;min2++;}if(min2==60) {min2=0;hour2++;}if(hour2==24) {hour2=0;}}//******************正常时间显示程序*******************voidshow(void){uchari=0;temp[0]=sec%10; temp[1]=sec/10; temp[2]=10;temp[3]=min%10;temp[4]=min/10; temp[5]=10; temp[6]=hour%10; temp[7]=hour/10;for(i=0;i<8;i++){ P2=wei[i]; P0=duan[temp[i]]; delay(100);}}//******************调时模式显示程序*******************voidshow1(void){uchari=0; temp1[0]=sec1%10; temp1[1]=sec1/10; temp1[2]=10;temp1[3]=min1%10;temp1[4]=min1/10; temp1[5]=11; temp1[6]=hour1%10; temp1[7]=hour1/10;for(i=0;i<8;i++){ P2=wei[i]; P0=duan[temp1[i]]; delay(100);}}//******************闹钟设定模式显示程序*******************voidshow2(void){uchari=0;temp2[0]=sec2%10; temp2[1]=sec2/10; temp2[2]=11;temp2[3]=min2%10;temp2[4]=min2/10; temp2[5]=10; temp2[6]=hour2%10; temp2[7]=hour2/10;for(i=0;i<8;i++){ P2=wei[i]; P0=duan[temp2[i]]; delay(100);}}//******************调整位标记显示程序*******************voidshow3(void){ucharmovv=0;switch(mov) { case0:movv=0; break; case1:movv=3; break; case2:movv=6; break; }P2=wei[movv]; P0=duan[12]; delay(100);}//*********************闹钟开闭显示程序*******************voidshow4(void){if(alarm_en==1){P2=wei[2]+wei[5]; P0=duan[12]; delay(100); }}//******************键盘扫描程序***********************voidkeyscan(void){ P3=0XFF;p3=P3;if(p3==0XFF)return;if(p3==0XFE) //key_mode键{ delay(10); if(p3==0XFE) { moshi++; if(moshi>=3)moshi=0; } while(p3==0XFE)//key_mode键按下到弹起期间 { p3=P3; switch(moshi) { case0:show();break; //显示正常走时 case1:show1();break;//显示设立时间 case2:show2();break;//显示闹钟时间 } } }if(p3==0XFD) //key_add键{ delay(10); if(p3==0XFD) { add(); } while(p3==0XFD)//key_add键按下到弹起期间 { p3=P3; switch(moshi) { case0:show();break; //显示正常走时 case1:show1();break;//显示设立时间 case2:show2();break;//显示闹钟时间 } } }if(p3==0XFB) //key_move键{ delay(10); if(p3==0XFB) { mov++; if(mov>=3)mov=0; } while(p3==0XFB)//key_move键按下到弹起期间 { p3=P3; switch(moshi) { case0:show();break; //显示正常走时 case1:show1();break;//显示设立时间 case2:show2();break;//显示闹钟时间 } } }if(p3==0XF7) //key_confirm键{ delay(10); if(p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年债务转让及借款协议
- 监理课程设计点评表模板
- 迷宫游戏课程设计制作
- 渡槽结构设计课程设计
- 2024至2030年中国消防变频气压供水成套设备数据监测研究报告
- 2024年风火轮电机项目可行性研究报告
- 2024年有机硅低张隔离剂项目可行性研究报告
- 安防课程设计实训总结
- 高三数学教学课程设计
- 2024至2030年中国功能性香皂数据监测研究报告
- CA码生成原理及matlab程序实现
- 国家开放大学《电气传动与调速系统》章节测试参考答案
- 须弥(短篇小说)
- 旋风除尘器设计与计算
- 《装配基础知识培训》
- 出口退税的具体计算方法及出口报价技巧
- PCB镀层与SMT焊接
- Unit 1 This is my new friend. Lesson 5 课件
- 2019年青年英才培养计划项目申报表
- 芳香油的提取
- 企业人才测评发展中心建设方案
评论
0/150
提交评论