LED数码管秒表_第1页
LED数码管秒表_第2页
LED数码管秒表_第3页
LED数码管秒表_第4页
LED数码管秒表_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计说明书课题名称专 业电气工程学生班级学号指导教师完成日期2012年6月10 0目录1概述31.1 总体设计方案31.2 硬件设计与焊接31.3 软件设计方案32系统总体方案及硬件设计42.1 硬件总体设计42.2 单片机基本电路设计62. 3秒表时间显示电路设计72.4 独立按键电路设计92. 5蜂鸣器电路设计103软件设计113. 1程序设计思路113. 2秒表程序构成113.3 源程序代码与流程图124实验仿真145设计总结15附录116附录222附录3231概述1.1 总体设计方案先进行系统板的基本焊接,即先将晶振电路和复位电路焊接完成。然 后对秒表的功能进行总体的设计和规

2、划,列写出程序的纲要,规划好I/O 口的控制对象。再进行外围电路的设计,根据安排好的I/O 口的使用,设 计出合理的电路图,并进行最后的焊接。最后,根据自己的总体设计和 规划进行软件设计。1.2 硬件设计与焊接最小系统版是现成的套件,只要焊接时细心一点基本不会出错,而数 码管一般是由P0和P2 口控制,或者由P0 口加锁存器控制,这也不需要 自己过多的去设计,只要焊接时仔细一点,一般也不会出错。在这个秒 表中,最重要的就是独立按键的设计和焊接,因为,如果设计不合理, 就很有可能造成秒表的操作不便或者是计时误差增大。我认为,按键2 控制外部中断0是最优选择。1.3 软件设计方案将各个功能以模块化

3、的形式设计出来,当然,要先写主体,编译通过 并下载入实验板功能可以实现后再添加其他功能模块,然后再编译下载, 一步一步直至完成所有功能。软件设计要比硬件设计复杂很多,出现的问题也多。小问题一大堆,。 在设计中,我遇到的最大的两个问题就是存储时间的数组定义和减小按 键存数时产生的误差。刚开始我存储时间数组定义为code型,结果不能 用设置的时间变量赋值,在网上找了好久才发现问题所在,只能将code 去掉;最初存储时间数值的按键只是一个单纯的按键,结果发现按键按 下期间秒表是停止的,最后只得将该功能用外部中断来实现,并且将其 设置为下降沿触发,这样就大大减少了误差。2系统总体方案及硬件设计2. 1

4、 硬件总体设计1 )单片机选型:AT89S512)复位电路:上电+按钮3)晶振电路4)键盘:独立键盘+中断5)数码管显示:LED6)独立按键控制原理图如下:文案单片机管脚图:4671R20i i.31.41 151116Pl.nVccPlPO.OPL2POJPl.3QP0.2PL4P03PL5TP0.4P1.6CP0.5Pl.7P0.6RST/Vpp8P0.7RXD.P3.09EX'VppTXD/P3JcALEPROGrT0Pj.2V-PSENTXTT/P335P27?TOP1.42P26TIP3.5RF2.5WKP3.6c:P2.4RDT3.7P2?XTAL2P2.2XTALIP2d

5、VssP2 040iii ii i.I'1111y 1111: 1361*1111:35"riiii:34i*iii:一33r-riiii热1"iiaiLriaii30i"ii i129111l去1*1111: 12?nriiii26i'ii ii址111124riii应一ra22rii ar1111: 1:I*11 11: 1:y 1111: : :r-I'1111r2.2 单片机基本电路设计1)复位电路:上电+按钮2)晶振电路原理图如下:624II20单片机最小系统34 '1胆醫开关4卜1013L41516P1.QPI.IVcc

