抢答器课程设计 2

四川师范大学成都学院电子工程学院

单片机与接口技术课程设计

八路智能抢答器设计

学生姓名

学 号 所在学院

专业名称

班 级

指导教师

成 绩 何 勇 杰 2013103038 电子工程学院 自动化 2013级 宋薇

四川师范大学成都学院

二〇一五年十二月

摘 要:介绍一种以AT89C51单片机为核心控制器,在软件环境下,从硬件电路建立和软件设计两方面阐述了智能抢答器系统的设计过程和方法通过仿真运行,表明该抢答器能够及时准确的显示第一有效抢答信号,具有反应快"区分度高"操作简便和实用性强等特点。证明了本文阐述的方案和设计方法是可行的。

关键词:抢答器,单片机

Abstract: This paper introduces a AT89C51 MCU as the core controller, in the software environment, the hardware circuit and software design of two aspects elaborates the design process and method of intelligent responder system! By running the simulation, show that the responder can timely and accurately display the first effective answer signal, has quick reaction; discrimination high; easy operation and strong practicability. Prove the scheme and design method in this paper is feasible. Keywords: responder,single chip microcomputer

目 录

前 言 ................................................ 1

1、设计任务与要求 .................................... 2

2、抢答器的原理框图及基本要求 ........................ 2

3、 方案的设计 ....................................... 4

3.1 方案一:触发器控制 ..................................... 4

3.2 方案二:单片机控制 ..................................... 4

3.3.方案论证及选择 ......................................... 5

4、硬件设计与参数计算 ................................ 6

4.1抢答电路设计 ........................................... 6

4.2定时与声光报警提示电路设计 .............................. 7

4.3评分电路的设计.......................................... 8

4.4显示电路的设计.......................................... 8

4.5总原理图 ............................................... 9

4.6元件清单 .............................................. 10

5、软件设计 ......................................... 10

5.1主程序结构图 .......................................... 10

5.2主程序流程图 .......................................... 11

6、仿真调试 ......................................... 12

6.1软件调试 .............................................. 12

6.2硬件调试 .............................................. 12

7、设计总结 ......................................... 14

8、参考文献 ......................................... 15

附录一 ................................................................................................ 16

前 言

抢答器是一种广泛用于企业事业单位和商业部门,为各种知识竞赛、文娱活动提供公正客观快速裁决的一种常用的电子设备。随着集成技术和计算机技术的发展,单片机作为一个分支亦于20世纪80年代以来获得了飞速的发展,各种新品不断涌现,使单片机的应用更加深入,灵活性大大增强。应用单片机的八路抢答器系统具有结构简单、功能强大、可靠性好、实用性强的特点。此次设计以AT89C51单片机为核心控制元件,设计一个简易的电子抢答器,与数码管、蜂鸣器、键盘等构成八路抢答器,利用单片机的延时电路、上电复位电路、数码管显示、定时/中断等电路。设计的八路抢答器具有倒计时、实时显示抢答选手的号码、答题计时、分数可调和计分可查的特点。

本系统采用模块化设计智能抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。通过八路按键配合程序来实现抢答功能。当主持人按下抢答开始键后,此时任一路按下抢答按钮均闭锁其他各路按钮,由程序对键盘译码并显示最先按下抢答键的路数及其当前倒计时。主持人按下抢答键后,设置5s为抢答时间(此时间可调)。若5s内无人抢答,倒计时为零时发出报警,说明该抢答题目作废。此时封闭所有抢答按键,只有主持人再次按下抢答按键开始下一次抢答方可开始抢答。

1、设计任务与要求

抢答器具有数码显示、锁存功能。共分为八组,即序号:1,2,„,8,各有一个抢答按钮,抢答按钮编号与组数序号相对应,分别是选手1,选手2,„,选手8,优先抢答者按动本组序号开关,该组号立即锁存到LED显示器上,同时封锁其他组号。 主持人设置外部清除键。按动清除键,LED显示器自动清零灭灯。

抢答器定时30S。启动开始键后,要求如下:

①30S定时器工作。

②扬声器要短暂报警。

抢答器在30S内进行抢答,抢答有效,终止定时;30S定时到,无抢答者本次抢答无效,系统短暂报警。按下复位key5(主持人),开启倒计时以及流水灯循环流动,至5秒后,报警提示若无人作答,至流水灯以及倒计时提示熄灭,无人作答提示灯点亮,若有人抢答,选手则按下选手1,选手2,„,选手8;作答后,由主持选择打分评价,按打分区键,进行打分评估,并将分数闪烁显示在LED数码管上。由主持人按下清零键后,再按下复位键,开启下一轮限时抢答。

2、抢答器的原理框图及基本要求

(1)抢答器的组成框图

定时抢答器的总体框图如图1所示,它由主体电路和扩展电路两部分组成。主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成定时抢答的功能。

图 1所示的定时抢答器的工作过程是:接通电源时,节目主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时显示器显示设定的时间,当节目主持人宣布抢答题目后,说一声“抢答开始”,同时将控制开关拨到“开始”位置,扬声器给出声响提示,抢答器处于工作状态,定时器倒计时。当定时时间到,却没有选手抢答时,系统报警,并封锁输入电路,禁止选手超时后抢答。当选手在定时时间内按动抢答键时,抢答器要完成以下四项工作:优先编码电路立即分辨出抢答者的编号,并由锁存器进行锁存,然后由译码显示电路显示编号;扬声器发出短暂声响,提醒节目主持人注意;控制电路要对输入编码电路进行封锁,避免其他选手再次进行抢答;控制电路要使定时器停止工作,时间显示器上显示剩余的抢答时间,并保持到主持人将系统清零为止。当选手将问题回答完毕,主持人启动计分器,并且给该选手加上或减去分数。

计分器通过译码器将信号传送给一数码管显示出来。

