版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于AT89C52的电子秒表设计报告 所 在 学 院 :微电子与固体电子学院 所 在 专 业:固体电子工程 小 组 成 员:余希猛衡相文何彬德完 成 日 期:2013年4月20日摘要随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测技术不断更新。单片机是指集成在一个芯片上的微型计算机,主要包括CPU、随机存储器、只读存储器、基本输入/输出接口电路、定时器/计数器等部件。本文设计的主要思路是采用ATMEL公司的AT89C52单片机作为中央处理器,LED数码显示器,ISD1420语音芯片,设计具有计时和闹铃以及语音播报功能的电子秒表。正文中首先介绍了系统硬件的设计思路
2、以及工作原理,电子秒表按键功能,其次简单阐述了程序的流程、程序各功能模块的分析和实现过程,最后简单总结了本次设计的难点、关键点以及收获的经验。关键词:单片机,LED数码管显示器 ,AT89C52目 录1 绪论41.1 引言41.2 器件选择41.3 设计方案41.4 方案论证52 功能概述63 硬件设计83.1处理器设计83.2 电路设计94 软件设计105 测试数据与理论分析-156 总结161绪论1.1 引言单片机自问世以来,以其良好性能,价格低廉等特点。越来越被人们重视。此次的电子秒表设计,我们决定采用STC系类的52单片机,作为电路的中央处理芯片。1.2 器件选择中央处理芯片:STC8
3、9C52RC。显示器:8段数码管。语音芯片:ISD1420。以及各种电阻,电容,74系列芯片。1.3 设计方案方案一:采用PIC单片机控制数码管。Microchip公司PIC系列单片机是近年来重点发展的单片机系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,带A/D,内部E2PROM数据存储器,双时钟工作,比较输出,捕捉输入,PWM输出, LCD驱动等等,其封装从8脚到68脚,可用于高、中、低档的电子产品设计中,价格适中,广泛应用在各类电子产品中。方案二:采用C52单片机控制数码管。为了使电子秒表功能更好。我们决定采用8个8段数码管,这样做使得电子秒表更加美观,对时间的读取更加
4、方便明了。同时对时间精确更提高一步,精确到1毫秒。电路外设置8个按键,起到控制电子秒表实现不同功能。另外添加了几个LED二极管,用来提示使用者当前电子秒表处于什么状态。闹铃方面,除了使用者自己定下的时间外,电路本身会在整时自动报时,例如,当电子秒表计时到10-00-00,即10分钟时。闹铃响起,LED灯点亮。方案三:采用555定时器控制数码管。由555定时器构成的多谐振荡器,是一种信号比较好的时钟发生器。主要由555定时器,电容,电阻构成。调节电位器,就可以获得一定频率的波信号。然后输入计数器,使计数器开始计数。1.4 方案论证方案一:使用PIC单片机控制数码管。PIC系列单片机的性能虽然比其
5、他的系列单片机更好,但是由于我们小组本来一直在使用C51的开发板,而没有PIC的开发板。并且再次学习PIC的开发板,时间上也有些紧急。所以我们最终就决定还是使用C51单片机来完成本次的设计。方案二:使用C52单片机控制数码管。使用C52单片机需要用C语言编程序,考虑到我们上学期对C语言有了初步的学习,有一定的基础。所以这个方案一开始就吸引了我们。然后我们正好也有C51单片机的开发板,这让我们再一次中意这个方案。排除这些因素,C51单片机本身的一些优势也是不错的。通过外接两个74HC573芯片,可以很好的方便控制8个数码管。而且在硬件电路的焊接方面也是很方便的。所以我们通过比较论证,最终还是决定
6、采用方案二。方案三:使用555定时器控制数码管。555定时器通过外部电容与电阻的搭配产生固定的频率,来控制计数器实现电子秒表功能。使用此方案能够获得较精确的计数时间,使得电子秒表的精确度能更好。但是经过我们小组的商议,一致认为该方案的硬件方面有较大的难度。每个数码管都需要一个555定时电路。在焊电路时容易发生一些意想不到的问题。所以我们决定不采用此方案。2功能概述此次设计的功能实现主要依靠电路外围的8个输入按键。现在主要对这8个按键的各自功能,以及先后按下的不同现象进行叙述。(1)当电路接通电源后,将有一段音乐:世上只有妈妈好。大概10秒钟会结束音乐播放,音乐结束后,8段数码管将显示 “HEL
7、LO”字符。提醒使用人员进入操作任务。此时可有两种选择:a按下K2键,或者b按下K1键。其中K1是进入计时状态,K2是进入调用数据状态。(注:若想要调用数据,需要在计时前执行。)a 当使用人员按下k2键时:数码管进入调用数据状态。由于在单片机程序中,秒表存储了5组数据,分别为10-10-00 , 20-20-00 ,30-30-00 ,40-40-00 ,50-50-00.所以当按下k2键一次时,调用出 10-10-00,当按下两次时,调用出 20-20-00,以此类推。当调出50-50-00后,再按两次,调用数据重新回到10-10-00,依次循环。调用完成后。按下k1键确认。此时可以再用K5
8、,K6,K7,K8来调节时间。然后再按下k3键,计时开始。b 当使用人员不想调用数据时,可以按下K1键:数码管显示 00-00-00,此时使用人员可根据自己意愿,选择定下闹铃时间,或者进入计时开始。若想要定下闹铃时间,就可以按下k2键。红灯提示进入设置闹铃状态。然后通过k5,k6,k7,k8四个键调节闹铃时间。其中k5键是使秒钟数递减,即每按一下k5,就使秒钟数减1;k6键是使秒钟数递增;k7键是使分钟数递减;k8键是使分钟数递增。当使用者确定好闹铃时间后,再按下k1键,数码管清零。此时闹铃时间就设置好了。然后按下k3键。计时开始。计时到达闹铃时间时,蜂鸣器鸣叫0.5秒,同时黄灯亮起。语音播报
9、闹铃时间。(2) 当数码管处于计时状态时。按下k4键时,计时停止,并保留当前的时间。再按下k3键时,计时重新从保留的时间处开始。可反复操作。无论数码管是处于计时状态,还是暂停状态,只要按下k1键,数码管就会全部清零。下面再对八个按键进行归纳说明一下:K1键:主要起到清零的作用,当调用数据完毕,定时完毕后,也需要按下K1键,然后再执行计时或设置计时起点的功能。K2键:主要起到调用数据与定闹铃的作用。在数码管显示“HELLO“字样时按K2键进入调用数据状态,在数码管显示”00-00-00“字样时按K2键进入定闹铃状态。K3键:起到开始计时的作用。即在一定情况下,按下K3键就可以进入计时状态。K4键
10、:起到暂停计时的作用。即当电子秒表正在计时时,按下K4键就可以使计数暂停。K5键:设置时间,使秒钟数递减。K6键:设置时间,使秒钟数递增。K7键:设置时间,使分钟数递减。K8键:设置时间,使分钟数递增。硬件按键的连接及布局:K7 K5 K3 K1K8 K6 K4 K23硬件设计3.1 处理器设计(a)AT89SC52的最基本电路图。(b)AT89SC52的其他引脚连接。 P0口:连接到两个74HC573上,起到控制数码管的段选和位选的作用。 P1口:连接到两个74HC377上,起到控制录放音芯片的作用。 P3口:连接到8个按键。用来控制秒表的工作。(c)注意问题。 上拉电阻的连接。STC系列芯
11、片中,有的IO口需要接上拉电阻,而有的IO口就不需要。比如P1口作为输出端口时必须接上拉电阻。这种小问题是必须要注意的。不然会很难检测出问题的。(a)放音电路图(b)数码管电路图4 软件设计调用数据程序 if(key1=0) DelayMs(20); while(p) if(key0=0) a=0;n=1;m=0;p=0;d=1; diaoyong(); switch(e) case 2: hour=10;minute=10;second=0;break; case 3: hour=20;minute=20;second=0;break; case 4: hour=30;minute=30;s
12、econd=0;break; case 5: hour=40;minute=40;second=0;break; case 6: hour=50;minute=50;second=0;break; default:break; TempData0=dofly_DuanMahour/10; TempData1=dofly_DuanMahour%10; TempData2=0x40; TempData3=dofly_DuanMaminute/10; TempData4=dofly_DuanMaminute%10; TempData5=0x40; TempData6=dofly_DuanMaseco
13、nd/10; TempData7=dofly_DuanMasecond%10; 闹钟程序while(n) if(key1=0) ding2=0; while(d) H=hour;M=minute; TempData0=dofly_DuanMahour/10; TempData1=dofly_DuanMahour%10; TempData2=0x40; TempData3=dofly_DuanMaminute/10; TempData4=dofly_DuanMaminute%10; TempData5=0x40; TempData6=dofly_DuanMasecond/10; TempData
14、7=dofly_DuanMasecond%10; Display(0,8);if(key0=0)d=0;hour=0;minute=0;second=0;ding2=1;num=KeyScan(); switch(num) case 1:hour+;if(hour=60)hour=0; break; case 2:hour-;if(hour=255)hour=59; break; case 3:minute+; if(minute=60)minute=0; break; case 4:minute-; if(minute=255)minute=59; break; default:break;
15、 计数程序while (m) unsigned int i; extern unsigned char hour,minute,second;i+; if(i=5) i=0;UpdateTimeFlag=1; num+; if(num=77) num=0;second+;if(second=100) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=60) hour=0;其他子程序void Display(unsigned char FirstBit,unsigned char Num) static unsigned char
16、 i=0; DataPort=0; LATCH1=1; LATCH1=0; DataPort=dofly_WeiMai+FirstBit; LATCH2=1; LATCH2=0; DataPort=TempDatai; LATCH1=1; LATCH1=0; i+; if(i=8)i=0;unsigned char KeyScan(void)unsigned char keyvalue; if(KeyPort!=0xff) DelayMs(10); if(KeyPort!=0xff) keyvalue=KeyPort; while(KeyPort!=0xff)Display(0,8); ;sw
17、itch(keyvalue) case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; case 0xef:return 5;break; case 0xdf:return 6;break; case 0xbf:return 7;break; case 0x7f:return 8;break; default:return 0;break; return 0;5 测试数据与理论分析1.1 问题:当数码管显示数字时,其中的3,5,9最下面的一横不亮
18、,但 是2,6,8的时候它又亮了。分析:一开始,我们都很纠结,百思不得其解。但是后来,我们认为,像这种情况,一定不会是电路原理,或者是LED灯的问题。因为如果是这些类似问题,当显示2,6,8时它也应该不亮。后来,我们把这些数对应的P0口输出数据列出,对比它们的不同。如下, :0101 1011 3 : 0100 1111 5 : 0110 11016 : 0111 1101 8 : 0111 1111 9 : 0110 1111 经过对比可以发现,凡是不亮的数值,第五位前的第四位都是0;凡是亮的数值,第五位前的第四位都是1。既是第五位受到了第四位的影响,应该是两条线相连了。于是我们用万用表测试发现,果真如此。重新焊接后,再测试发现它就好了。1.2 问题:当蜂鸣器在时间达到设置的闹铃时间时,响了0.5秒之后.不会停止,而是继续鸣响。 分析:在开发板上测试程序时,蜂鸣器是按照要求鸣声的。所以我们在一开始就认为是在焊电路时出现了虚焊。于是我们用万用表进行了检测.但是发现实际电路并没出错。排出了这种可能。我们认为可能是电路原理或是元件选择出了错。比如分压电阻阻值太小或则太大,使三极管不能达到响应值。为此我们重新测量数据.确实是电阻的选择出了错
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论