实验二十、抢答器设计实训
一、实验目的
1、熟悉Protuse仿真软件的使用;
2、熟悉利用Keil软件编译程序的过程; 3、理解抢答器工作原理。
4、掌握抢答器硬件及软件设计流程。 二、实验内容
抢答器作为一种工具,被广泛应用于各种智力和知识竞赛等场合。但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。因此本课程实训设计的抢答器是一个八路定时抢答器,具有锁存和显示功能。同时有主持人控制系统的清零和抢答的开始。
抢答开始后,若有任何一名选手按动抢答按钮,抢答器就会显示该选手编号直至系统被主持人清零,同时其他人再抢答就无效了。
能够实现的功能有:
1、实现抢答功能,即在一人首先按下抢答器后,其他人按下不会产生作用; 2、第一个人按下后会出现声光等现象提醒有人已经按下抢答器; 3、应有一个能控制整个系统的开关,方便主持人开启抢答器; 4、系统可以复位,不能出现只能使用一次的情况。 其硬件控制流程图如(图20.1)所示。
抢答按键输入控制输入单片机芯片控制输出锁存显示输出 图20.1 硬件控制流程图
三、实验过程
1、Protuse 仿真环境的搭建:
(1)在Pick Devices中查找如(图20.2)所需要的相关器件。
图20.2 查找相关元件
(2)将各元件按照(图20.3)进行相连。
(3)将KEIL软件中生成的.hex文件导入ATC51芯片中进行仿真实验。
图20.3 智能灯控装置仿真线路图 2、Keil软件程序: #include unsigned char n,i; unsigned long int m,t; sbit S1=P0^0; sbit S2=P0^1; sbit S3=P0^2; sbit S4=P0^3; sbit S5=P0^4; sbit S6=P0^5; sbit S7=P0^6; sbit S8=P0^7; sbit VD1=P1^0; sbit VD2=P1^1; sbit VD3=P1^2; sbit VD4=P1^3; sbit VD5=P1^4; sbit VD6=P1^5; sbit VD7=P1^6; sbit VD8=P1^7; sbit SOUND=P3^0; sbit START=P3^1;void delay(t) //延时子程序 {
for(;t>0;t--)
{ for(i=0;i<250;i++); }
}
void main() //主程序 {
while(1) //无限循环 {
if(START==0)//若开始键按下 {
n=0;
while(n==0)//若n=0,循环执行 {
if(S1==0)//若S1按下
{VD1=0;P2=0x79;n=1;} //发光二极管VD1点亮,数码管显示1 else if(S2==0) //若S2按下
{VD2=0;P2=0x24;n=1;} //发光二极管VD2点亮,数码管显示2 else if(S3==0) //若S3按下
{VD3=0;P2=0x30;n=1;} //发光二极管VD3点亮,数码管显示3 else if(S4==0) //若S4按下
{VD4=0;P2=0x19;n=1;} //发光二极管VD4点亮,数码管显示4 else if(S5==0) //若S5按下
{VD5=0;P2=0x12;n=1;} //发光二极管VD5点亮,数码管显示5 else if(S6==0) //若S6按下
{VD6=0;P2=0x02;n=1;} //发光二极管VD6点亮,数码管显示6 else if(S7==0) //若S7按下
{VD7=0;P2=0x78;n=1;} //发光二极管VD7点亮,数码管显示7 else if(S8==0) //若S8按下
{VD8=0;P2=0x00;n=1;} //发光二极管VD8点亮,数码管显示8 }
for(m=0;m<1000;m++) //发出1秒报警声 {
SOUND=~SOUND; delay(1); }
delay(5000); //发光二极管、数码管继续点亮5秒 P1=0xff; P2=0xff; } } }
四、实验现象
在ATC51芯片中下载程序通电后,供8组抢答,当主持人按一下开始键后即可开始抢答,当某一组按下抢答键后,其它各组的按键被锁定,主机上的数码管显示相应的组号,同时该组桌上的发光二极管也点亮,并发出1秒钟的报警声,数码管和发光二极管的显示时间为5秒钟。