湖南商学院《单片机应用系统》课程设计(实习)报告题目基于单片机的抢答器设计姓胡飘名:学100910122号:专电子信息工程业:班电信1004班级:指导教肖婧师:职实验师称:计算机与信息工程学院2013年6月课程设计(实习)评审表课程设计(实习)作品验收表注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。
2. “验收情况”栏由验收小组按实际验收的情况如实填写。
目录1 设计任务与要求 (1)2 系统功能描述 (1)3 系统总体设计 (1)4 系统详细设计 (3)4.1 主要电路设计 (3)4.1.1 输入模块设计 (3)4.1.2 单片机模块 (4)4.1.3 显示模块 (4)4.1.4 声音模块 (5)4.2 软件设计 (6)4.2.1 主程序设计 (6)4.2.2 定时器设计 (7)5 系统实现与测试 (7)5.1 Proteus软件 (7)5.2 安装和调试过程 (8)5.2.1 软硬件调试 (8)5.2.2 硬件安装 (8)6 课程设计总结 (10)6.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位一体七段共阳数码管,其中A~G段分别接到单片机的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 主程序设计一上电数码管显示10—0,表示初始时间为10s,0表示没有抢答,先扫描“开始”“清除”键,判断“开始”键是否按下,若按下,则开始倒计时,并扫描抢答键,若有抢答键按下,则显示抢答者号码和抢答的时间,判断倒计时是否为0,若是则蜂鸣器响。
程序流程图如图8所示。
图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 心得体会此次课程设计,先从分析题目开始,从课本上找类似可能实现的功能块,明确整体思路,大概画出整体电路模块,由于第一次接触实际应用设计,思维比较混乱,很多功能觉得考虑的地方太多,很难。
后来去图书馆查阅了两天资料,找到类似的应用系统,仔细研究了一番,多了个没接触过的芯片,通过几本书上的资料,拼凑修改之后还是仿真不了,也请教了一些老师,后来通过比较另外一种方案,觉得性价比和简便程度更高,所以放弃了原有的方案,重新开始设计。
经过修改程序和仿真调试,显示的部分是差不多按我所想实现了,但蜂鸣器要么不响,要么能听到一丁点声响,参考了别的同学蜂鸣器响的程序,还有在网上找了很多关于蜂鸣器的资料,又请教老师问题,最终终于把蜂鸣器的问题解决了。
仿真出来后,焊接电路,中途发现焊反了,怕影响电路拆了又重焊,还是显示不正常,一上电是一些不该有的数字,按开始键三个数码管都一起显示倒计时,蜂鸣器一直响,一动电路又断断续续,问过老师之后,决定还是用最小系统来作为硬件的核心,以避免不必要的影响。
终于是又把电路板焊出来了,但是还是不如我所愿,显示还是不正常,一上电蜂鸣器响的时间和仿真蜂鸣器该响时的时间一样长,按开始键也没有反应。
经过同学帮助,检验了数码管以及和单片机连接的地方,都没有问题,按理来说一上电应该和主程序一开始设定的功能一样,只能再重新测好每一个电路线和元件。
经老师指导,应该在上电时,测每个脚应该有的电压,看元件输出功能是否正确,再逐步确定每一个芯片和电路的是否有问题,然后修改调试。