图1总体框图 (2)本设计方案要求在所提供的元器件范围内设计一个8人抢答器,其功能要求如下:

(1)能判别输入量的优先权;

(2)具有锁存优先判别功能;

(3)主持人开关可以恢复下一轮抢答;

(4)具有数字显示和声音提示。

3、 方案的设计

3.1 方案一:触发器控制

图2方案一流程图

抢答器主要是由四个三极管、和四个D触发器以及四个或非门构成,其中三极管是与主持人一起配合使用,用来控制是否开始抢答,当主持人将开关接地时,三极管截至,此时三极管可以当作一个二极管使用当有选手抢答时就通过三极管将信号传送给D触发器,D触发器在将信号传送给或非门并将其他选手锁存,同时将信号送给发光二极管与喇叭。

其工作原理是当主持人按下抢答开关时,选手能进行抢答。当有选手抢时,抢答信号就通过三极管传入D触发器,并且最先收到抢答信息的D触发器送出一个反馈信号将其余三位选手的信号封锁。

3.2 方案二:单片机控制

图3 方案二流程图

方案二的抢答器则主要是由一个74LS373、若干按键,LED灯,无源蜂鸣器和8255a拓展芯片以及AT89C51单片机,AT89C51主要通过8255a拓展芯片的A、B端口与数码管相接,而74LS373直接与89C51单片机的P0 I\O口相连。抢答键、控制键以及评分键分别接在单片机的P1口以及8255a的c端口。单片机通过对74LS373间接的对8255a进行控制,使其处于使能状态,进而接受来自于单片机的数据信号。再通过其对相应端口的控制进行数码管显示。主要流程为:

(1)、按下复位键(主持人),开启倒计时以及流水灯循环流动,至5秒后,报警提示若无人作答,至流水灯以及倒计时提示熄灭,无人作答提示灯点亮。

(2)、若有人抢答,选手则按下选手1,选手2,„,选手8,并立即显示在LED数码管上显示相应的选手数码号。与此同时流水灯停止流动,相应的选手灯亮起。

(3)、作答后,由主持选择打分评价,按打分区键,进行打分评估。

(4)、由主持人按下清零键后,再按下复位键,开启下一轮限时抢答

3.3.方案论证及选择

通过以上两种方案的比较可知,方案一的设计是每当有选手抢答成功时,都会有声光伴随,而且是具体到每一位,给人直观的感觉。方案二的设计则是用一个数码显示器显示抢答成功者的号码,另外方案二更加的简洁、易行,而且使用到的元器件也都是我

们所常用到的一些元件比如: 74LS373以及开关二极管、电容的电路,因此方案二显得更简单、明了,并且易用软件仿真,非常易于调试。

4、硬件设计与参数计算

4.1抢答电路设计

抢答电路的功能有两个:一是能分辨选手按键的先后,并锁存优先抢答者的编号,供译码显示电路用;二是能封锁其他选手的按键操作。

选用优先编码器74LS373和锁存器8255a可以完成上述功能。

工作过程:开关S置于"清除"端时,RS触发器的 端均为0,4个触发器输出置0,使74LS373的 =0,使之处于工作状态。当开关S置于"开始"时,抢答器处于等待工作状态,当有选手将键按下时(如按下S5),74LS373的输出 经RS锁存后,1Q=1, =1,74LS48处于工作状态,4Q3Q2Q=101,经译码显示为"5"。此外,1Q=1,使74LS373 =1,处于禁止状态,封锁其他按键的输入。当按键松开即按下时,74LS373的 此时由于仍为1Q=1,使 =1,所以74LS373仍处于禁止状态,确保不会出二次按键时输入信号,保证了抢答者的优先性。如有再次抢答需由主持人将S开关重新置"清除"然后再进行下一轮抢答。

表1 74LS373的功能真值表

图4 抢答电路设计

4.2定时与声光报警提示电路设计

采用软件设计的方法进行定时电路的设计。通过软件程序对单片机内的定时寄存器进行控制,进而达到一个定时的作用。再者是声光报警提示电路的设计,是由四只LED发光二极管作为选手灯一只作为无人抢答的标志灯以及赋予报警功能的无源蜂鸣器组成的。此电路充分利用了LED发光二极管工作偏压较低,可以与集成芯片的配合使用的

特性,大大的减少的电路的复杂程度,是电路简单明了,易制作,有较高的使用性。

图5 定时与声光报警提示电路设计

4.3评分电路的设计

此电路是由11个按键和8255A以及单片机构成。通过编程对按键进行扫描检测按

键是否被按下。通过相应的按键给予相应的评分。单片机通过控制8255A相应的端口对按键进行操作,最终在通过8255A的A端口,B端口将数据传送到显示电路中进行显示。

图6 评分电路的设计

4.4显示电路的设计

显示电路由单片机,数码管,已经8255A芯片。其功能是接受来自于8255A相应端口的数据进行显示,此处的作用是用来配合其他单元电路使用,接受并将数据进行译码显示。

图7 显示电路的设计

4.5总原理图

图8 总原理图

4.6元件清单

表2元件清单

5、软件设计

5.1主程序结构图

图9-1软件系统结构图

5.2主程序流程图

流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。总体框图中的各个子模块也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。主程序流程图如下图所示:

图9-2主程序流程图

6、仿真调试

系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。

硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。这种调试可单独模拟进行,也可通过开发装置由软件配合进行。硬件联机调试则必须在系统软件的配合下进行。

软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。

具有清零装置和抢答控制,可由主持人操纵。具有定时功能,在30S内无人抢答表示所有参赛选手对本题弃权。30S时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。电路中的十六个按键,分别是清零键、开始键、评分键和四组选手的按键。

6.1软件调试

通过keil软件编程已达到硬件上的功能实现。仿真的程序参考附录一。

