版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计报告设计课题:基于MCS-51单片机时钟设计专业班级:小构成员:指引教师:设计时间:目录设计任务与规定 31.基本设计规定 32.选作项目 4有关硬件构造概述 41.硬件构造原理 42.有关电路图: 7软件构造概述 8程序清单 10程序调试 17课程总结 17参照文献 19设计任务与规定1.基本设计规定
(1)在ZY15MCU12BD型综合单片机实验箱硬件构造上编写软件完毕设计。也可以在其他MCS—51单片机硬件板上完毕,或自行设计硬件并制做完毕。
(2)程序首地址应使目的机可以直接运营,即从0000H开始。在主程序开始某些必要设立一种适当栈底。程序放置地址须持续且靠前,不要在中间留下大量空闲地址,以使目的机可以使用较少硬件资源。(3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时原则计时制。开始计时时为000000,到235959后又变成000000。
(4)在键盘上选定3个键分别作为小时、分、秒调校键。每按一次键,相应显示值便加1。分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。在调校时均不向上一单位进位(例如分加到59后变为00,但小时不发生变化)。(5)软件设计必要使用MCS-51片内定期器,采用定期中断构造,不得使用软件延时法。(6)上机调试通过。2.选作项目有能力同窗,在做完以上设计后,可选作此项设计内容。(1)另设三个键,分别作小时、分、秒减1调校。(2)在以上设计基本上,修改程序制作一种电子秒表。分、秒各占用2位显示,1/10秒、1/100秒各占用1位显示。设定二个键分别作启动/停止、清零。(3)在做完(2)后,将时钟与秒表合二为一,并且在同步使用时互不影响。即可在时钟与秒表之间任意切换,而不影响走时、计秒。有关硬件构造概述硬件构造原理该课程设计基于STC89C52单片机为核心完毕,外加少量其她辅助器件,硬件构造比较简朴。由于本电路构造比较简朴,单片机I/O口完全够用,故咱们将6位8段LED直接和单片机相连。硬件构造中6位8段LED显示屏,采用动态方式驱动。咱们采用是共阳电路,一位LED显示屏显示内容一段时间,然后下一位LED显示屏显示内容一段时间……,周而复始。只要刷新频率不不大于50Hz,就可以获得清晰稳定显示效果。为了增长和位选相连接I/O口驱动能力,直接接上上拉电阻。在本设计中,只使用了6个按键。复位键,模式设定键、2个上下调节键。1、定期器/计数器定期器/计数器简称定期器,其作用重要用于生产各种时间间隔、记录外部脉冲与事件数量等,是微机中最惯用、最基本部件之一。89C52单片机有2个16位定期器/计数器0(T0)和定期器1(T1).T0由2个定期寄存器TH0和Th0构成,T1则由Th1和TL1构成,她们分别映射在特殊功能寄存器中,从而可以通过对特殊功能寄存器读写来实现对这两个定期器操作。作为定期器时,每个机器周期定期寄存器自动加1,因此定期器也可以看做是计量机器周期计数器。由于每个机器周期为12个时钟震荡周期,因此定期器辨别率是时钟震荡频率1/12.作为计数器时,只要在单片机外部引脚T0(T1)有从1到0电平负跳变,计数器自动加1.计数最高频率普通为振荡频率1/24,例如,选用12MHz晶振,则最高计数频率为0.5MHz。2、中断系统当中央解决器CPU正在执行某程序时,由于某种因素,外界向CPU发出暂停当前工作去解决更重要事情祈求,程序被打断;CPU响应当祈求并转入相应解决程序,解决程序完毕后来,再返回本来程序被打断位置,继续本来工作,这一过程称为中断。实现中断功能部件称为中断系统,或称为中断控制逻辑系统。89C52单片机中断系统简朴实用。其基本特点是:有6个固定可屏蔽中断源,4个在片内,2个在片外,她们在程序存储器中各有固定中断入口地址,由此进入中断服务程序;6个中断源由两级有先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设立编程。若某个中断源通过编程设立,处在被打开状态,并满足中断响应条件,并且满足如下3个条件时,单片机响应此中断:1)当前正在执行那条指令已被执行完。2)当前未响应同级或高档中断。3不在操作IE、IP中断控制寄存器或执行RETI中断指令。在正常状况下,从中断祈求信号有效开始,到中断得到响应,普通需要3个机器周期到8个机器周期。中断得到响应后,自动清除中断祈求标志(对串行I\O端口中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应中断入口地址装入PC,使程序转入相应中断服务程序中去执行。各个中断源在程序寄存器中中断入口地址如表1所示。中断源入口地址INT0(外部中断0)0003HTF0(T0中断)000BHINT1(外部中断T1)0013HTF1(T1中断)001BHRI/TI(串行口中断)0023HTF2(T2中断)002BH各个中断入口地址相隔很近,不便于存储各个比较长中断服务程序,故普通将中断服务程序存储在此外以便存储地方,而在中断入口地址开始二三个单元中,安排一条转移类指令,以转入中断服务程序。由于6个中断源各有其中断求标志IE0、TF0、IE1、TF1、RI/TI以及TF2,在中断源满足中断祈求条件下,各标志自动置1,向CPU祈求中断。如果某个中断源提出中断祈求后,CPU不能及时响应,只要该中断祈求标志不被软件以为清除,中断祈求状态就将始终保持,直到CPU响应此中断为止。对串行口中断而言,这一过程与其她5个中断不同之处在于,虽然CPU响应了中断,其中断标志RI/TI也不会清零,必要在中断服务程序中设立清除RI/TI指令后,才有也许再一次提出中断祈求。CPU现场保护和恢复必要由被响应相应中断服务程序去完毕。当执行RI/TI中断返回指令后,断点值自动从栈顶2字节弹出并装入PC寄存器,使CPU继续执行被打断程序。本课程设计中用到定期器T0,并通过T0定期时间到产生中断。由于实验中定期器T0工作于方式1(即16位方式)且定期器中断容许,因而当定期器计满回零时,TF=1,并可申请中断;当CPU响应中断并进入中断服务程序后,TF自动清零。因此,在中断服务程序中只需要重新设立定期器初始值。如果通过对TF查询来拟定定期器状态(定期器中断不被容许),在查得TF=1,亦即定期器回零后,要用指令将TF清零,以便下次操作。有关电路图:八段数码管:共阳极电路:各某些电路原理图:显示某些电路:电源某些电路:单片机某些电路:数码管驱动电路:控制按钮:复位电路:仿真原理图:最后PCB图:软件构造概述1.主程序在主程序中只完毕系统初始化,同步进行时、分、秒按键扫描。如果有按键按下,则做相应时、分、秒计数数据加1解决。主程序执行流程图如下图所示:开始开始初始化(定期器、显示区、初始化(定期器、显示区、中断系统、计数单元等)开中断开中断调用显示子程序调用显示子程序调用键盘扫描子程序调用键盘扫描子程序N有键按下?N有键按下?YY关中断关中断YY秒加1解决秒键?秒加1解决秒键?NNYY分加1解决分加1解决NNYY小时加1解决分键?小时键?小时加1解决分键?小时键?NN图1主程序流程图图1主程序流程图(2)定期器中断服务程序定期器T0用于时间计时。定期计数个数为5000,由于采用12MHz晶体振荡器,因此定期益处中断周期为5000us=1ms。为保证计时精确性,进入中断服务程序时应及时重设计数初始值。在中断程序中还要判断与否计时1s,若是,还应通过调用其她子程序作时、分、秒值解决。定期器中断解决定期器中断解决重送初值重送初值保护现场保护现场计数单元加1计数单元加1NN到1秒?到1秒?秒加1秒加1N秒清0、分加1秒到60?N秒清0、分加1秒到60?NN分清0、小时加1分到60?分清0、小时加1分到60?N小时到24?小时清0N小时到24?小时清0恢复现场恢复现场中断返回中断返回图2定期器中断程序流程图图2定期器中断程序流程图(3)显示子程序该子程序通过在中断服务程序中被调用而执行。每一次中断程序调用一次,其作用是依照扫描指针循环驱动各个数码管。(4)时钟调节子程序当中断程序中判断出计时1s时,该程序即被调用执行。其作用为将秒计数值加1,同步判断与否应对时批、分作相应修改。(5)延时子程序用于键盘延时去抖。程序清单:#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedint/*八段共阴管显示定义*/unsignedcharwei[8]={0x1f,0x2f,0x37,0x3b,0x3d,0x3e};unsignedcharcodeduan1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharcodeduan2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};ucharBUFF[6];/*定义并初始化变量*/ucharsecond=0;minute=0;hour=0;unit=0;hun=0;ten=0;sec=0;min=0;m,n,q;sbitP_s_add_on_off=P1^0;//键值定义sbitP_m_add=P1^1;sbitP_h_add=P1^2;sbitP_s_sub=P1^3;sbitP_m_sub=P1^4;sbitP_h_sub=P1^5;sbitP_del=P1^6;sbitP_tran=P3^7;/*函数声明*/voiddelay(uchark);//延时子程序voidtime();//时间解决子程序voiddisplay();//时间显示子程序voidkeyboard();//键盘扫描子程序voidstopwatch(); //秒表显示子程序/*****************************//*延时子程序*//****************************/voiddelay(uchark){ucharj;while((k--)!=0){for(j=0;j<125;j++){;}}}/*****************************//*时间显示子程序*//*****************************/voiddisplay(void){ uchari; BUFF[0]=duan1[second%10];//显示秒个位 BUFF[1]=duan1[second/10];//显示秒十位 BUFF[2]=duan2[minute%10];//显示分个位 BUFF[3]=duan1[minute/10];//显示分十位 BUFF[4]=duan2[hour%10];//显示时个位 BUFF[5]=duan1[hour/10];//显示时十位 for(i=0;i<6;i++) { P0=BUFF[i]; P2=wei[i]; delay(4); P2=0xff; }}/*******************************//*秒表显示子程序*//******************************/voidstopwatch(void){ uchara;if(n==1){TR0=1;ET0=1;TR1=1;ET1=1;}if(n==0){TR0=1;ET0=1;TR1=0;ET1=0;}BUFF[0]=duan1[hun];BUFF[1]=duan2[ten];BUFF[2]=duan2[sec%10];BUFF[3]=duan1[sec/10];BUFF[4]=duan2[min%10];BUFF[5]=duan1[min/10];for(a=0;a<6;a++){P0=BUFF[a];P2=wei[a];delay(4);P2=0xff;}}/*******************************//*键盘扫描子程序*//*******************************/voidkeyboard(void){ if(P_tran==0){delay(100);if(P_tran==0)switch(m){case0:m++;break; //切换到秒表case1:m--;break; //切换届时间}}if(m==1){if(P_s_add_on_off==0){delay(100);if(P_s_add_on_off==0){switch(n){ case0:n++;break;case1:n--;break;}}}}if(m==1&&n==0){if(P_del==0){delay(100);if(P_del==0){hun=0;ten=0;sec=0;min=0;}}}if(m==0){if(P_del==0)delay(100);if(P_del==0){switch(q){case0:q++,TR0=0,ET0=0;break;case1:q--,TR0=1,ET0=1;break;}}} if(q==1) {if(P_s_add_on_off==0)//秒调节{TR0=0; delay(100);if(P_s_add_on_off==0) //秒加法{second++;if(second==60){second=0;}} TR0=1; }if(P_s_sub==0) //秒减法 { TR0=0; delay(100); if(P_s_sub==0) second--; if(second==0) { second=59; } TR0=1; } if(P_m_add==0)//分调节{TR0=0; delay(100);if(P_m_add==0) //分加法{minute++;if(minute==60){minute=0;}}TR0=1; }if(P_m_sub==0) //分减法 { TR0=0; delay(100); if(P_m_sub==0) minute--; if(minute==0) { minute=59; } TR0=1; } if(P_h_add==0)//时调节{TR0=0; delay(100);if(P_h_add==0) //时加法{hour++;if(hour==24){hour=0;}}TR0=1; } if(P_h_sub==0) //时减法 { TR0=0; delay(100); if(P_h_sub==0) hour--; if(hour==0) { hour=23; } TR0=1; }}}voidtimer0(void)interrupt1//定期器0方式1,50ms中断一次{TH0=(65536-50000)/256; TL0=(65536-50000)%256;unit++;if(unit==20){second++;unit=0;//注意点。对计数单元清零十分重要,本次调试中就是 if(second==60)//秒钟设为60进制{second=0;minute++;if(minute==60)//分钟设为60进制{minute=0;hour++;if(hour==24)//时钟设为24进制{hour=0;}}}}}voidtimer1(void)interrupt3 //定期器1方式1,10ms中断一次{TH1=(65536-10000)/256;TL1=(65536-10000)%256;hun++;if(hun==10){hun=0;ten++;if(ten==10){ten=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;}}}}}/**************************//*主函数*//**************************/voidmain(void){m=n=q=0;TMOD=0x11;//time0为定期器,方式1TH0=(65536-50000)/256;//预置计数初值TL0=(65536-50000)%256;TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1;ET0=1; //开定期器0中断ET1=1;TR0=1; //启动定期器0while(1){keyboard();//按键扫描if(m==0){display();}if(m==1){stopwatch();}}}程序调试初LED显示时钟时间与实际时间快慢不一致,通过调节定期器,变化给TLO、THO赋初值大小,通过几次调试最后显示时间与实际时间相接近。秒表和时钟功能能通过几次调试,始终不可以完毕切换,存在一定问题。课程总结这几周咱们做了单片机课程设计,真正做到了把所学到知识应用于实践中。通过本次课程设计,使我更加夯实掌握了关于单片机方面知识,在设计过程中虽然遇到了某些问题,但通过一次又一次思考,一遍又一遍检查终于找出了因素所在,也暴露出了前期在这方面知识欠缺和经验局限性。实践出真知,通过亲自动手制作,使咱们掌握知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,咱们不断发现错误,不断改正,不断领悟,不断获取。最后检测调试环节,自身就是在践行“过而能改,善莫大焉”知行观。这次课程设计终于顺利完毕了,在设计中遇到了诸多问题,最后在教师指引下,终于游逆而解。在此后社会发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦发现问题所在,然后一一进行解决,只有这样,才干成功做成想做事,才干在此后道路上劈荆斩棘,而不是知难而退,那样永远不也许收获成功,收获喜悦,也永远不也许得到社会及她人对你承认!我以为,在这学期实验及课程设计中,不但培养了独立思考、动手操作能力,在各种其他能力上也均有了提高。更重要是,在实验课上,咱们学会了诸多学习办法。而这是日后最实用,真是受益匪浅。要面对社会挑战,只有不断学习、实践,再学习、再实践。这对于咱们将来也有很大协助。后来,不论有多苦,我想咱们都能变苦为乐,找寻有趣事情,发现其中贵重事情。这样咱们都可以在实验结束之后变更加成熟,会晤对需要面对事情。另一方面,在这次课程设计中,咱们运用到了此前所学专业课知识,如:CAD制图、汇编语言、模仿和数字电路知识等。虽然过去从未独立应用过它们,但在学习过程中带着问题去学我发现效率很高,这是咱们做这次课程设计又一收获。要做好一种课程设计,就必要做到在设计程序之前,对所用单片机内部构造有一种系统理解,懂得该单片机内有哪些资源;要有一种清晰思路和一种完整软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,重复修改、不断改进是程序设计必经之路;要养成注释程序好习惯,一种程序完美与否不但仅是实现功能,而应当让人一看就能明白你思路,这样也为资料保存和交流提供了以便;在设计课程过程中遇到问题是很正常德,但咱们应当将每次遇到问题记录下来,并分析清晰,以免下次再遇到同样问题课程设计结束了,但是从中学到知识会让我受益终身。发现、提出、分析、解决问题和实践能力提高都会受益于我在后来学习、工作和生活中。设计过程,常有某些不如意,但毕竟这是第一次做,难免会遇到各种各样问题。在设计过程中发现了自己局限性之处,对此前所学过知识理解得不够深刻,掌握得不够牢固。咱们通过查阅大量关于资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白问题就会及时请教教师,使自己学到了不少知识,也经历
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件和课改教学课件
- 课件合同教学课件
- 高中生物教学中生物多样性保护的教学实践与反思课题报告教学研究课题报告
- 课件发送问题解决
- 《多式联运背景下货运资源整合的物流企业核心竞争力培育研究》教学研究课题报告
- 课件参赛教学课件
- 传媒公司年底总结汇报
- 门诊护理伦理题库及答案
- 春季防困安全专项培训会课件
- 逻辑学试题及答案
- 2026年中国数联物流备考题库有限公司招聘备考题库及参考答案详解一套
- 四川省乐山市2026届高一上数学期末质量检测试题含解析
- 2025年天津中德应用技术大学马克思主义基本原理概论期末考试真题汇编
- 2025青海省交通控股集团有限公司面向社会公开招聘70人笔试历年参考题库附带答案详解
- 韩语兴趣爱好课件
- 青霉素过敏性休克处理
- 油漆班组安全晨会(班前会)
- 消费类半固态电池项目可行性研究报告
- 山东省济南市2024年1月高二上学期学情期末检测英语试题含解析
- 口腔门诊医疗质控培训
- (正式版)JBT 9229-2024 剪叉式升降工作平台
评论
0/150
提交评论