欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于单片机的抢答器设计报告(共24页).doc

    • 资源ID:14341229       资源大小:394KB        全文页数:24页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的抢答器设计报告(共24页).doc

    精选优质文档-倾情为你奉上 湖南商学院单片机应用系统课程设计(实习)报告题目 基于单片机的抢答器设计 姓 名:胡飘学 号:专 业:电子信息工程班 级:电信1004班指导教师:肖婧职 称:实验师计算机与信息工程学院2013年6月课程设计(实习)评审表姓 名胡飘学 院计信学院学 号专业班级电信1004班题 目基于单片机的抢答器设计评审意见评审成绩指导教师签名职称评审时间 年 月 日课程设计(实习)作品验收表题目基于单片机的抢答器设计参与人员姓 名胡飘班 级电信1004班学 号设计任务与要求: 具有3路抢答输入(由独立按键实现),时间分辨率小于100ms。显示抢答剩余时间,初始为10秒。抢答成功,蜂鸣器响,同时显示抢答成功的号码。作品完成情况: 上电显示10s,按开始键开始倒计时,若有按键显示时间和抢答者号码,同时蜂鸣器响,若倒计时为0,蜂鸣器响,按清除键则复位到10s。验收情况: 验收教师签名:_ 年 月 日注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。2. “验收情况”栏由验收小组按实际验收的情况如实填写。目 录1 设计任务与要求1 2 系统功能描述13 系统总体设计14 系统详细设计34.1 主要电路设计34.1.1 输入模块设计34.1.2 单片机模块44.1.3 显示模块44.1.4 声音模块54.2 软件设计64.2.1 主程序设计64.2.2 定时器设计75 系统实现与测试75.1 Proteus软件75.2 安装和调试过程85.2.1 软硬件调试85.2.2 硬件安装86 课程设计总结106.1 心得体会10 6.2. 实践总结10参考文献11附录11专心-专注-专业基于单片机的抢答器设计1 设计任务与要求具有3路抢答输入(由独立按键实现),时间分辨率小于100ms。显示抢答剩余时间,初始为10秒。抢答成功,蜂鸣器响,同时显示抢答成功的号码。2 系统功能描述(1)具有3路抢答输入(由独立按键实现),时间分辨率小于100ms。(2)主持人按“开始”键,显示抢答剩余时间,初始为10秒。(3)抢答成功,蜂鸣器响,同时显示抢答成功的号码。(4)主持人按“清除键”键,复位为初始10秒,进入准备状态。(5)若十秒倒计时时间到,则蜂鸣器响。3 系统总体设计抢答输入和控制输入共同控制单片机输出显示和蜂鸣器响,输出锁存控制输入的优先性。各模块如下:(1)输入模块:由独立按键实现抢答输入和“开始”“清除”控制输入。(2)单片机控制模块:采用AT89S51芯片控制输出。(3)输出锁存模块:采用74HC573芯片锁存数据。(4)显示输出模块:由四位共阳数码管输出显示倒计时和抢答者号码。(5)声音输出模块:由蜂鸣器的工作来控制声音。原理方框图如图1所示。显示输出声音输出输出锁存抢答输入模块控制输入模块单片机模块图1 原理方框图整体电路图如图2所示。图2 基于单片机的抢答器系统整体电路图4 系统详细设计4.1 主要电路设计4.1.1 输入模块设计(1)抢答键输入模块抢答键输入电路图如图3所示。图3 抢答键输入电路图由3个独立按键表示1号,2号,3号抢答者,一端接地一端分别接接单片机的P1.0,P1.1,P1.2,如果按下,则相应I/O口变为低电平,从而控制单片机P1口。(2)“开始”“清除”控制键输入模块 “开始”“清除”控制键输入电路图如图4所示图4 “开始”“清除”控制键输入电路图由2个独立按键控制“开始”和“清除”,一端接地一端分别接接单片机的P3.6,P3.7,如果按下,则相应I/O口变为低电平,从而控制单片机P1口。4.1.2 单片机模块单片机主要由程序设计和输入模块信号控制,用于对显示、声音等模块进行控制。单片机控制输出电路图如图5所示。接蜂鸣器接排阻和74HC753接数码管位选端图5 单片机控制输出电路图P0口连接有一个排阻,用作P0口的上拉电阻,保证P0口没有数据输出时候处于高电平状态。还接在74HC753芯片的D端,作为它的输入,锁存输出到数码管。P2口低四位接数码管未选端,P3.4接蜂鸣器。4.1.3 显示模块显示模块主要是显示抢答倒计时的时间,抢答者号码。数码管显示方法包括两种:一种是静态显示,一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是:显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中根据实际情况采用的是动态显示方法。4位七段数码管显示电路如图6所示。接74HC753即P0口接AT89S51的P2端口低四位图6 4位七段数码管显示电路图上图中数码管采用的是4位一体七段共阳数码管,其中AG段分别接到单片机的P0口,由单片机输出的P0口数据来决定段码值,位选码COM1, COM2,COM3,COM4分别接到单片机的P2.0,P2.1,P2.2 ,P2.3,由单片机来决定当前该显示的是哪一位。通过查表法,将其在数码管上显示出来,其中P0口为字型码输入端,P2口低4位为字选段输入段。在这里我们通过查表将字型码送给7段数码管显示的数字。4.1.4 声音模块声音模块主要是单片机控制蜂鸣器发声。选取压电式无源蜂鸣器,声音的频谱范围约在几十到几千赫兹,编写程序控制单片机P3.4口的“高”“低”电平转换频率,产生一定频率的巨型波,接上蜂鸣器就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使蜂鸣器发出不同的声音。单片机控制蜂鸣器电路图如图7所示。图7 单片机控制蜂鸣器电路图单片机通过内部定时器的操作实现交替变换的波形输出驱动扬声器发声。4.2 软件设计4.2.1 主程序设计一上电数码管显示100,表示初始时间为10s,0表示没有抢答,先扫描“开始”“清除”键,判断“开始”键是否按下,若按下,则开始倒计时,并扫描抢答键,若有抢答键按下,则显示抢答者号码和抢答的时间,判断倒计时是否为0,若是则蜂鸣器响。程序流程图如图8所示。开始扫描开始键和清除键蜂鸣器响,复位开始键按下?Y显示倒计时,扫描抢答键倒计时为0吗?YNN有抢答键按下吗Y显示抢答者号码,蜂鸣器响N清除键按下?Y复位结束图8 程序流程图4.2.2 定时器设计采用定时器/计数器T0的方式1定时,定时时间为50ms,对应的十进制数的初始值为15536,因使用的时钟为12MHz,所以定时的时间为1us*(65536-15536)=1us*50000=50ms。要想定时1s,需要20次中断,因此程序中定义了中断次数单元count,来对中断次数进行计数。要使最小分辨率为50ms,在定时器计时一次即50ms时,对键盘进行一次扫描实现。因为采用74HC753芯片,因此程序变得简单,只需将秒单元进行“second / 10”运算,即可得到秒的十位的BCD码,秒的个位BCD码只需取余数“second % 10”运算就可得到,并都送P0口经锁存器利用动态方式显示。5 系统实现与测试5.1 Proteus 软件Proteus软件是由英国Labcenter Electronics公司于1989年推出的EDA工具软件,Proteus软件不仅具有原理布图,PCB自动制版或人工布线及互动电路仿真的功能,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出, 还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器,逻辑分析仪等,为单片机系统的虚拟仿真提供了功能强大的软硬件调试手段。Proteus软件的特点:(1)除了既可以仿真模拟电路又可仿真数字电路以及数字、模拟混合电路外,其独特是能够仿真各种单片机及嵌入式处理器。(2)具有各种仿真仪器仪表工具,如示波器、逻辑分析仪、各种信号发生器、计数器、电压源、电压表、电流表、虚拟终端等,同一种仪器仪表可在同一电路中随意调动。(3)可以进行软、硬件结合的仿真系统,且仿真是交互的、可视化的。5.2 安装和调试过程5.2.1 软件调试利用Keil uVision4软件进行程序编写,编译,调试,生成.hex文件,利用Proteus进行电路原理图描绘,然后把.hex文件载入AT89S51芯片中,再仿真,通过功能对照,来检查修改程序,一步步使仿真与实现功能相近。一开始蜂鸣器怎么的都不响,通过查资料请教别人,最后发现是因为蜂鸣器的一次高低电平变换的程序没有循环,所以没有维持一定时间让它工作,通过在蜂鸣器的子程序中加入一个100次的循环,并是高低电平之间延时1ms发现蜂鸣器的工作是最合理的。后来又发现按下抢答键,倒计时不停止,经过很多次试验之后,发现是应该在判断抢答键是否按下的肯定条件下是定时器的使能标示位置0。当主持人按下开始键,2号抢答者按下抢答键时,Proteus仿真运行图如图所示图9 Proteus仿真运行图5.2.2 硬件安装由于经费的限制,元件数量也不是特别多,所以准备自己焊板子,晶振复位都准备自己焊。精心策划每个元件的安装位置,和可以节省的引线,我把每个元件多余的引脚部分当做线路来用,以使电路美观一点。完工之后运行不正常,分析可能是各个引脚和线路之间不稳定的原因,特别是所以电源和地都是通过引一根线出来接的电源孔悬在空中接的电源,觉得还是不可靠,于是最后还是决定用最小系统来作为硬件的核心,以避免不必要的影响。后来又最小系统,杜邦线和排针再一次焊好了电路,一上电显示-1,8,8,0,蜂鸣器响的时间和仿真图里蜂鸣器该响的时间一样长,“开始”“抢答”“清除”键都不作用。暂时连接数码管的各线我都用万用表测试过了,是连通的,我想可能会是以下的原因:(1)可能是排阻的问题,但是如果是的话,数码管应该不会亮。(2)可能是数码管的问题,但是也已经测试过,是正确的对应的各引脚,而且可以显示。(3)调用蜂鸣器响的程序放错位置了,但是检查了没错。经过仔细检查、测试、修改、调试之后,硬件电路图如图10所示。图10 硬件电路图6 课程设计总结6.1 心得体会此次课程设计,先从分析题目开始,从课本上找类似可能实现的功能块,明确整体思路,大概画出整体电路模块,由于第一次接触实际应用设计,思维比较混乱,很多功能觉得考虑的地方太多,很难。后来去图书馆查阅了两天资料,找到类似的应用系统,仔细研究了一番,多了个没接触过的芯片,通过几本书上的资料,拼凑修改之后还是仿真不了,也请教了一些老师,后来通过比较另外一种方案,觉得性价比和简便程度更高,所以放弃了原有的方案,重新开始设计。经过修改程序和仿真调试,显示的部分是差不多按我所想实现了,但蜂鸣器要么不响,要么能听到一丁点声响,参考了别的同学蜂鸣器响的程序,还有在网上找了很多关于蜂鸣器的资料,又请教老师问题,最终终于把蜂鸣器的问题解决了。仿真出来后,焊接电路,中途发现焊反了,怕影响电路拆了又重焊,还是显示不正常,一上电是一些不该有的数字,按开始键三个数码管都一起显示倒计时,蜂鸣器一直响,一动电路又断断续续,问过老师之后,决定还是用最小系统来作为硬件的核心,以避免不必要的影响。终于是又把电路板焊出来了,但是还是不如我所愿,显示还是不正常,一上电蜂鸣器响的时间和仿真蜂鸣器该响时的时间一样长,按开始键也没有反应。经过同学帮助,检验了数码管以及和单片机连接的地方,都没有问题,按理来说一上电应该和主程序一开始设定的功能一样,只能再重新测好每一个电路线和元件。经老师指导,应该在上电时,测每个脚应该有的电压,看元件输出功能是否正确,再逐步确定每一个芯片和电路的是否有问题,然后修改调试。我只能想到是,仿真和实际电路对于程序下载可能存在一些区别,特别是数码管的位选和显示段,还需不断学习,改进。6.2 实践总结经过这段时间天天起早贪黑的守着电脑旁调试,以及不断查阅资料和请教别人的过程中,发现自己是多么的不懂,时间是过得很充实,几乎忘了吃喝拉撒,每天做到凌晨一两点,身心疲惫,天天睡觉梦到先是程序该怎么改,后来又硬件该怎么测试,梦里想出来很多修改并最终成功的方法。总而言之,此次课程设计让我更加细心,认真地去做每一个部分,一步步的根据功能来测试电路,锁定要修改的地方,学到的不仅是单片机的知识,还有很多对于我们这个专业来说必备的一些技能。参考文献1.唐颖、程菊花等.单片机原理与应用及C51程序设计M.北京大学出版社,2008年2.张毅刚、杨志明等.基于Proteus的单片机课程的基础实验与课程设计M.人民邮电出版社,2012年3.宋戈、黄鹤松等.51单片机范例大全M.中国邮电出版社,2010年4.徐爱钧、彭秀华等.单片机高级语言编程与uVision2应用实践M.电子工业出版社,2008年附录源程序清单#include <reg52.h> #define uint unsigned int #define uchar unsigned char unsigned char code table=0x40,0x79,0x24,0x30,0x19, 0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e; /共阴极数码管编码表 0 - f显示sbit start= P36; / 变量定义sbit reset = P37; sbit key1 = P10; sbit key2 = P11; sbit key3 = P12;sbit buzzer = P34; bit start_flag = 0; bit key1_flag = 0; bit key2_flag = 0; bit key3_flag = 0;bit reset_flag = 0; bit action = 0; uchar second = 10; uchar count = 0; uchar number = 0; uchar number_display = 0;void delay(uint z) /延时函数 uint x,y; for(x=z;x>0;x-) for(y=100;y>0;y-);void display(uchar number,uchar second) /数码管显示驱动函数 uchar second_first,second_second; second_first = second / 10; second_second = second % 10; P2 = 0xfd; P0 = tablenumber; delay(2); P2 = 0xf7; P0 = 0x3f; delay(2); P2 = 0xfb; P0 = tablesecond_first; delay(2); P2 = 0xfe; P0 = tablesecond_second; delay(2);void start_keyscan() /开始键扫描函数 if(start = 0) delay(8); if(start = 0)&&(!start_flag) start_flag = 1; action = 1; TR0 = 1; else start_flag = 0;uchar key_scan3() /3位抢答键扫描函数 if(key1 = 0) delay(8); if(key1 = 0)&&(!key1_flag) key1_flag = 1; number = 1; number_display = number; else key1_flag = 0; number = 0; if(key2 = 0) delay(8); if(key2 = 0)&&(!key2_flag) key2_flag = 1; number = 2; number_display = number; else key2_flag = 0; number = 0; if(key3 = 0) delay(8); if(key3 = 0)&&(!key3_flag) key3_flag = 1; number = 3; number_display = number;elsekey3_flag = 0;number = 0; if(number_display != 0)return 1;elsereturn 0;void reset_keyscan() / 复位键扫描函数if(reset = 0)delay(8);if(reset = 0)&&(!reset_flag)reset_flag = 1;number_display = 0; second=10;elsereset_flag = 0;void beep() /蜂鸣函数,延时1ms,脉宽t = 1ms 周期T = 2ms 频率f = 0.5khz uint i; for(i=0;i<100;i+) delay(10); /延时1ms buzzer = buzzer; buzzer = 1; /给P3.7口送高电平 void init_T0() /定时器T0初始化 TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;void main() / init_T0();/定时器T0初始化 while(1) start_keyscan(); /开始键扫描 reset_keyscan(); /复位键扫描while(action=1) /若按下开始键 key_scan3(); /扫描抢答键 if(!key_scan3() /若没有抢答键按下 display(number_display,second);/显示倒计时 else TR0 = 0; /停止计时display(number_display,second); /显示抢答者号码beep(); /蜂鸣器响 action = 0; break; display(number_display,second); /显示时间 void timer0() interrupt 1/中断服务函数TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count%2=0) key_scan3(); /扫描抢答键 if(count=20) count=0; second-; if(second=0) TR0 = 0; number_display = 0;beep(); action = 0;

    注意事项

    本文(基于单片机的抢答器设计报告(共24页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开