6.2硬件调试

仿真现象及调试结果如图9、图10、图11所示。

1)主持人按下启动键后的截图,液晶屏显示从30秒开始倒计时。如图10

图10 三十秒倒计时

3)选手按下时的截图,显示对应的选手编号,例如2号选手,如图11:

图11选手对应编号

4)主持人按下评分键时的截图显示,例如:评分96.5如图12示:

图12评分96.5

7、设计总结

通过这次课程设计:首先,加深了我对数字电路知识的了解,尤其是数字芯片的性能和使用。其次,使我对数字电路设计更感兴趣,一些电子功能可以通过组合各种各样的元器件,从而产生想要实现的功能,关键在于能够设计出符合要求的电路。再次,使我对课本知识得到巩固和加强,毕竟课本知识是抽象的,只有真正在实践中利用它,做到学以致用,才能加深对它的理解,所以设计出这个题目后,我发现以前对课本有疑问的地方都随着在课程设计中豁然开朗了。最后,加强了我思考和解决问题的能力。由于知识水平的局限,该课程设计有一些不足的地方,真诚地希望老师给予批评和指正。

8、参考文献

[1] 于海生等,微型计算机控制技术[M],清华大学出版社,2008.

[2] 郭天祥,51单片机C语言教程——入门、提高、开发、拓展全攻略[M],电子工业出版社 [3] 李震梅,电子技术实验与课程设计。北京:机械工业出版社。2008 [4] 李忠波,电子设计与仿真技术。北京:机械工业出版社。2004 [5] 高吉祥,电子技术基础实验与课程设计。北京:电子工业出版社。2002

[6] 侯建军,电子技术基础实验、综合设计实验与课程设计。北京:高等教育出版社。2007 [7] 杨力,电子技术课程设计。北京:中国电力出版社。2009

[8] 蒋辉平,基于Proteus的单片机系统设计与仿真实例。北京:机械工业出版社2009

附录一

//程序功能:十秒计时抢答器 /*1、点亮流水灯使灯循环流动

2、30秒倒计时,伴有蜂鸣器报时提示 3、选手抢答按键

4、答题后,再由主持人进行相应的打分评估,显示打分评价 5、复位键,工作指示灯以及无人答题提示灯 操作步骤:

1、按下复位key5,开启倒计时以及流水灯循环流动,至10秒后,报警提示若无人作答,至流水灯以及倒计时提示熄灭,无人作答提示灯,点亮

2、若有人抢答,选手则按下key1,或key2或key3或key4

3、作答后,由主持选择打分评价,按打分区键,进行打分评估。 4、由主持人按下清零键后,再按下复位键,开启下一轮限时抢答*/

程序:

#include #include #include

#define uint unsigned int #define uchar unsigned char

# define PORTA XBYTE[0X7F7C] # define PORTB XBYTE[0X7F7D] # define PORTC XBYTE[0X7F7E] # define CONTROL XBYTE[0X7F7F]

uint a,LedNumVal=30,DelayCNT=0; //变量定义

uint LedOut[4];

display1(int bai,int shi,int ge);

display(uchar num1,uchar aa,uchar bb); void daojishi(); void dafenkey(); uchar keyscan1(); uchar keyscan2(); uchar keyscan3(); void liushudeng(); void delay( uint z); void key(); void init();

sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2;

sbit key4=P1^3;

sbit key5=P1^4;

sbit d1=P1^5; sbit beep=P2^6; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

uchar code Tab1[]={0xfe,0xfd,0xfb,0xf7}; uchar code Tab2[]={0xe0,0xd0,0xb0,0x70}; uchar

cc,temp,flog,flog1,num,num1,tt,bb,num3,num4,num5,flog2=1,flog3=1,flog4=1,flog5=1,flog6=1,flog7=1,flog8=1,bai,shi,ge,i=0; void main() { init(); while(1) { if(key5==0) { LedNumVal=30; TR0=1;

四川师范大学成都学院电子工程学院课程设计报告

TR1=1; flog=0; i=0; d1=1; } if(!flog8) dafenkey(); } }

/*初始化子程序*/ void init() {

CONTROL=0x80; PORTA=0XFF; PORTB=0xff; PORTC=0xff; TMOD =0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-5000)/256; TL1=(65536-5000)%256; EA=1; ET1=1; ET0=1; }

/*定时器调用按键显示*/ void exter0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; daojishi(); key(); liushudeng(); }

/*蜂鸣器以及工作指示灯的开启*/ void exter1() interrupt 3

{

TH1=(65536-5000)/256; TL1=(65536-5000)%256; if(!flog) { beep=0; delay(5); beep=1; delay(5); beep=0; delay(5); beep=1; delay(5); beep=0; delay(5); beep=1; delay(5); beep=0; delay(5); beep=1; delay(5); } } /*延时子程序*/ void delay( uint z) {

uint x,y;

for(x=z;x>0;x--) for(y=10;y>0;y--) ; }

/*按键显示子程序*/ void key() { if(key1==0) { delay(5); if(key1==0) { display( 1,0xfe,0xfe); 17

} } if(key2==0) { delay(5); if(key2==0) { display(2,0xfd,0xfd); } } if(key3==0) { delay(5); if(key3==0) { display(3,0xfb,0xfb); } } if(key4==0) { delay(5); if(key4==0) { display(4,0xf7,0xf7); } } } /*数码管显示子程序*/