6、PO.OP1.2PO.IP13cP0.2P1.4oP03PI.5TP4P1.6cP0.5P1.7P0.6RST.Vpi>8P0.7VRXDT3X)oEA,VprTXD/P3.17c?LEPROGIXTOP3.2J卩SENINTT/P3.35P2.7TO.P3.42P2.6TIP3.5RP2.5W/P3.6cP2.4RD.T3JP2JXTAL2P2.2XTALIP2.IVssP2.04039373635312622212.3 秒表时间显示电路设计1)4位7段LED数码管(共阴)2)排阻3)1 k Q 电阻 *44)S9012 PNP 三极管*4为了不使LED数码管过流损坏,用上拉排阻限流。

7、LED数码管位选直接与P2 口相连,数码管显示会比较暗,为了解 决这个问题,我从网上找到利用S9012 PNP三极管作为驱动的方法来解 决这个问题! 七段LED数码管及其接口七段LED数码管由七个发光段构成,每段均为1个LED二极管。通过 控制不同段的点亮和熄灭,显示出16进制数字或字符。七段LED显示器 有共阳极和共阴极两种结构,如图所示的七段LED实际上包含8个LED(7 段字形加上小数点DP)o 1位LED显示器有1根位选线和8根段选线,段 选线控制字符的选择,位选线控制显示位的亮和暗。agdoDR十六进制数及空白字符与数码管的显示段码字型共阳级段码共阴极段码字型共阳级段码共阴极段码0C

8、OH3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3BOH4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFHOOH880H7FHp8CH73H4位LED数码管(共阴)管脚图:d dp原理图如下:秒表时间显示电路设计40pm ri I pi JN.) Pl.4PI 4 n»Pl .7Rxirrin rxo pi iis i i F' * iar).i 11.1*15 TF'4 TO PIT X1AL2 MALIV<t rnn miT(l2roj104rojF

9、07 rXVFF 0 LVM«X. pslRTZ.6>2512 422PXI12 n19J8ztC d dp C- $ 4SWI2IkQsoon: px»i?lk£2> MIkH2.4 独立按键电路设计参考市场上的秒表,一般都有清零、开始计时和查看计时记录的功 能,所以我用4个按钮来实现清零/查看、开始/计时、上翻、下翻的功能, 这样我的秒表基本上和市场上的秒表功能一致。原理图如下:2.5 蜂鸣器电路设计当用户按下任意有效按键时蜂鸣器都会发出蜂鸣提醒,以提示用户 按键成功,已进入既定程序进行工作,从而提升该秒表系统的用户体验。原理图如下:S9U12Ik

10、QIdii12IA11ITl£ia56PinVrc40pipo.n39pi、PO.IPI3P0.23?sPl .4P0336TPl.5P0.43SPl .6cP0.534Pl.?P0.633RST/Vpd8P0.732KXD.P3.0Ea.Vpp329TXD/P3.1/XLLFkuGTVTU.PJ.2cPstN20wP2.72RTTl/Pl zl2P262?lwrP2.52£i ifr jqR2,cl厶4 RDT7P2.324VTA 1P2.22?A 1 ALZYTA I 1P2.I22P2.021vbb蜂鸣器电路设计3软件设计3. 1 程序设计思路利用定时器经确定时,并且

11、利用随机存储区的有限空间,定义一个 二维数组,通过按键将时间数值赋给数组(实践证明,随机存储器最多 只能存储30组时间数值),然后在秒表停止或在数组存满的情况下将所 存的时间数值读出。当然,也需要通过按键来读取不同时间数值,并且 使用按键来控制秒表的开始、停止与清零。附加项目:1)按键每按下一次,蜂鸣器声响50毫秒或100毫秒;2)在秒表启动时,第二段数码管小点亮0.5亳秒,灭0.5毫秒;3)在秒表启动和读取所存时间数值时,由于只有四段数码管,不可能将 分,秒,毫秒同时显示,所以在秒表启动时,当时间小于60秒时,数码 管显示秒和毫秒,而大于60秒时则显示分和秒;在读取所存时间数值时, 采用“点

