《电子跑表的设计》doc版.doc_第1页
《电子跑表的设计》doc版.doc_第2页
《电子跑表的设计》doc版.doc_第3页
《电子跑表的设计》doc版.doc_第4页
《电子跑表的设计》doc版.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

成绩优 良 中 及格 不及格等级:课 程 设 计课程名称单片机原理与应用课程设计课题名称电子跑表设计专 业电子信息工程班 级1501学 号03姓 名谭青权指导老师肖锋2015年6月*日报告撰写要求(此页不打印)课程设计报告是体现课程设计成果的载体,具体要求如下:1、课程设计报告的基本格式(1)说明书统一使用word文档打印,A4纸张,页边距设置为:上2cm,下2cm,左2.54cm,右2cm。(2)正文采用宋体小四,字间距20磅;1级标题采用黑体小三,2级标题采用黑体四号,3级标题采用黑体小四;1和2级标题段落间距为上下0.5行。(3)图表需统一编号,图标标题采用黑体五号;图标题在图片下方,表格标题在表格上方。(4)装订顺序为:封面、任务书、报告正文、评分表。2、课程设计报告的撰写要求(1)设计报告正文内容为5-6页为宜,主要内容为自己的设计思路、设计步骤、关键性步骤的记录、重要结果的记录以及自己本次课程设计的总结。报告撰写要求思路清晰、结构合理、层次清晰,报告简洁但又要能体现设计过程。(2)报告中图表要求清晰、规范,图表的尺寸大小适当。(3)课程设计报告内容(仅供参考):电气信息学院课程设计任务书课题名称电子跑表的设计姓 名谭青权专业电子信息工程班级1501学号03指导老师肖锋课程设计时间2017/12/11-2017/12/22一、任务及要求设计任务:利用单片机为核心设计一个多功能电子表,具有电时钟和跑表功能。用做时钟时,在显示器上显示时、分、秒,用做跑表时,显示范围00时00分00秒-23时59分59秒并具有跑表启动和跑表复位功能键。当按下启动按钮跑表开始计时,按下停止按停止计时,当按下复位按钮跑表回零。设计要求: 1)确定系统设计方案; 2)进行系统的硬件设计; 3)完成必要的参数计算与元器件选择; 4)完成应用程序设计; 5)应用系统的硬件和软件的调试。二、进度安排第一周:周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。周二周三:完成硬件设计和电路连接周四周日:完成软件设计第二周:周一周三:程序调试周四周五:设计报告撰写。周五进行答辩和设计结果检查。三、参考资料1、王迎旭等.单片机原理及及应用M. 2版.机械工业出版社,20122、胡汉才.单片机原理及其接口技术M.3版.清华大学出版社,2010.3、戴灿金.51单片机及其C语言程序设计开发实例M.清华大学出版社,201目 录 第1章、总体方案设计2 1.1、设计任务及要求21.2、设计原理或者设计思路2第2章 、硬件电路设计42.1、主控制器单片机的选择42.2、时钟电路42.3、显示接口电路52.4、键盘接口电路6第3章、软件设计73.1、设计说明7 3.2、主程序设计73.3、时间处理模块83.4、键盘扫描模块103.5记数回调模块12第4章、调试13第5章、总结15附录16第1章 总体方案设计1.1、设计任务及要求设计任务:利用单片机为核心设计一个多功能电子表,具有电时钟和跑表功能。用做时钟时,在显示器上显示时、分、秒,用做跑表时,显示范围00时00分00秒-23时59分59秒并具有跑表启动和跑表复位功能键。当按下启动按钮跑表开始计时,按下停止按停止计时,当按下复位按钮跑表回零。跑表能记下10个数,记数完毕能回调显示设计要求: 1)确定系统设计方案; 2)进行系统的硬件设计; 3)完成必要的参数计算与元器件选择; 4)完成应用程序设计; 5)应用系统的硬件和软件的调试。1.2、设计原理或者设计思路1设计思路1)计时单元由单片机内部的定时器/记数器来实现。2)时间显示功能通过LED数码管动态扫描来实现。利用单片机内部4的8位并行I/O端口来实现外部按键的信号输入,由于数码管要显示时钟,还要显示跑表,因此,我分别用TR1,TR0定时器来分别定时跑表和时钟,分别写出跑表和时钟的子程序,定义一控制变量Numb并赋其初值0,当Numb=0时调用时钟子程序,当Numb=1时调用跑表子程序,达到跑表显示与时钟显示互不影响。3)跑表的切换,启动,停止,清零功能由软件来实现,分别由P1.0,P1.1,P1.2,P1.3外接按键,跑表的记数,回调显示,分别由P1.6,P1.7外接按键,在分别编写两段不同的子程序来实现所需要的功能1.3、总体设计方案本系统采用AT89C51单片机、6位LDE数码管显示、一个排阻、6个调节按钮、2个电容与1个晶体振荡器共同构成本的单片机电子跑表的硬件。时钟模块与计时模块则分别由单片机内部的定时器/记数器T0与T1来实现。时间显示功能通过LED数码管动态扫描来实现。电子跑表的启动/暂停/清零功能由软件来实现。P1.0实现时钟与秒表的切换功能,P1.1接开始计时键,P1.2接计时暂停键,P1.3接计时重新计时键,P1.6接计时记数键,P1.7接计时回显键。本系统软件部分则采用C51编写,功能模块结构化强,共利用了7个功能函数,2个中断服务函数和1个主函数构成了本次电子跑表的软件部分。图2.1为本系统方框图。AT89C51单片机模块6位共阴数码管显示模块时钟按键位驱动 图2.1 第2章 硬件电路设计2.1、主控制器单片机的选择本次设计采用AT89C51单片机,以下为其标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操 作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。MCS51的管脚图如图2.1 图2.1 89c51芯片管脚图2.2、时钟电路单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路,如图3.2所示。电路中,电容器C1和C2对振荡频率有微调作用,本次设计中电容器取值为20pF,石英晶体选择12MHz,故单片机的机器周期为1us ,图2.2为单片机内部时钟电路 图2.2内部时钟电路2.3、显示接口电路本次设计中使用了6位共阴数码显示管,显示控制采用动态显示,即数据的显示是由段和位选信号共同配合完成的。为了实现显示器的动态扫描,我们需要对显示器进行段控和位控,因此在显示器接口电路中需要有两个输出口,其中一个用于输出8条段控线;另一个用于输出位控线,位控线的数目等于显示器的位数。本次设计中用P1口与显示器的8条段控线相接,用P2.2P2.7与显示器的6条位控线相接。如图2.3所示。 图2.3 显示接口电路2.4、键盘接口电路本设计的键盘接口电路中使用了4个按键分别与单片机的P1.1P1.3口相连如图3.3所示,分别实现时钟/秒表切换、开始计时、暂停计时、重新计时的功能。按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。为了避免键的一次处理闭合,应采CPU多次按用措施消除抖动。图2.4为键盘接口电路图2.4 键盘接口电路第3章 软件设计3.1、设计说明 在进行应用软件设计时应采用模块化结构设计,其优点是:每个模块的程序结构简单,任务明确,易于编写,调试和修改,程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,便于功能扩充和版本升级,是便于多个模块的调用和分工合作。因此为了达到功能结构模块化,易读,简单,易移植的特点,故本次设计采用C51编写。 系统编写时可分为键盘扫描程序模块,时间处理模块,显示模块。如图4.1所示。将这些事先划分好的模块用C51编成不同的子函数,再将它们有机的结合起来从而达到系统的整体功能。图3.1为软件设计总体模块 主函数键盘扫描模块数码管显示模块时间处理模块记数与回调模块图3.1 软件设计模块3.2、主程序设计 本程序可分为4个模块,共定义了7个子函数,其中键盘扫描模块包括键盘扫描函数,数码管显示模块包括时钟显示函数、秒表显示函数,时间处理模块包括时钟系时间处理函数、秒表系时间处理函数、延迟函数,,另本程序还利用了两个定时/计数器分别为T0、T1,故还需定义两个中断函数T0中断服务函数和T1中断服务程序。本程序中由于涉及时钟与秒表互切问题,故定义了一控制变量Numb并赋其初值0,若在仿真过中切到秒表则Numb取反为1,切到时钟则Numb重新为0。因此在程序运行过程中便可控制各按键功能及屏蔽在时钟模式或秒表模式下不相干功能键的影响。图3.2为主程序流程图。开始 赋初值定时器状态1? 否键盘扫描程序Numb=1? 是 否记数回显程序时钟显示程序跑表显示程序结束图3.2 主程序流程图3.3、时间处理模块时钟处理函数用定时器T0定时10ms,其计数初值为,由于T0选用工作方式1,故M为即65536,fosc为晶振频率为12MHZ,t为定时时间10ms,所以X的值为64536,将该值的高八位值赋给TH0,低八位并赋给TL0,这样便完成了T0的初始化工作,因为定时器T0工作在方式1下,故每次定时器T0溢出都需再给T0赋初值。由于T0定时10ms,所以要得到1s的时间需T0溢出100次,由此引入计数变量Count。每当T0溢出,Count便自动加1,直至计满100,便使秒变量Seconds自动加1并初始化Count重新开始计数,直到Seconds为60,初始化Seconds并使分变量Minutes自动加1,同理到时变量Hour为24时,初始化Hours,由此无限循环下去直到关闭电源。图3.3为程序流程图 图3.3 T0中断函数及时钟处理函数流程秒表时间处理函数用的是定时器T1与T0相同,定时10ms,高八位TH1赋值为,低八位TL1赋值为。T1的启动由按键扫描函数控制,当开启T1后,每次T1溢出,Decisec自动加1,直至Decisec到100,秒Sec自动加1,直至分Mint为10,初始化Mint计时复位。图3.4为其程序流程图。 图3.4 秒表处理函数及T1中断服务函数流程3.4、键盘扫描模块时钟与秒表切换键程序:CHANGE键为时钟秒表切换键,当按下CHANGE键时,会产生按键抖动,本程序中利用delay(5)产生5ms延迟使得按键状态稳定后重新确认是否按下了CHANGE键即CHANGE为低电平,此时还需判断控制变量Numb是否为0(Numb为0即奇数次按下CHANGE键显示秒表,Numb为1则为偶数次按下CHANGE键显示时钟),在CHANGE为0且Numb为0的情况下,执行数码管显示秒表函数并对Numb取反为再次按下CHANGE键做准备,此后程序进入确认结束按键循环,若松开CHANGE,则非CHANGE为0,循环结束回到开始处等待按键电平;若一直按着CHANGE,则一直执行数码管显示秒表函数。当Numb为1时,则同理显示时钟函数,非CHANGE为0时退出循环回到等待。图3.5为该程序流程图。图3.5 时钟与秒表切换程序开始计时键程序:在控制变量Numb等于1的情况按下START键则开启T1定时器开始计时,这里加入Numb的目的是为了在时钟状态下屏蔽非时钟功能键,故当切换为秒表状态时,Numb为1,此时秒表系功能键生效,此时按下START键,开始计时。图3.6为开始计时键程序流程图。START=0&Numb=1Delay(5)START=0TR1=1 是Display1()图3.6开始计时程序流程暂停计时键程序、计时复位键程序同开始计时键程序类似都需在Numb为1的情况下方可启用,且其程序流程相似。键盘扫描函数keyscan()是由时钟与秒表切换键程序、开始计时键程序、暂停计时键程序、计时复位键程序构成的。3.5记数回调模块记数回调模块是跑表的一个功能,当切换到跑表功能,开始跑表功能计时后,按下SAVE键,记录一个当前数据,连续10按下SAVE键,记录10个跑表数据。跑表暂停记数并清零,再按下BACK键,就会从第一个记录的数据依次显示到第10个记录的数据,跑表一轮记数完成。按下START又能重新一轮记数。图3.7为记数回调键程序流程图是否切换到跑表Delay(5)SAVE=0 否 记录数据 是跑表清零并暂停记数 按下10次Delay(5)BACK=0否 回显数据 是 按下10次依次显示记录数据第4章 调试为了方便查看,本次课程设计用的是还是仿真调试用KEIL运行程序正确后生成HEX格式的文件,用Proteus画好电路图,导入HEX格式的文件进行仿真。如下图所示,P1.0是秒表与时钟切换键,P1.1为开始计时键,P1.2为暂停计时键。P1.3为重新计时键。时钟的初始计时为59:59:00,跑表初始计时为00:00:00。下图4.1、4.2分别是时钟状态和跑表状态调试图。 图4.1 时钟状态调试图4.2 跑表状态调试图这次调试过程并没有想像的那么顺利,一开始时钟和跑表不能切换,经过修改,算是解决问题,但在调试记数和回显时,也是碰到了很多问题,通过翻阅c语言书籍,问老师,问同学,最终,算是圆满完成调试第5章 总结开始做课程设计时,我们首先需要将硬件设计做出来,在硬件设计好的基础上进行软件设计这样就方便多了。着手软件设计时要有一个整体的思路,即主程序,有了整体思路就开始着手于分模块的设计,如时钟显示程序、中断服务程序、时间处理程序等。每个模块出来后都需要配合主程序进行仿真验证程序是否能正常运行。这次的设计尽管还不是很完善,但我已经非常开心了,至少有了自己的思路再去实践,再在实践的过程中收获,这是课堂上所没有的欣喜。 在课程设计的过程中遇到的各种知识不总是在书上能找到的,所以我们必须自己查找相关资料,利用图书馆或网络搜索,这是一个比较辛苦的过程,你必须从无数的信息中分离出对你有用的,然后加以整理,最后吸收并用到设计中来。通过这点,我收益很大。课程设计是从整体到部分的过程,然而一切并不都是如此的。因为有时候你整体设计好了,然而在设计部分的时候却可能影响到整体,然后又要作出调整,在不断的调整中才慢慢把设计做出来。有时候你还必须把自己前面做的东西全部推翻,然后重新再来。在开始单片机课程设计之前,我对单片机只是有一个比较浅的印象,但开始课设之后,为了完成课设,我不得不重新捧起书本,一点一滴的找我需要的知识,尤其中断系统,定时器那两章基本滚瓜烂熟,然后数码管静态显示,等等,经过深入的了解,我对单片机有了浓厚的兴趣。 经过两个星期的课程设计,确实让我收获很多,学到了很多,特别要谢谢肖老师的指导及严格要求,虽然在设计过程中很累,但是一看到自己做出来的成果,就什么疲劳都没有了。附录:程序清单: #include #define uchar unsigned char #define uint unsigned int /七段共阴数码显示管段码表/ uchar code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /定义初始化变量/ /秒表部分/ uchar Decisec=0;/分秒/ uchar Sec=0;/秒/ uchar Mint=0;/分/ uchar Seconds=0; /时钟部分/ uchar Minutes=59; uchar Hours=23; uchar Count=0; uchar Numb=0;uchar num1=0;uchar num=0;uchar aum=0;uchar jilu103=0; /按键部分/ sbit CHANGE=P10; /切换:可实现跑表与时钟互切 / sbit START=P11; /开始/ sbit STOP=P12; /暂停/ sbit RST=P13; /清零/ sbit SAVE=P16; /记录/sbit BACK=P17; /回调/ /函数声明/ void delay(uchar ms); /延迟函数/ void time_pro1();/秒表处理函数/ void time_pro2();/时钟处理函数/ void keyscan(); /键盘扫描函数/ void display1(); /数码管显示秒表函数/ void display2(); /数码管显示时钟函数/ void chaxun(); /回显函数/ /*/ / 主函数 / /*/ void main() P1=0xff; TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256;TH1=(65536-10000)/256; TL1=(65536-10000)%256; EA=1; ET0=1; ET1=1; TR0=1; while(1) keyscan(); if(Numb=1) chaxun();display1(); if(Numb=0) display2(); /*/ / 延迟函数 / /*/ void delay(uchar ms) uchar i,j; for(i=ms;i0;i-) for(j=500;j0;j-); /*/ / 秒表处理函数 / /*/ void time_pro1() if(Decisec=100) Decisec=0; Sec+; if(Sec=60) Sec=0; Mint+; if(Mint=60) Mint=0; /*/ / 时钟处理函数 / /*/ void time_pro2() if(Seconds=60) Seconds=0; Minutes+; if(Minutes=60) Minutes=0; Hours+; if(Hours=24) Hours=0;/*/ / 键盘扫描函数 / /*/ void keyscan() / 秒表/时钟切换 / if(CHANGE=0) delay(5); if(CHANGE=0)&(Numb=0) display1(); Numb=!Numb; while(!CHANGE) display1(); if(CHANGE=0)&(Numb=1) Numb=!Numb; while(!CHANGE) display2(); / 开始计时 / if(START=0)&(Numb=1) delay(5); if(START=0) TR1=1; while(!START) display1(); / 暂停计时 / if(STOP=0)&(Numb=1) delay(5); if(STOP=0) TR1=0; while(!STOP) display1(); / 重新计时 / if(RST=0)&(Numb=1) delay(5); if(RST=0) while(!RST) Decisec=0; Sec=0; Mint=0; display1(); /*/ / 回显函数/* / void chaxun() if(SAVE=0) /记录 while(SAVE=0) delay(5);display1(); num+; jilunum0=Mint; jilunum1=Sec; jilunum2=Decisec; if(num=9) Decisec=0; Sec=0; Mint=0; TR1=0; display1(); if(BACK=0) /查看记录 while(BACK=0) delay(5);display1(); num1+;Mint=jilunum10; Sec=jilunum11; Decisec=jilunum12; display1();if(num1=num)num1=0; /*/ / 数码管显示秒表函数 / /*/ void display1() P2=0x7f; P0=dispcodeDecisec%10;/ 显示分秒 / delay(1); P2=0xbf; P0=dispcodeDecisec/10;/显示秒个位/ delay(1); P2=0xdf; P0=dispcodeSec%10|0x80;/显示秒十位/ delay(1); P2=0xef; P0=dispcodeSec

温馨提示

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

评论

0/150

提交评论