display(uchar num1,uchar aa,uchar bb) { PORTB=aa; PORTA=table[num1]; P2=bb; TR0=0; TR1=0;

flog8=0; flog5=1; return(num1,aa,bb); } /* 流水灯演示子程序 */ void liushudeng() { if(cc==20) //校准程序,使倒计时与流水灯同时开启 { cc=15; P2=Tab1[num]; num++; if(num==4) num=0; } else cc++; } //扫描子程序 30秒倒计时 void daojishi() { if(++DelayCNT>=20) //控制数字变化速度 { DelayCNT=0; //20个扫描周期清零一次 --LedNumVal;

} if(LedNumVal==0) { PORTB=0xff;//关灯数码管 P2=0xff;//关灯 d1=0;// 开启无人作答指示灯 TR1=0;//关蜂鸣器 TR0=0; } else

18

{ LedOut[0]=0x40;

LedOut[1]=table[LedNumVal%100/10]; LedOut[2]=table[LedNumVal%10] ;

LedOut[3]=0x40; for( a=0; a

/*打分显示程序*/ void dafenkey() {

while(flog5) { bai=keyscan1(); } while(!flog6) { shi=keyscan2(); }

while(!flog7) { ge=keyscan3(); } while((!flog2)&(!flog3)&(!flog4)) { display1( bai,shi,ge); if(PORTC==0xb7) { flog2=1; PORTB=0xff; PORTC=0xff; P2=0xff;//关灯 } } }

//打分百位选择位子程序 uchar keyscan1() {

PORTC=0xfd; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 19

0xed:num3=1;flog2=0;flog6=0;flog5=0;break; 0xdb:num3=6;flog2=0;flog6=0;flog5=0;break; case 0xdd:num3=2;flog2=0;flog6=0;flog5=0;break; case case 0xbd:num3=3;flog2=0;flog6=0;flog5=0;break; case 0x7d:num3=4;flog2=0;flog6=0;flog5=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xfb; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xeb:num3=5;flog2=0;flog6=0;flog5=0;break; case

0xbb:num3=7;flog2=0;flog6=0;flog5=0;break; case 0x7b:num3=8;flog2=0;flog6=0;flog5=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xf7; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xe7:num3=9;flog2=0;flog6=0;flog5=0;break; case 0xd7:num3=0;flog2=0;flog6=0;flog5=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0;

20

} } } return num3; } //打分十位选择位

uchar keyscan2() { PORTC=0xfd; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xed:num4=1;flog4=0;flog6=1;flog7=0;break; case 0xdd:num4=2;flog4=0;flog6=1;flog7=0;break; case 0xbd:num4=3;flog4=0;flog6=1;flog7=0;break; case 0x7d:num4=4;flog4=0;flog6=1;flog7=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0;

} } } PORTC=0xfb;

temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xeb:num4=5;flog4=0;flog6=1;flog7=0;break; case 0xdb:num4=6;flog4=0; flog6=1;flog7=0;break; case

0xbb:num4=7;flog4=0; flog6=1;flog7=0;break; case 0x7b:num4=8;flog4=0;flog6=1;flog7=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } }

21

PORTC=0xf7; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xe7:num4=9;flog4=0;flog6=1;flog7=0;break; case 0xd7:num4=0;flog4=0; flog6=1;flog7=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } return num4; } //打分个位选择位子程序

uchar keyscan3() { PORTC=0xfd; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20);

temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xed:num5=1;flog3=0;flog7=1;break; case 0xdd:num5=2;flog3=0;flog7=1;break; case 0xbd:num5=3;flog3=0;flog7=1;break; case 0x7d:num5=4;flog3=0;flog7=1;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xfb; temp=PORTC;

temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) {

22

temp=PORTC; switch(temp) { case 0xeb:num5=5;flog3=0;flog7=1;break; case 0xdb:num5=6;flog3=0;flog7=1;break; case 0xbb:num5=7;flog3=0;flog7=1;break; case 0x7b:num5=8;flog3=0;flog7=1;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xf7; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case

0xe7:num5=9;flog3=0;flog7=1;break; case 0xd7:num5=0;flog3=0;flog7=1;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } return num5; } //显示所评价的分数程序 display1(int bai,int shi,int ge) { if(i

23

delay(20);

PORTB=Tab1[2]; PORTA=table[ge]; delay(20); }

return (bai,shi,ge); }

24

四川师范大学成都学院电子工程学院

单片机与接口技术课程设计

八路智能抢答器设计

学生姓名

学 号 所在学院

专业名称

班 级

指导教师

成 绩 何 勇 杰 2013103038 电子工程学院 自动化 2013级 宋薇

四川师范大学成都学院

二〇一五年十二月

摘 要:介绍一种以AT89C51单片机为核心控制器,在软件环境下,从硬件电路建立和软件设计两方面阐述了智能抢答器系统的设计过程和方法通过仿真运行,表明该抢答器能够及时准确的显示第一有效抢答信号,具有反应快"区分度高"操作简便和实用性强等特点。证明了本文阐述的方案和设计方法是可行的。

关键词:抢答器,单片机

Abstract: This paper introduces a AT89C51 MCU as the core controller, in the software environment, the hardware circuit and software design of two aspects elaborates the design process and method of intelligent responder system! By running the simulation, show that the responder can timely and accurately display the first effective answer signal, has quick reaction; discrimination high; easy operation and strong practicability. Prove the scheme and design method in this paper is feasible. Keywords: responder,single chip microcomputer

目 录

前 言 ................................................ 1

1、设计任务与要求 .................................... 2

2、抢答器的原理框图及基本要求 ........................ 2

3、 方案的设计 ....................................... 4

3.1 方案一:触发器控制 ..................................... 4

3.2 方案二:单片机控制 ..................................... 4

3.3.方案论证及选择 ......................................... 5

4、硬件设计与参数计算 ................................ 6

4.1抢答电路设计 ........................................... 6

4.2定时与声光报警提示电路设计 .............................. 7

4.3评分电路的设计.......................................... 8

4.4显示电路的设计.......................................... 8

4.5总原理图 ............................................... 9

4.6元件清单 .............................................. 10

5、软件设计 ......................................... 10