12、”作标志位,第二段数码管的“点”亮表示显示的是秒和毫秒, 而第四段的数码管的“点”亮则表示的是分和秒。3. 2 秒表程序构成(具体程序参见附1)3. 2. 1主程序(main函数)程序的初始入口,不断调用各个子程序,程序的骨架。3.2.2秒表启动存数程序(keeptime函数)用以处理分,秒和毫秒之间的联系。3.2.3读取所存数值处理程序(showtime函数)用以读取处理所存时间数值并加以处理。3.2.4数码管显示程序1)秒表启动时显示程序(display函数):确定显示数值,将显示数 值分为个位、十位、百位、千位,分别查表显示。2)读取所存时间数值显示程序(display2函数):调取数组

13、值赋给 该函数,确定显示数值,将将其分为个、十、百、千位,分别查表显示。3)所存时间数值序号显示程序(display3函数):用以显示所存时 间的序号,以便于区分。3.2.5按键扫描程序1)扫描按键1 ( scankey 1函数)用于停止秒表或所存时间数值清零。2 )扫描按键2 ( exterO函数)用以触发外部中断0,触发方式为下降沿触发,尽量降低了存储 时间数值时引起的误差。3)扫描按键3 ( scankey3函数) 用于所存时间数值的序号加一。4)扫描按键3 ( scankey4函数)用于所存时间数值的序号减一。3.2.6延时程序(de"y函数)用于延时z*l毫秒。3.3 源程

14、序代码与流程图见附录1程序框图:实用文案开始开中断扫描键盘计时程序运行时间储存程序时间査看程序Y计时程序流程图:文案时间存储程序、时间查看程序流程图略4实验仿真单片机学习中我们使用proteus做仿真,该软件的优点是可以搭建单 片机的常用仿真电路,并且可以利用丰富的外设器件,如数码管,LCD, 按键,传感器,A/D,D/A等,实现与实际系统板运行相接近的效果,即 可以完成系统级的调试。使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计 算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及 仿真软件的操作能力;在单片机课程设计中,我们使用Proteus开发环 境学习,在不

15、需要硬件投入的条件下,对单片机的学习比单纯学习书本 知识更容易接受,更容易提高。实践证明,在使用Proteus进行系统仿 真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。Proteus仿真软件可以看做是构建了一个特殊的单片机系统,只要将 所写程序的HEX文件导入该单片机系统,就可以让它一句句的执行所写 的指令,也可以让它与Keil实现联调,程序有问题可以随时改,帮助快速调 试程序。Proteus仿真软件的应用,使我们在没有硬件开销的情况下,更快更 好的接触到单片机的开发和应用,并且方便了程序的调试。5设计总结我认为单片机本来就是一门应用大于理论、实践大于书本的课程, 所以能够有这样

16、一次单片机的课程设计实在是太好了 !特别是让我们自 己动手制作成品电路,自己动脑编写程序,自己发现自己的不足,自己 改正错误。在本次课程设计中,我遇到了困难!编写程序,如何让用户知道你 这个东西是用来干嘛的?比如我设计的是一个秒表,在显示的问题上, 我一开始设计的是以秒的单位符号作为秒和毫秒的分界,但是经过老师 的指导发现并不是大多数人所能理解的,相当一部分人会认为这位的数 码管出现了乱码,老师指正后我改为以小数点做为分界,不但让用户更 清楚的辨认,而且还引入了分的计时,更加完善了秒表的功能。实际电 路,如何让实际电路更符合实际的使用需求?我一开始连的电路板,没 有加上S9012 PNP三极管

17、作为驱动电路,4位数码管显示的数字略显暗 淡,用户在白天下很难辨认清楚,于是在网上发现了用S9012 PNP三极 管做驱动的办法加以解决,加上了 S9012 PNP三极管后数码管显示问题 改善了,数字显示明亮了。S9012PNP三极管作为驱动在共阳极数码管上 有显著的作用,在共阴极数码管上的效果没有共阳极的好。通过这次课程设计让我对单片机的应用有了更深层次的了解,也加 深了对单片机的兴趣,我想在日后的学习生活工作中我也能基本的运用 单片机这一手段来做一些基本的电气电路设计了。参考文献:【1】益飞.单片机原理及应用技术:国防工业,2011.【2】康华光.电子技术基础(模拟部分)(第五版).:高等

18、教冇,2006.【3】伟.单片机C语言程序设计实训100例.:电子工业,2009.附录1 :源程序代码:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit buz=P3A0;sbit keyl=P3Al;sbit key2=P3A2;sbitkey3=P3A3;sbit key4=P3A4;uchar code table= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar bank303=0;uchar min,secjns

19、ec,aa,bbxc,dd,ee,ff;uchar tab=0,tabl=04 j;uint tab3;void display(uchar qianuchar bai,uchar shi,uchar ge);void display2(uchar qianjichar baijichar shi,uchar ge,uchar qq);void display3(uchar shi,uchar ge);void delay(uint);void scankey 1();void scankey3();void scankey4();void keeptime();void showtime()

20、;void init()初始化子程序for(i=0;i<30;i+)for(j=0;j<3;j+)bankij=O;P3=0xff;min=0;sec=0;msec=0;TMOD=0X01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;EX0=l;ITO=1;ET0=l;TR0=tabl;tab=O;tab3=l;i=0;void main() /主函数init();while(l)scankey 1();if(tabl=l)keeptime();elseshowtime();void display(uchar qianucha

21、r bai,uchar shiuchar ge)显示子程序 1,用于秒表走动时显示P2=Oxfe;PO=tab leqian;delay(l);P0=0;P2=Oxfd;if(tab<=50)PO=tablebai 10x80;else PO=tablebai;delay(l);P0=0;P2=0xfb;PO=tableshi;delay(l);P0=0;P2=0xf7;PO=tablege;delay(l);P0=0;void display2(uchar qianjichar bai,uchar shi,uchar geuchar qq)显示子程序 2,显示所存 时间P2=0xfe;

22、PO=tab leqian;delay(l);P0=0;P2=0xfd;if(qq=O)PO=tablebai 10x80;else P0=tablebai;delay(l);P0=0;P2=0xfb;P0=tableshi;delay(l);P0=0;P2=Oxf7;if(qq=l)P0=tablege 10x80;else P0=tablege;delay(l);P0=0;void display3(uchar shiuchar ge)显示子程序3,显示存储时间的序号P2=0xfb;PO=tableshi;delay(l);P0=0;P2=Oxf7;PO=tablege; delay(l)

23、;P0=0;void keeptime() /秒表记时函数msec=tab; aa 二 msec% 10; bb 二 msec/10; cc=sec%10; dd=sec/10; ee 二 min% 10; ff=niin/10; if(tab=100)tab=O:sec+:if(sec=60)sec=O;min+;if(min=59)tab 1=0:TR0=tabl;if(min=0)displayed,cc,bb,an);if(min!=0)display(ffgdd,cc);void showtime() 存储时间调出显示函数 uchai* pp;pp=(tab3-l)/2;scanke

24、y3();scankey4();aa=bankppO% 10;bb=bankpp 0/10;cc=bankpp l%10;dd=bankpp 1 /10;ee=bankpp2% 10;ff=bankpp2/10;if(bankOO=O)display(0Q0,0);elseif(tab3%2=l)display3(pp+l )/10,(pp+1)%10);if(tab3%2=0)if(bankpp2=0) display2(dd,cc,bb,aa,0);if(bankpp2!=0)displ ny2(ffgdd,cc, 1);1void scankey 1() 检测按键1是否被按下if(keyl=O)delay(8);if(keyl=O)if(tabl=l)tab 1=0;TR0=tabl;elseinit();buz=0;delay(lOO);buz=l;while(keyl !=1);delay(8);while(keyl !=1);)void scankey3() 检测按键3是否被按下if(key3=0)delay(8);if(key3=0)if(tab3<60)&&(tab 1 =0)tab3+;buz=0;delay(lOO);buz=

温馨提示

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

评论

0/150

提交评论