八路抢答器设计.docx
课程设计说明书课程设计名称:单片机课程设计课程设计题目:基于单片机八路抢答器设计 学 院 名 称:电气信息学院 专 业 班 级: 测控2班 学 生 学 号:1404200108 学 生 姓 名: 付乐天 学 生 成 绩: 指 导 教 师: 郝毫毫 课程设计时间: 2016-12-20 至 2017-1-4 格式说明(打印版格式,手写版不做要求)(1)任务书三项的内容用小四号宋体,1.5倍行距。(2)目录(黑体,四号,居中,中间空四格),内容自动生成,宋体小四号。(3)章的标题用四号黑体加粗(居中排)。(4)章以下的标题用小四号宋体加粗(顶格排)。(5)正文用小四号宋体,1.5倍行距;段落两端对齐,每个段落首行缩进两个字。(6)图和表中文字用五号宋体,图名和表名分别置于图的下方和表的上方,用五号宋体(居中排)。(7)页眉中的文字采用五号宋体,居中排。页眉统一为:武汉工程大学本科课程设计。(8)页码:封面、扉页不占页码;目录采用希腊字母、排列,正文采用阿拉伯数字1、2、3排列;页码位于页脚,居中位置。(9)标题编号应统一,如:第一章,1,1.1,;论文中的表、图和公式按章编号,如:表1.1、表1.2;图1.2、图1.2;公式(1.1)、公式(1.2)。课程设计任务书一、课程设计的任务和基本要求 1.抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 S5表示。 2.设置一个系统清除和抢答控制开关S,该开关由主持人控制。 3.抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 4.抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如20秒)。当主持人启动"开始"键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。 5.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 6.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00 。二、进度安排 2016-12-20至2016-12-23:老师组织学生讨论单片机课程设计的内容。教学proteus软件和keil软件的相关用法,并同时制定相关的规范操作和相应的课程设计要求。 2016-12-24至2016-12-27:学生以小组为单位,选择相应的课程设计题目进行相互间的讨论,并对题目提出观点和看法。然后在网上查找相应的资料,以课程设计题目为中心,筛选相应资料,并确定最终的方案。 2016-12-28至2017-1-3:以小组为单位,对方案进行筛选。确定方案后,小组讨论方案制作的步骤和过程。先确定方案电路的原理图器件,做出符合方案的原理图。然后将原理图在proteus中画出来。最后,撰写相应的C语言源程序。完成后,将方案进行整理,制定成报告,并装袋。 2017-1-3至2017-1-4:找老师进行答辩,并修改报告中的错误。三、参考资料或参考文献151单片机C语言教程入门、提高、开发、拓展全攻略 郭天祥251单片机原理与其应用 秦实宏 徐春辉本科生课程设计成绩评定表姓名付乐天专业班级测控2班学号1404200108课程设计题目:基于单片机的八路抢答器课程设计答辩记录:(手写)成绩评定依据:项目得分比例考勤记录设计结果报告撰写答辩成绩备注:成绩评定依据的项目内容和项目分值比例可以由老师按指导的专业进行调整,但成绩评定依据的项目数不得少于3项。最终评定成绩: 指导教师签名: 年 月 日目 录一 摘 要1二、方案设计与论证1三、硬件电路设计23.1 抢答器的电路框图 23.2 单元电路设计33.3 外部震荡电路43.4报警电路设计4四、软件设计54.1系统主程序设计54.2主程序清单64.2.1 宏定义64.2.2 延时函数84.2.3 数码管显示驱动函数84.2.4 开始键扫描函数94.2.5 八位抢答键扫描函数104.2.6 复位键扫描函数144.2.7 开机函数*/154.2.8 主函数164.2.9 中断服务函数17五 系统的仿真185.1 proteus软件的介绍与使用 185.1.1 什么是Proteus软件 185.1.2 怎样操作Proteus仿真软件 185.2 抢答器protenus软件的仿真23六 调试功能说明246.1 系统的调试246.2 软件调试问题与解决256.3调试:26七、结论与心得27一 摘 要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和与时性就会影响活动的开展,因此设计了本抢答器。本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用AT89C51单片机与外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位与主控强制复位;按键锁定,在有效状态下,按键无效非法。二、方案设计与论证方案一:系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。 方案二:该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以与显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。MCS-51单片机特点如下: <1>可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。<2>单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入与输出引脚,可扩充为各种规模的微电脑系统。 <3> 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。方案比较与其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上与其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。另外80C51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时与不必要的误差。依此依据选择方案二比较适合。其原理框图如下:抢答按扭优先编码电路锁存器译码电路译码显示主持人控制开关控制电路报警电路秒脉冲产生电路定时电路译码电路显示电路三、硬件电路设计3.1 抢答器的电路框图 如图11、1所示为电路框图。其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作"开始、停止"状态开图1 抢答器电路的接口电路原理图如图1所示为电路图。其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作“开始、停止”状态开关。3.2 单元电路设计(1)抢答器电路 参考电路如图11.2所示。该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。 如有再次抢答需由主持人将S开关重新置,“清除”然后再进行下一次抢答。(2)时序控制电路设计时序控制电路是抢答器设计的关键,它要完成以下功能:a.主持人将控制开关拨到"开始"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。 b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。(3)复位电路的设计外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以与存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。复位电路如下图示:图2 复位电路3.3 外部震荡电路外部震荡电路单片机必须在AT89C51的驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元,外部震荡电路如下图。图3 外部震荡电路3.4报警电路设计 报警电路用于报警,当遇到报警信号时,发出警报。一般喇叭是一种电感性图11.4报警电路图。8951驱动喇叭的信号为各种频率的脉冲。因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。不过,如果要由P0输出到此电路,还需要连接一个10K的上拉电阻。 选手在设定的时间内抢答时,实现:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次*作"清除"和"开始"状态开关。图面是数字抢答器的报警电路图。 其中555构成多谐振荡器,振荡频率fo143(RI2R2)C,其输出信号经三极管推动扬声器。PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。图4 报警电路四、软件设计4.1系统主程序设计 为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。(1)主程序流程图主程序设置抢答时间和回答问题时间定时器及并行口初始化将时间计数器及启动标志值1开中断采并行口数据为0吗?启动标志=1吗?判断抢答组号将抢答组发光二极管点亮判断哪一组为抢答组将抢答组号送显示抢答时间到了吗?输出响铃信号提示超时继续抢答比赛吗?系统返回NYYYNYN4.2主程序清单#include <reg52.h>4.2.1 宏定义#define uint unsigned int#define uchar unsigned char共阴极数码管编码表 0 - f显示unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;变量定义sbit start_stop = P36;sbit reset = P37;sbit key1 = P10;sbit key2 = P11;sbit key3 = P12;sbit key4 = P13;sbit key5 = P14;sbit key6 = P15;sbit key7 = P16;sbit key8 = P17;sbit state = P34;sbit kaishi=P31;bit start_stop_flag = 0;bit key1_flag = 0;bit key2_flag = 0;bit key3_flag = 0;bit key4_flag = 0;bit key5_flag = 0;bit key6_flag = 0;bit key7_flag = 0;bit key8_flag = 0;bit reset_flag = 0;bit action = 0;bit kaishi_flag=0;uchar second = 20;uchar timer0_count = 0;uchar number = 0;uchar number_display = 0;4.2.2 延时函数void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);4.2.3 数码管显示驱动函数void display(uchar number,uchar second)uchar second_first,second_second;second_first = second / 10;second_second = second % 10;P2 = 0xfe;P0 = tablenumber;delay(2);P2 = 0xfd;P0 = 0x40;delay(2);P2 = 0xfb;P0 = tablesecond_first;delay(2);P2 = 0xf7;P0 = tablesecond_second;delay(2);4.2.4 开始键扫描函数void start_stop_keyscan()if(start_stop = 0)delay(8);if(start_stop = 0)&&(!start_stop_flag)start_stop_flag = 1;action = 1;TR0 = 1;state = 0;elsestart_stop_flag = 0;4.2.5 八位抢答键扫描函数uchar key_scan8()if(key1 = 0)delay(8);if(key1 = 0)&&(!key1_flag)key1_flag = 1;number = 1;number_display = number;elsekey1_flag = 0;number = 0;if(key2 = 0)delay(8);if(key2 = 0)&&(!key2_flag)key2_flag = 1;number = 2;number_display = number;elsekey2_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(key4 = 0)delay(8);if(key4 = 0)&&(!key4_flag)key4_flag = 1;number = 4;number_display = number;elsekey4_flag = 0;number = 0;if(key5 = 0)delay(8);if(key5 = 0)&&(!key5_flag)key5_flag = 1;number = 5;number_display = number;elsekey5_flag = 0;number = 0;if(key6 = 0)delay(8);if(key6 = 0)&&(!key6_flag)key6_flag = 1;number = 6;number_display = number;elsekey6_flag = 0;number = 0;if(key7 = 0)delay(8);if(key7 = 0)&&(!key7_flag)key7_flag = 1;number = 7;number_display = number;elsekey7_flag = 0;number = 0;if(key8 = 0)delay(8);if(key8 = 0)&&(!key8_flag)key8_flag = 1;number = 8;number_display = number;elsekey8_flag = 0;number = 0;if(number_display != 0)return 1;elsereturn 0;4.2.6 复位键扫描函数void reset_keyscan()if(reset = 0)delay(8);if(reset = 0)&&(!reset_flag)second=20;reset_flag = 1;number_display = 0;state = 1;elsereset_flag = 0;4.2.7 开机函数*/ void kaishi_keyscan()if(kaishi = 0)delay(8);if(kaishi = 0)&&(!kaishi_flag)kaishi_flag = 1;number_display = 0;state = 1;elsekaishi_flag = 0;4.2.8 主函数void main()TMOD=0x01; TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=0;while(1)while(kaishi = 0)&&(!kaishi_flag)start_stop_keyscan();reset_keyscan();while(action)while(!key_scan8()display(number_display,second);if(second = 0)second = 20;break;TR0 = 0;second = 0;display(number_display,second);action = 0;break;display(number_display,second);4.2.9 中断服务函数void timer0() interrupt 1TH0=0x3c;TL0=0xb0;timer0_count +;if(timer0_count = 20)timer0_count = 0;second -;if(second = 0)TR0 = 0;number_display = 0;state = 1;action = 0;五 系统的仿真5.1 proteus软件的介绍与使用 5.1.1 什么是Proteus软件 Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以与单片机外围电路,比如按键、LED、数码管等等。通过Proteus我们能够轻易得到一个功能齐全的单片机实验室。5.1.2 怎样操作Proteus仿真软件 在进行下面的操作前,我先说明一点:我的Proteus版本是7.1,如果你使用的是6.9以前的版本,可能你发现在鼠标操作上会略有不同。这主要表现在6.9以前的版本鼠标左右键的作用与一般软件刚好相反,而7.0后已经完全改过。首先我们把压缩文件解压到D盘,然后找到ISIS Manage找到Find key 然后再安装即可使用,双击打开桌面是上的那个软件即可使用。 下面我们首先来熟悉一下Proteus的界面。Proteus是一个标准的Windows窗口程序,和大多数程序一样,没有太大区别,其启动界面如下图所示:图5 proteus启动界面 如图中所示,区域为菜单与工具栏,区域为预览区,区域为元器件浏览区,区域为编辑窗口,区域为对象拾取区,区域为元器件调整工具栏,区域为运行工具条。 下面我们就以建立一个和我们在Keil简介中所讲的工程项目相配套的Proteus工程为例来详细讲述Proteus的操作方法以与注意事项。 首先点击启动界面区域中的“P”按钮(Pick Devices,拾取元器件)来打开“Pick Devices”(拾取元器件)对话框从元件库中拾取所需的元器件。对话框如下图所示:图6 proteus查找元器件 在对话框中的“Keywords”里面输入我们要检索的元器件的关键词,比如我们要选择项目中使用的AT89C51,就可以直接输入。输入以后我们能够在中间的“Results”结果栏里面看到我们搜索的元器件的结果。在对话框的右侧,我们还能够看到我们选择的元器件的仿真模型、引脚以与PCB参数。 搜索到所需的元器件以后,我们可以双击元器件名来将相应的元器件加入到我们的文档中,那么接着我们还可以用相同的方法来搜索并加入其他的元器件。当我们已经将所需的元器件全部加入到文档中时,我们可以点击“OK”按钮来完成元器件的添加。 添加好元器件以后,下面我们所需要做的就是将元器件按照我们的需要连接成电路。首先在元器件浏览区中点击我们需要添加到文档中的元器件,这时我们就可以在浏览区看到我们所选择的元器件的形状与方向,如果其方向不符合你的要求,你可以通过点击元器件调整工具栏中的工具来任意进行调整,调整完成之后在文档中单击并选定好需要放臵的位臵即可。接着按相同的操作即可完成所有元器件的布臵,接下来是连线。事实上Proteus的自动布线功能是如此的完美以至于我们在做布线时从来都不会觉得这是一项任务,而通常像是在享受布线的乐趣。布线时我们只需要单击选择起点,然后在需要转弯的地方单击一下,按照你所需走线的方向移动鼠标到线的终点单击即可。本例我们布线的结果如下图所示(仿真我们在上面的Keil操作介绍中的简单例子)图7 发光二极管发光原理图 因为该工程十分简单,我们没有必要加上复位电路,所以这点在图中予以忽略,请大家注意。除此以外,还会发现,单片机系统没有晶振,这一点你需注意。事实上在Proteus中单片机的晶振可以省略,系统默认为12MHz,而且很多时候,当然也为了方便,我们只需要取默认值就可以了。 Proteus中单片机芯片默认已经添加电源与地,所以我们可以省略。然后在添加电源与地以前,我们先来看一下上面第一个图中区域的对象拾取区,在这里只说明本文中可能会用得到的以与比较重要的工具。 (Selection Mode)。选择模式,通常情况下我们都需要选中它,比如布局时和布线时。 (Component Mode)。组件模式,点击该按钮,能够显示出区域中的元器件,以便我们选择。 线路标签模式,选中它并单击文档区电路连线能够为连线添加标签。经常与总线配合使用。 文本模式,选中它能够为文档添加文本。 总线模式,选中它能够在电路中画总线。关于总线画法的详细步骤与注意事项我们在下面会进行专门讲解。 l :终端模式,选中它能够为电路添加各种终端,比如输入、输出、电源、地等等。 l :虚拟仪器模式,选中它我们能够在区域中看到很多虚拟仪器,比如示波器、电压表、电流表等等。关于它们的用法我们会在后面的相应章节中详细讲述。 添加电源:首先点击,选择终端模式,然后在元器件浏览区中点击POWER(电源)来选中电源,通过区域中的元器件调整工具进行适当的调整,然后就可以在文档区中单击放臵电源了。 连接好电路图以后我们还需要做一些修改,由上5-1-3图我们可以看出,图中的R1电阻值为10k,这个电阻作为限流电阻显然太大,将使发光二极管D1亮度很低或者根本就不亮,影响我们的仿真结果。故要进行修改,修改方法:首先我们双击电阻图标,这时软件将弹出“Edit Component”对话框(见下图所示的对话框),对话框中的“Component Referer”是组件标签之意,可以随便填写,也可以取默认,但要注意在同一文档中不能有两个组件标签相同;“Resistance”就是电阻值了,我们可以在其后的框中根据需要填入相应的电阻值。填写时需注意其格式,如果直接填写数字,则单位默认为;如果在数字后面加上K或者k,则表示k之意。这里我们填入220,表示220。 修改好各组件属性以后就要将程序(HEX文件)载入单片机了。首先双击单片机图标,系统同样会弹出“Edit Component”对话框,如下图。在这个对话框中我们点击“Program files”框右侧的,来打开选择程序代码窗口,选中相应的HEX文件后返回,这时,按钮左侧的框中就填入了相应的HEX文件,我们点击对话框的“OK”按钮,回到文档,程序文件就添加完毕了。图8 装载程序 装载好程序,我们就可以进行仿真了。首先来熟悉一下上面第一个图中区域的运行工具条。因为比较简单,我们只作一下介绍。 工具条从左到右依次是“Play”、“Step”、“Pause”、“Stop”按钮,即运行、步进、暂停、停止。下面我们点击“Play”按钮来仿真运行,效果如下图所示,可以看到系统按照我们的程序在运行着,而且我们还能看到其高低电平的实时变化。如果我们已经观察到了结果就可以点击“Stop”来停止运行。5.2 抢答器protenus软件的仿真绘制抢答器的软件仿真图步骤分一下四步: (1)查找所需要的元器件; (2)根据电路图进行连线; (3)是用来写线所对应的坐标,即下图所示的P1.1等坐标; (4)下载所写完的C程序即可以仿真。 通过以上步骤,来实现抢答器设计的仿真实现,仿真如下图所示:图9 抢答器仿真原理图六 调试功能说明6.1 系统的调试 系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以与是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。 硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。这种调试可单独模拟进行,也可通过开发装臵由软件配合进行,硬件联机调试则必须在系统软件的配合下进行。 软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装臵上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装臵上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设臵断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应与时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。6.2 软件调试问题与解决首先对所用软件与使用方法介绍如下: 1、Keil是德国开发的一个51单片机开发软件平台,最开始只是一个支持C语言和汇编语言的编译器软件。后来随着开发人员的不断努力以与版本的不断升级,使它已经成为了一个重要的单片机开发平台,不过KEIL的界面并不是非常复杂,操作也不是非常困难,很多工程师的开发的优秀程序都是在KEIL的平台上编写出来的。可以说它是一个比较重要的软件,熟悉他的人很多很多,用户群极为庞大,要远远超过伟福等厂家软件用户群,操作有不懂的地方只要找相关的书看看,到相关的单片机技术论坛问问,很快就可以掌握它的基本使用了。 2、 总调,即应用软件的链接调试,程序固化,软、硬件结合的应用系统 软硬件联合仿真系统由一个硬件执行环境和一个软件执行环境组成,通常软件环境和硬件环境都有自己的除错和控制界面,Keil与Proteus的整合调试可以实现系统的总调,在该系统中,Keil作为软件调试界面,Proteus作为硬件仿真和调试界面,下面说一下如何在keil中调用proteus进行MCU外围器件的仿真。 (1)安装keil 与 proteus。 (2)把安装proteus MODELS目录下 VDM51.dll文件复制到Keil安装目录的 C51BIN目录中。 (3)修改keil安装目录下 Tools.ini文件,在C51字段加入TDRV5=BINVDM51.DLL ("Proteus VSM Monitor-51 Driver"),保存。 (注意:不一定要用TDRV5,根据原来字段选用一个不重复的数值就可以了。引号内的名字随意) 3、打开proteus,画出相应电路,在proteus的debug菜单中选中use remote debug monitor 4、在keil中编写C语言程序 5、进入KEIL的project菜单option for target '工程名'。在DEBUG选项中右栏上部的下拉菜单选中 Proteus VSM Monitor-51 Driver。 6、在keil中进行debug吧,同时在proteus中查看直观的结果(如LCD显示)这样就可以像使用仿真器一样调。6.3调试:(1) 开机 按电源开关,显示屏左边的"抢答"指示灯亮,数码管显示。(2) 设定"抢答"倒计时时间(3) 设定"答题"倒计时时间(4) 测试各组抢答按键试按一下各组的抢答按钮,应立即显示该组的组别数字,同时机内喇叭发出"叮咚"的提示音,按"取消"键,返回"0"闪烁状态。(5) 启动抢答倒计时,开始抢答"FFF"状态下,当主持人宣布抢答开始时,马上按一下"抢答"键,屏幕显示所设定的抢答倒计时时间并开始倒计时,提示倒计时时间马上临近结束。倒计时到0以后,仪器发出"叮咚"的结束提示音,同时显示屏返回"FFF"待命状态。在"抢答"倒计时中,如果有参赛组抢答,仪器屏幕立即显示该组的组别号,同时发出"叮咚"的抢答成功提示音。需要返回"FFF"待命状态,按"取消"键即可。(6) 启动答题倒计时"FFF"状态下,或有参赛组抢答成功后,需要开始答题的计时时,按"答题计时"键,屏幕显示所设定的答题倒计时时间并开始倒计时,提示倒计时时间马上临近结束。倒计时到0以后,仪器发出"丁冬"的结束提示音,同时显示屏返回"FFF"待命状态。(7) 提前取消倒计时无论是"抢答"还是"答题"的倒计时时间,需要提前退出,只要按一下"取消"键,即可返回到"FFF"待命状态。(8) 违规抢答当主持人读题过程中,而未宣布抢答开始时按下抢答按钮。