5.1主程序结构图 .......................................... 10

5.2主程序流程图 .......................................... 11

6、仿真调试 ......................................... 12

6.1软件调试 .............................................. 12

6.2硬件调试 .............................................. 12

7、设计总结 ......................................... 14

8、参考文献 ......................................... 15

附录一 ................................................................................................ 16

前 言

抢答器是一种广泛用于企业事业单位和商业部门,为各种知识竞赛、文娱活动提供公正客观快速裁决的一种常用的电子设备。随着集成技术和计算机技术的发展,单片机作为一个分支亦于20世纪80年代以来获得了飞速的发展,各种新品不断涌现,使单片机的应用更加深入,灵活性大大增强。应用单片机的八路抢答器系统具有结构简单、功能强大、可靠性好、实用性强的特点。此次设计以AT89C51单片机为核心控制元件,设计一个简易的电子抢答器,与数码管、蜂鸣器、键盘等构成八路抢答器,利用单片机的延时电路、上电复位电路、数码管显示、定时/中断等电路。设计的八路抢答器具有倒计时、实时显示抢答选手的号码、答题计时、分数可调和计分可查的特点。

本系统采用模块化设计智能抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。通过八路按键配合程序来实现抢答功能。当主持人按下抢答开始键后,此时任一路按下抢答按钮均闭锁其他各路按钮,由程序对键盘译码并显示最先按下抢答键的路数及其当前倒计时。主持人按下抢答键后,设置5s为抢答时间(此时间可调)。若5s内无人抢答,倒计时为零时发出报警,说明该抢答题目作废。此时封闭所有抢答按键,只有主持人再次按下抢答按键开始下一次抢答方可开始抢答。

1、设计任务与要求

抢答器具有数码显示、锁存功能。共分为八组,即序号:1,2,„,8,各有一个抢答按钮,抢答按钮编号与组数序号相对应,分别是选手1,选手2,„,选手8,优先抢答者按动本组序号开关,该组号立即锁存到LED显示器上,同时封锁其他组号。 主持人设置外部清除键。按动清除键,LED显示器自动清零灭灯。

抢答器定时30S。启动开始键后,要求如下:

①30S定时器工作。

②扬声器要短暂报警。

抢答器在30S内进行抢答,抢答有效,终止定时;30S定时到,无抢答者本次抢答无效,系统短暂报警。按下复位key5(主持人),开启倒计时以及流水灯循环流动,至5秒后,报警提示若无人作答,至流水灯以及倒计时提示熄灭,无人作答提示灯点亮,若有人抢答,选手则按下选手1,选手2,„,选手8;作答后,由主持选择打分评价,按打分区键,进行打分评估,并将分数闪烁显示在LED数码管上。由主持人按下清零键后,再按下复位键,开启下一轮限时抢答。

2、抢答器的原理框图及基本要求

(1)抢答器的组成框图

定时抢答器的总体框图如图1所示,它由主体电路和扩展电路两部分组成。主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成定时抢答的功能。

图 1所示的定时抢答器的工作过程是:接通电源时,节目主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时显示器显示设定的时间,当节目主持人宣布抢答题目后,说一声“抢答开始”,同时将控制开关拨到“开始”位置,扬声器给出声响提示,抢答器处于工作状态,定时器倒计时。当定时时间到,却没有选手抢答时,系统报警,并封锁输入电路,禁止选手超时后抢答。当选手在定时时间内按动抢答键时,抢答器要完成以下四项工作:优先编码电路立即分辨出抢答者的编号,并由锁存器进行锁存,然后由译码显示电路显示编号;扬声器发出短暂声响,提醒节目主持人注意;控制电路要对输入编码电路进行封锁,避免其他选手再次进行抢答;控制电路要使定时器停止工作,时间显示器上显示剩余的抢答时间,并保持到主持人将系统清零为止。当选手将问题回答完毕,主持人启动计分器,并且给该选手加上或减去分数。

计分器通过译码器将信号传送给一数码管显示出来。

图1总体框图 (2)本设计方案要求在所提供的元器件范围内设计一个8人抢答器,其功能要求如下:

(1)能判别输入量的优先权;

(2)具有锁存优先判别功能;

(3)主持人开关可以恢复下一轮抢答;

(4)具有数字显示和声音提示。

3、 方案的设计

3.1 方案一:触发器控制

图2方案一流程图

抢答器主要是由四个三极管、和四个D触发器以及四个或非门构成,其中三极管是与主持人一起配合使用,用来控制是否开始抢答,当主持人将开关接地时,三极管截至,此时三极管可以当作一个二极管使用当有选手抢答时就通过三极管将信号传送给D触发器,D触发器在将信号传送给或非门并将其他选手锁存,同时将信号送给发光二极管与喇叭。

其工作原理是当主持人按下抢答开关时,选手能进行抢答。当有选手抢时,抢答信号就通过三极管传入D触发器,并且最先收到抢答信息的D触发器送出一个反馈信号将其余三位选手的信号封锁。

3.2 方案二:单片机控制

图3 方案二流程图

方案二的抢答器则主要是由一个74LS373、若干按键,LED灯,无源蜂鸣器和8255a拓展芯片以及AT89C51单片机,AT89C51主要通过8255a拓展芯片的A、B端口与数码管相接,而74LS373直接与89C51单片机的P0 I\O口相连。抢答键、控制键以及评分键分别接在单片机的P1口以及8255a的c端口。单片机通过对74LS373间接的对8255a进行控制,使其处于使能状态,进而接受来自于单片机的数据信号。再通过其对相应端口的控制进行数码管显示。主要流程为:

(1)、按下复位键(主持人),开启倒计时以及流水灯循环流动,至5秒后,报警提示若无人作答,至流水灯以及倒计时提示熄灭,无人作答提示灯点亮。

(2)、若有人抢答,选手则按下选手1,选手2,„,选手8,并立即显示在LED数码管上显示相应的选手数码号。与此同时流水灯停止流动,相应的选手灯亮起。

(3)、作答后,由主持选择打分评价,按打分区键,进行打分评估。

(4)、由主持人按下清零键后,再按下复位键,开启下一轮限时抢答

3.3.方案论证及选择

通过以上两种方案的比较可知,方案一的设计是每当有选手抢答成功时,都会有声光伴随,而且是具体到每一位,给人直观的感觉。方案二的设计则是用一个数码显示器显示抢答成功者的号码,另外方案二更加的简洁、易行,而且使用到的元器件也都是我

们所常用到的一些元件比如: 74LS373以及开关二极管、电容的电路,因此方案二显得更简单、明了,并且易用软件仿真,非常易于调试。

4、硬件设计与参数计算

4.1抢答电路设计

抢答电路的功能有两个:一是能分辨选手按键的先后,并锁存优先抢答者的编号,供译码显示电路用;二是能封锁其他选手的按键操作。

选用优先编码器74LS373和锁存器8255a可以完成上述功能。

工作过程:开关S置于"清除"端时,RS触发器的 端均为0,4个触发器输出置0,使74LS373的 =0,使之处于工作状态。当开关S置于"开始"时,抢答器处于等待工作状态,当有选手将键按下时(如按下S5),74LS373的输出 经RS锁存后,1Q=1, =1,74LS48处于工作状态,4Q3Q2Q=101,经译码显示为"5"。此外,1Q=1,使74LS373 =1,处于禁止状态,封锁其他按键的输入。当按键松开即按下时,74LS373的 此时由于仍为1Q=1,使 =1,所以74LS373仍处于禁止状态,确保不会出二次按键时输入信号,保证了抢答者的优先性。如有再次抢答需由主持人将S开关重新置"清除"然后再进行下一轮抢答。

表1 74LS373的功能真值表

图4 抢答电路设计

4.2定时与声光报警提示电路设计

采用软件设计的方法进行定时电路的设计。通过软件程序对单片机内的定时寄存器进行控制,进而达到一个定时的作用。再者是声光报警提示电路的设计,是由四只LED发光二极管作为选手灯一只作为无人抢答的标志灯以及赋予报警功能的无源蜂鸣器组成的。此电路充分利用了LED发光二极管工作偏压较低,可以与集成芯片的配合使用的

特性,大大的减少的电路的复杂程度,是电路简单明了,易制作,有较高的使用性。

图5 定时与声光报警提示电路设计

4.3评分电路的设计

此电路是由11个按键和8255A以及单片机构成。通过编程对按键进行扫描检测按

键是否被按下。通过相应的按键给予相应的评分。单片机通过控制8255A相应的端口对按键进行操作,最终在通过8255A的A端口,B端口将数据传送到显示电路中进行显示。

图6 评分电路的设计

4.4显示电路的设计

显示电路由单片机,数码管,已经8255A芯片。其功能是接受来自于8255A相应端口的数据进行显示,此处的作用是用来配合其他单元电路使用,接受并将数据进行译码显示。

图7 显示电路的设计

4.5总原理图

图8 总原理图

4.6元件清单

表2元件清单

5、软件设计

5.1主程序结构图

图9-1软件系统结构图

5.2主程序流程图

流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。总体框图中的各个子模块也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。主程序流程图如下图所示:

图9-2主程序流程图

6、仿真调试

系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。

硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。这种调试可单独模拟进行,也可通过开发装置由软件配合进行。硬件联机调试则必须在系统软件的配合下进行。

软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。

具有清零装置和抢答控制,可由主持人操纵。具有定时功能,在30S内无人抢答表示所有参赛选手对本题弃权。30S时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。电路中的十六个按键,分别是清零键、开始键、评分键和四组选手的按键。

6.1软件调试

通过keil软件编程已达到硬件上的功能实现。仿真的程序参考附录一。

6.2硬件调试

仿真现象及调试结果如图9、图10、图11所示。

1)主持人按下启动键后的截图,液晶屏显示从30秒开始倒计时。如图10

图10 三十秒倒计时

3)选手按下时的截图,显示对应的选手编号,例如2号选手,如图11:

图11选手对应编号

4)主持人按下评分键时的截图显示,例如:评分96.5如图12示:

图12评分96.5

7、设计总结

通过这次课程设计:首先,加深了我对数字电路知识的了解,尤其是数字芯片的性能和使用。其次,使我对数字电路设计更感兴趣,一些电子功能可以通过组合各种各样的元器件,从而产生想要实现的功能,关键在于能够设计出符合要求的电路。再次,使我对课本知识得到巩固和加强,毕竟课本知识是抽象的,只有真正在实践中利用它,做到学以致用,才能加深对它的理解,所以设计出这个题目后,我发现以前对课本有疑问的地方都随着在课程设计中豁然开朗了。最后,加强了我思考和解决问题的能力。由于知识水平的局限,该课程设计有一些不足的地方,真诚地希望老师给予批评和指正。

8、参考文献

[1] 于海生等,微型计算机控制技术[M],清华大学出版社,2008.

[2] 郭天祥,51单片机C语言教程——入门、提高、开发、拓展全攻略[M],电子工业出版社 [3] 李震梅,电子技术实验与课程设计。北京:机械工业出版社。2008 [4] 李忠波,电子设计与仿真技术。北京:机械工业出版社。2004 [5] 高吉祥,电子技术基础实验与课程设计。北京:电子工业出版社。2002

[6] 侯建军,电子技术基础实验、综合设计实验与课程设计。北京:高等教育出版社。2007 [7] 杨力,电子技术课程设计。北京:中国电力出版社。2009

[8] 蒋辉平,基于Proteus的单片机系统设计与仿真实例。北京:机械工业出版社2009

附录一

//程序功能:十秒计时抢答器 /*1、点亮流水灯使灯循环流动

2、30秒倒计时,伴有蜂鸣器报时提示 3、选手抢答按键

4、答题后,再由主持人进行相应的打分评估,显示打分评价 5、复位键,工作指示灯以及无人答题提示灯 操作步骤:

1、按下复位key5,开启倒计时以及流水灯循环流动,至10秒后,报警提示若无人作答,至流水灯以及倒计时提示熄灭,无人作答提示灯,点亮

2、若有人抢答,选手则按下key1,或key2或key3或key4

3、作答后,由主持选择打分评价,按打分区键,进行打分评估。 4、由主持人按下清零键后,再按下复位键,开启下一轮限时抢答*/

程序:

#include #include #include

#define uint unsigned int #define uchar unsigned char

# define PORTA XBYTE[0X7F7C] # define PORTB XBYTE[0X7F7D] # define PORTC XBYTE[0X7F7E] # define CONTROL XBYTE[0X7F7F]

uint a,LedNumVal=30,DelayCNT=0; //变量定义

uint LedOut[4];

display1(int bai,int shi,int ge);

display(uchar num1,uchar aa,uchar bb); void daojishi(); void dafenkey(); uchar keyscan1(); uchar keyscan2(); uchar keyscan3(); void liushudeng(); void delay( uint z); void key(); void init();

sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2;

sbit key4=P1^3;

sbit key5=P1^4;

sbit d1=P1^5; sbit beep=P2^6; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

uchar code Tab1[]={0xfe,0xfd,0xfb,0xf7}; uchar code Tab2[]={0xe0,0xd0,0xb0,0x70}; uchar

cc,temp,flog,flog1,num,num1,tt,bb,num3,num4,num5,flog2=1,flog3=1,flog4=1,flog5=1,flog6=1,flog7=1,flog8=1,bai,shi,ge,i=0; void main() { init(); while(1) { if(key5==0) { LedNumVal=30; TR0=1;

四川师范大学成都学院电子工程学院课程设计报告

TR1=1; flog=0; i=0; d1=1; } if(!flog8) dafenkey(); } }

/*初始化子程序*/ void init() {

CONTROL=0x80; PORTA=0XFF; PORTB=0xff; PORTC=0xff; TMOD =0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-5000)/256; TL1=(65536-5000)%256; EA=1; ET1=1; ET0=1; }

/*定时器调用按键显示*/ void exter0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; daojishi(); key(); liushudeng(); }

/*蜂鸣器以及工作指示灯的开启*/ void exter1() interrupt 3

{

TH1=(65536-5000)/256; TL1=(65536-5000)%256; if(!flog) { beep=0; delay(5); beep=1; delay(5); beep=0; delay(5); beep=1; delay(5); beep=0; delay(5); beep=1; delay(5); beep=0; delay(5); beep=1; delay(5); } } /*延时子程序*/ void delay( uint z) {

uint x,y;

for(x=z;x>0;x--) for(y=10;y>0;y--) ; }

/*按键显示子程序*/ void key() { if(key1==0) { delay(5); if(key1==0) { display( 1,0xfe,0xfe); 17

} } if(key2==0) { delay(5); if(key2==0) { display(2,0xfd,0xfd); } } if(key3==0) { delay(5); if(key3==0) { display(3,0xfb,0xfb); } } if(key4==0) { delay(5); if(key4==0) { display(4,0xf7,0xf7); } } } /*数码管显示子程序*/

display(uchar num1,uchar aa,uchar bb) { PORTB=aa; PORTA=table[num1]; P2=bb; TR0=0; TR1=0;

flog8=0; flog5=1; return(num1,aa,bb); } /* 流水灯演示子程序 */ void liushudeng() { if(cc==20) //校准程序,使倒计时与流水灯同时开启 { cc=15; P2=Tab1[num]; num++; if(num==4) num=0; } else cc++; } //扫描子程序 30秒倒计时 void daojishi() { if(++DelayCNT>=20) //控制数字变化速度 { DelayCNT=0; //20个扫描周期清零一次 --LedNumVal;

} if(LedNumVal==0) { PORTB=0xff;//关灯数码管 P2=0xff;//关灯 d1=0;// 开启无人作答指示灯 TR1=0;//关蜂鸣器 TR0=0; } else

18

{ LedOut[0]=0x40;

LedOut[1]=table[LedNumVal%100/10]; LedOut[2]=table[LedNumVal%10] ;

LedOut[3]=0x40; for( a=0; a

/*打分显示程序*/ void dafenkey() {

while(flog5) { bai=keyscan1(); } while(!flog6) { shi=keyscan2(); }

while(!flog7) { ge=keyscan3(); } while((!flog2)&(!flog3)&(!flog4)) { display1( bai,shi,ge); if(PORTC==0xb7) { flog2=1; PORTB=0xff; PORTC=0xff; P2=0xff;//关灯 } } }

//打分百位选择位子程序 uchar keyscan1() {

PORTC=0xfd; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 19

0xed:num3=1;flog2=0;flog6=0;flog5=0;break; 0xdb:num3=6;flog2=0;flog6=0;flog5=0;break; case 0xdd:num3=2;flog2=0;flog6=0;flog5=0;break; case case 0xbd:num3=3;flog2=0;flog6=0;flog5=0;break; case 0x7d:num3=4;flog2=0;flog6=0;flog5=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xfb; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xeb:num3=5;flog2=0;flog6=0;flog5=0;break; case

0xbb:num3=7;flog2=0;flog6=0;flog5=0;break; case 0x7b:num3=8;flog2=0;flog6=0;flog5=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xf7; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xe7:num3=9;flog2=0;flog6=0;flog5=0;break; case 0xd7:num3=0;flog2=0;flog6=0;flog5=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0;

20

} } } return num3; } //打分十位选择位

uchar keyscan2() { PORTC=0xfd; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xed:num4=1;flog4=0;flog6=1;flog7=0;break; case 0xdd:num4=2;flog4=0;flog6=1;flog7=0;break; case 0xbd:num4=3;flog4=0;flog6=1;flog7=0;break; case 0x7d:num4=4;flog4=0;flog6=1;flog7=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0;

} } } PORTC=0xfb;

temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xeb:num4=5;flog4=0;flog6=1;flog7=0;break; case 0xdb:num4=6;flog4=0; flog6=1;flog7=0;break; case

0xbb:num4=7;flog4=0; flog6=1;flog7=0;break; case 0x7b:num4=8;flog4=0;flog6=1;flog7=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } }

21

PORTC=0xf7; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xe7:num4=9;flog4=0;flog6=1;flog7=0;break; case 0xd7:num4=0;flog4=0; flog6=1;flog7=0;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } return num4; } //打分个位选择位子程序

uchar keyscan3() { PORTC=0xfd; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20);

temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case 0xed:num5=1;flog3=0;flog7=1;break; case 0xdd:num5=2;flog3=0;flog7=1;break; case 0xbd:num5=3;flog3=0;flog7=1;break; case 0x7d:num5=4;flog3=0;flog7=1;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xfb; temp=PORTC;

temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) {

22

temp=PORTC; switch(temp) { case 0xeb:num5=5;flog3=0;flog7=1;break; case 0xdb:num5=6;flog3=0;flog7=1;break; case 0xbb:num5=7;flog3=0;flog7=1;break; case 0x7b:num5=8;flog3=0;flog7=1;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } PORTC=0xf7; temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { delay(20); temp=PORTC; temp=temp&0xf0; while(temp!=0xf0) { temp=PORTC; switch(temp) { case

0xe7:num5=9;flog3=0;flog7=1;break; case 0xd7:num5=0;flog3=0;flog7=1;break; } while(temp!=0xf0) { temp=PORTC; temp=temp&0xf0; } } } return num5; } //显示所评价的分数程序 display1(int bai,int shi,int ge) { if(i

23

delay(20);

PORTB=Tab1[2]; PORTA=table[ge]; delay(20); }

return (bai,shi,ge); }

24


相关文章

  • 单片机课程设计:八位竞赛抢答器
  • 2013 - 2014学年 第2学期 <单片机应用技术> 课 程 设 计 报 告 题 目: 八 位 竞 赛 抢 答 器 专 业: 班 级: 姓 名: 指导教师: 成 绩: 电气工程学院 2014年 月 日 铜陵学院课程设计 课 ...查看


  • CAD课程设计-五路抢答器
  • 广州大学松田学院 课程名称:设计选题:姓 名:学 号:专业班级:指导教师: 2011 课程设计论文 电子工艺课程设计 抢答器 09070201 09电气工程及其自动化 刘翠芳 年12月24日 摘要:抢答器作为一种工具,已经广泛应用于机关学校 ...查看


  • [六路抢答器课程设计报告]
  • 级计算机专业(本科)数字逻辑课程 课程设计报告 班 级: 姓 名: 学 号:同组成员: 指导老师: 日 期: 课程设计名称:六路抢答器的设计 课程设计地点:电子工程学院数字电路实验室.计算机学院机房 课程设计目的: 熟悉数字系统设计的一般方 ...查看


  • 单片机课设报告抢答器
  • 武汉理工大学华夏学院 课程设计报告书 课 程 名 称 单片机原理及应用课程设计 课程设计总评成绩 学生姓名.学 号 学 生 专 业 班级 自动化1133 指 导 教 师 姓名 课程设计起止日期 2015.12.21~2015.12.31 目 ...查看


  • 抢答器课程设计
  • 八路智力竞赛抢答器的设计 摘 要 本文介绍了一种用"CC "系列常用集成电路设计的数码显示八路抢答器的电路组成.设计思路及功能.该抢答器除具有基本的抢答功能外,还具有定时.计时和报警功能.主持人通过时间预设开关预设供抢答 ...查看


  • 八位抢答器课程设计报告
  • 电子技术课程设计报告 八位抢答器 一.设计内容 1. 抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 - S7表示. 2. 设置一个系统清除和抢答控制开关S,该开关由主持人控制. 3. 抢答器具有锁存与显示功能.即第一个选手按动按 ...查看


  • PLC六路抢答器课程设计
  • 漯职业技术学院 毕业设计说明书 专业:机电一体化技术学号:指导老师:赵滟平 [1**********]04 2010年 3月 29 日 摘 要 随着我国经济和文化实业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券.股票交易及各种智 ...查看


  • 数电四路抢答器课程设计报告
  • 电子与通信工程系电子信息科学与技术 课程设计报告 课程名称: 数字电子技术基础 课题题目: 四路智能抢答器 专 业: 电子与信息工程系 姓 名: *** *** 学 号: ********* ********* 指导教师: *** 课题题目 ...查看


  • 四人抢答器的实验报告
  • 电气与自动化工程学院课程设计评分表 课程设计题目:微机原理与接口技术课程设计 班级:Y102101 学号:Y10210120姓名:王圣爽 指导老师: 年 月 日 常熟理工学院电气与自动化工程学院 课程设计说明书 课程名称: 微机原理与接口技 ...查看


  • 电子课程设计报告--八人抢答器电路设计
  • (电子技术课程) 设计说明书 八人抢答器电路设计 起止日期: 2016年11月14日 至 2016年11月18日 学班学成 生姓名 级 号 绩 电气工程1402 指导教师(签字) 电气与信息工程 学院(部) 2016年 11 月 18 日 ...查看


热门内容