第一篇:基于aduino的抢答器设计
/*
QIANG DA QI
disigned by ckj
2012/12/8
*/
int d[4]={7,12,2,6};//shuju
boolean ds[4]={0,0,0,0};//si ge jie kou de shuju
int lt=3;//ceshi shuruduan
int bi=4;//xiaoyin duankou
int le=5;//suoding kongzhiduan
int xuanshou[9]={0,A0,A1,A2,A3,A4,A5,8,9};//xuanshou int fuwei=10;
int zhishideng=11;//zhishideng
int fengmingqi=13;//xiang
/*************************************/
void shuchushezhi()//shezhi duankou wei shuchu {
int i(0);
for(i=0;i<=3;i++)
pinMode(d[i],OUTPUT);//sige shujuduan zhiwei shuchupinMode(bi,OUTPUT);//xiaoyin
pinMode(le,OUTPUT);//suocun
pinMode(lt,OUTPUT);//dnegceshiduan
pinMode(zhishideng,OUTPUT);
pinMode(fengmingqi,OUTPUT);
}
/*************************************/
void shurushezhi()//shezhi shuchu duankou
{
int i(0);
for(i=0;i<=7;i++)//shezhi xuanshou wei shuchupinMode(xuanshou[i],INPUT);
pinMode(fuwei,INPUT);//fuwei
}
/*************************************/
{
int i(0);
digitalWrite(le,LOW);
digitalWrite(bi,HIGH);//quxiao xiaoyin
digitalWrite(lt,HIGH);//shumaguan quanliang
for(i=0;i<=3;i++)
{
digitalWrite(d[i],ds[i]);
}
delay(200);
digitalWrite(bi,LOW);//xiaoyindelay(200);
digitalWrite(bi,HIGH);//quxiao xiaoyin
digitalWrite(lt,HIGH);//quxiao quanliang
}
/*************************************/
void zhuanhuan(int i)//shijinzhi zhuan erjinzhi bing shuchu shuju
{
switch(i)
{
case 0:
ds[0]=0;
ds[1]=0;
ds[2]=0;
ds[3]=0;
break;
case 1:
ds[0]=1;
ds[1]=0;
ds[2]=0;
ds[3]=0;
break;
case 2:
ds[0]=0;
ds[1]=1;
ds[2]=0;
ds[3]=0;
break;
case 3:
ds[0]=1;
ds[1]=1;
ds[2]=0;
break;
case 4:
ds[0]=0;
ds[1]=0;
ds[2]=1;
ds[3]=0;
break;
case 5:
ds[0]=1;
ds[1]=0;
ds[2]=1;
ds[3]=0;
break;
case 6:
ds[0]=0;
ds[1]=1;
ds[2]=1;
ds[3]=0;
break;
case 7:
ds[0]=1;ds[1]=1;ds[2]=1;ds[3]=0;
break;
case 8:
ds[0]=0;
ds[1]=0;
ds[2]=0;
ds[3]=1;
break;
default:
break;
}
int j;
for(j=0;j<=3;j++)
{
digitalWrite(d[j],ds[j]);//shujuduan xieru shuju
}
}
/*************************************/
void xianshi(int i)//shezhixianshihanshu
{
boolean f(0);//shezhi yi ge biaozhi bianliang
digitalWrite(le,LOW);//suocun bu gongzuo
digitalWrite(fengmingqi,HIGH);//fengmingqi gongzuo
zhuanhuan(i);//diaoyong zhuanhuan hanshu
digitalWrite(le,HIGH);//suocun
delay(200);//yanshi 200 haomiao
digitalWrite(zhishideng,HIGH);//zhishidengliang
digitalWrite(fengmingqi,LOW);//fengmingqi guanbi
while(!f)//meiyou an fuwei jianshi yizhi xunhuan
{
f=digitalRead(fuwei);
if(f)//fangzhidoudong
{
delay(10);
f=digitalRead(fuwei);
if(f)//fuwei jian anxia
{
digitalWrite(le,LOW);//guandiaosuocun
digitalWrite(zhishideng,LOW);//guandiao zhishi deng
zhuanhuan(0);//xianshi0
break;//likai xunhuan
}
}
}
}
/*************************************/
void setup()
{
shuchushezhi();//shuchu chushihua
shurushezhi();//shuru chushihua
ceshi();//ceshi yixia shumaguan
}
/*************************************/
void loop()
{
boolean flag(0);//shezhi yige biaozhi bianliang
int i(0);//shezhi yi ge zhongjian bianliang
for(i=1;i<=8;i++)
{
flag=digitalRead(xuanshou[i]);//jiancha shi fou you xuanshou anxia jianif(flag)//ruguo youren an anjian
{
delay(10);
flag=digitalRead(xuanshou[i]);//fangzhi doudong
if(flag)//ruguo zhende anxiaqule
{
xianshi(i);//xianshi bing sucun
}
else//bushi dehua flagbianwei 0
{
flag=0;//biaoshi bian wei 0;
}
}
}
}
第二篇:简易抢答器设计
简易抢答器设计
一.设计目的
1、通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力;
2、掌握Quartus II或Xilinx ISE使用方法,能熟练运用该软件设计并仿真电路;
3、学会用数字电子器件组成复杂系统的方法。
二.设计要求
学习Quartus II软件
软件设计要求:
1.2.3.4.5.6.7.建立项目,选择元件 元件调入,加输入输出引脚 设计原理图 编译电路 建立波形文件 波形仿真
了解引脚分配,电路下载
实践设计要求:
1、根据所选题目,在Quartus II软件中设计原理图。
2、实现所设计电路的局部仿真和总体仿真。
3、每五~六人一组,写出设计报告。
三.设计步骤
设计方案
电路选用优先编码器 74LS148、锁存器 74LS373、74LS48译码和一个7段数码管组成抢答显示电路;定时显示主要由555定时器秒脉冲产生电路、十进制同步加减计数器74LS192减法计数电路、和2个4段数码管即相关电路组成;由555定时器和三极管构成的报警电路。1 / 8 接通电源后,主持人将开关拨到“清零”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置;开始“状态,宣布”开始“抢答器工作。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作”清除“和”开始“状态开关。
方案设计与论证
设计一个8路智力竞赛抢答器,具体设计要求如下:
1.抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0~ S7表示。
2.设置一个系统清除和抢答控制开关S,该开关由主持人控制。
3.抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
4.抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动“开始”键后,定时器进行减计时。
5.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
6.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
数字抢答器总体方框图如图2-1所示为总体方框图。其工作原理为:接通电源后,主持人将开关置“开始”状态,抢答器工作,定时器倒计时。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作“清除”和“开始”状态开关。
/ 8
抢答器原理框图
单元电路设计与分析
1. 计时器电路
如图所示为计时器电路,电路中选用了74LS48D.74LS192.74LSOON等元器件组成十进制加减计数器,电路完成的功能有: 当主持人拨到“开始”时,计数器开始减法计数工作,并将时间显示在数码显示管上,当有人抢答时,停止计数并显示此时的倒计时时间三十秒;如果没有人抢答,且倒计时到“0”时,输出低电平到时序控制电路,控制报警电路报警,同时以后抢答 无效
/ 8
2. 抢答器电路
设计电路如图所示,该电路主要完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号(显示电路采用七段数字数码显示管);二是禁止其他选手按键,其按键操作无效。工作过程:开关S置于”清除“端时,锁存器的LE端输入为“1”,停止工作。当开关S置于”开始"时,抢答器处于等待工作状态,当有选手将抢答按键 4 / 8 按下时(如按下S5),LE端变为“1”将数据锁存。在经过优先编码器和译码器将数据输入数码管显示。如有再次抢答需由主持人将S开关重新置“清除”然后再进行下一轮抢答。
3. 报警电路
由555定时器和三极管构成的报警电路如图3-3示。其中555构成多谐振荡器,振荡频率
=1.43/[(RI+2R2)C],其输出信号经三极管推动扬声器。R为时序控制电路输出的控制信号,当R为高电平时,多谐振荡器工作,反之,电路停振。当选手抢答之后或时间到时,5 / 8 将会输入到R一个高电平,多谐振荡器工作,从而发出报警声。
4.时序控制电路
时序控制电路是抢答器设计的关键,它要完成以下三项功能:
(1)主持人将控制开关拨到“开始”位置时,抢答电路和定时电路进入正常抢答工作状态。
(2)当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。(3)当设定的抢答时间到,无人抢答时,扬声器发声,同时抢答电路和定时电路停止工作。
电路总图
倒计时开始
/ 8
二号抢答成功
无人抢答信号示波
四、结论
我们所设计的抢答器是一种比较简易的抢答器,没有使用特别多的,复杂的元器件。它的特点是电路简单、制作方便、操作简单、方便、性能可靠,实用于多种智力竞赛活动。本抢答器的电路主要有四部分组成:抢答器和显示电路、时序控制电路、报警电路以及定时电路。
本作品可以实现以下几个功能:
/ 8
1、具有清零装置和抢答控制,可由主持人操纵避免有人在主持人说“开始”前提前抢答违反规则。
2、具有定时功能,在30秒内无人抢答表示所有参赛选手获参赛队对本题弃权。
3、30秒时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。
五.心得体会
经过两个星期的共同努力,我们终于完成了数字电子技术课设。虽然时间不长,但是在这个过程中我得到了很多东西。因为以前没有做过这一方面的课设,所以,一开始看到这个题目的时候感觉有点不知所措,不知道要从什么地方开始做。经过老师的指导后,本组同学开始查资料、讨论。在这个过程中,我们有冲突、争论、矛盾,但经过商量我们找到了最好的方法。
通过本次实验,最大的收获就是把书本与实践结合在一起,提高动手能力了。学到了很多东西,懂得了团队合作的真正意义,对我以后的学习和工作帮助很大。
六.参考文献
[1] 崔瑞雪、张增良 电子技术动手实践 北京航空航天出版社.2007.6 [2] 成叶琴、王海群 电子技术及实训 机械工业出版社 2002.5 [3] 阎石 数字电子技术基础(第五版)高等教育出版社 1998
/ 8
第三篇:抢答器PLC设计
四路抢答器
摘 要:近年来随着科技的飞速发展,单片机、PLC的应用不断地走向深入,同时带动传统的控制检测技术的不断更新,可编程控制器由于其优良的控制性能,极高的可靠性,在各行各业中的应用日益广泛普及。对于抢答器其广泛用于电视台、商业机构、企事业工会组织、俱乐部及学校等单位组织举办各种知识、技术竞赛及文娱活动时作抢答之用,为竞赛增添了刺激性、娱乐性,在一定程度上丰富了人们的业余生活,并且给人的视觉效果非常好,是各单位开展素质教育、精神文明、娱乐活动的必备产品。
关键词:单片机、PLC;可编程控制器;抢答器 1 系统工作原理 1.1 控制要求
(1)竞赛者若要回答主持人所提问题时,须抢先按下桌上的抢答按钮;
(2)绿色指示灯亮后,须等主持人按下复位按钮PB5后,指示灯才熄灭;
(3)如果竞赛者在主持人打开SW1开关10 s内抢先按下按钮,电磁线圈将使彩球摇动,以示竞赛者得到一次幸运的机会;
(4)如果在主持人打开SW1开关10 s内无人抢答,则必须有声音警示,同时红色指示灯亮,以示竞赛者放弃该题;
(5)在竞赛者抢答成功后,应限定一定的时间回答问题,根据题目难易可设定时间(如2 min);
(6)当主持人打开SW2开关后记时开始,如果竞赛者在回答问题时超出设定时限,则红色指示灯亮并伴有声音提示,竞赛者停止回答问题。1.2 选定输入、输出设备
输入设备与输入端子号
抢答按钮 PB11 0000 抢答按钮 PB12 0001 抢答按钮 PB21 0002抢答按钮 PB22 0003 抢答按钮 PB31 0004 抢答按钮 PB32 0005 抢答按钮 PB41 0006 抢答按钮 PB42 0007 复位按钮 PB5 0008 选择开关 SW1 0009 限时开关 SW2 0010
输出设备与输出端子号
绿色指示灯L1输出 0500 绿色指示灯L2输出 0501 绿色指示灯L3输出 0502 绿色指示灯L4输出 0503 红色指示灯L5输出 0504 红色指示灯L6输出 0505 电磁开关SOL输出 0506
回答限时声音输出 0508 2 系统软件设计[1~3] 2.1 控制梯形图
系统控制梯形图如图1所示。2
2.2 工作过程
(1)由于0500使用他的自身触点(常开触点),在0000或0001闭合后仍保持在ON状态(自锁)。同时,将其常闭触点串入其他各回路中,在0500接通后,他的常闭触点打开,切断其他抢答回路(互锁);
(2)0501,0502和0503以同样方式动作,自锁继电器在复位按钮PB5再次动作时将清零;
(3)机会选择开关SW1使0009闭合后,10 s定时器TIM00启动;
(4)如果0500,0501,0502和0503在10 s定时器TM00动作之前任何一个闭合,则0506变为ON以示抢答成功,同时切断10 s计时显示输出回路,否则输出声音提示,以示竞赛者放弃该题;
(5)常开触点0009断开后,自锁继电器和定时器TIM00将清零;
(6)抢答成功后,主持人闭合限时开关SW2使
0010闭合后,2 min定时器TIM01启动,时间到0505和0508闭合,红灯亮并有 3 声音提示停止回答;
(7)常开触点0010断开后,定时器TIM01清零,为下一轮抢答做好准备。2.3 程序指令
程序指令如表1所示。
2.4 外部接线图
外部接线如图2所示。3 适当扩展
如果给电路加入适当的编、译码器件,就可以将红、绿灯指示变为直观的数字显示,对外围电路稍加修改,就可以变成多路多人抢答器,如六路或十路等,改为多路多人抢答器,可以在梯形图中再加入两路或六路分支即可。去掉程序中的互锁和抢答限时功能,可以将抢答器改成呼叫器,可以用在医院的病房、工厂的车间等多种地方。4 小结与心得体会
在PLC课程设计过程中,我们有过为思考问题而焦头烂额的烦恼,更有答辩成功通过的欣喜若狂。在付出与收获中,我们乐此不疲,享受自己创造的喜悦。从一知半解到调试成功,我们在学习与动手实践中得到了科学启示,人生的感悟。在小组设计电梯过程中,再一次认识到团队精神以及协同合作的重要性和优越性。我要在尽量让自己闪光的同时,还要更加注重融入集体。无论是学习,还是日常生活,都应该继承和发扬这种珍贵的团队精神。我们经常上网和去图书馆查找学习资料,对不懂的问题及时向授课老师同学请教,并做好学习记录,获取了更多的学习信息。在学习中经常与同学交流学习信息与学习方法.一份耕耘,就有一份收获。我发现通过开放课程设计学到的不仅是知识,最重要的是学会了一种新的学习方法,为我终身的继续学习,创造了极好的条件和基础。虽然这次学习时间并不长,但是对自主学习的要求提高了,通过这样的学习形式,提高了我的学习能力。进过此次的PLC设计实训,得到了不少的启示。思考问题以及进行实践都要严谨,缜密。真所谓小心取证,就是这个道理。让我重新认识了团队精神的重要性及如何在团队中尽可能的发挥自己的长处,优势;如何去学习别人的长处,优点来弥补自身的不足都有了一定程度的提升。通过学习PLC的设计,更加了解可编程控制器的构造及应用。激发我们的创新意识,在学习与进行设计的过程中,利用已经掌握的知识及查阅的资料,自行完成PLC设计任务以及设计完成后的答辩过程,都让我们收获不少。“学无止境,上下求索”,在今后的工 5 作中,我将把学到的知识和自己的同伴的知识融合,并灵活的运用到学习、工作和生活当中。课程设计的学习生活使我的人生有了较高的起点,在这个起点上,我将不断向前,用自己辛勤的汗水,铿锵的脚步和竖韧不拔的精神,体验人生的涵义,谱写对生命的承诺。只有不断挑战自己、超越自己,才能跟上时代的步伐,成为适应二十一世纪的学习型创新人才。
六、参考文献
[1]廖常初.PLC基础及应用.北京:机械工业出版社.[2]史国生.电气控制与可编程控制器技术.北京:化学工业出版社,2003.[3]孙振强.可编程控制器原理及应用教程.北京:清华大学出版社.[4]阮友德.电气控制与PLC实训教程.北京:人民邮电出版社,2006.[5]陈宇.可编程控制器基础及编程技巧[M].广州:华南理工大学出版社,1999.
[6]彭利标,徐耀生,王芯.可编程控制器原理及应用[M].西安:西安电子科技大学出版社,2000.
[7]邓则名,邝穗芳.电器与可编程控制器应用技术[M].北京:机械工业出版社,1999.
第四篇:4路抢答器设计程序
#include
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,//0~f显示表
0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char code table0[]={0xf1,0xf2,0xf4,0xf8};
//P2口位选
unsigned char code table2[]={0xef,0xdf,0xbf,0x7f};
//P3口送行信号 unsigned char display[]={0,0,0,0};//显示位 void sw1();
//子函数申明 void sw2();void sw3();void sw4();void xianshi();void init();unsigned char temp,num2,x,x1,x2,a,count;
//变量声明 int num,num1;unsigned char key;unsigned char i,j;sbit P3_4=P3^4;sbit P3_5=P3^5;sbit P3_6=P3^6;sbit P3_7=P3^7;sbit k1=P1^0;
//位申明(时间加)sbit k2=P1^1;
//位申明(时间减)sbit k3=P1^2;
//位申明(开始)sbit k4=P1^3;
//位申明(复位)sbit sp=P1^4;
//蜂鸣器 sbit l1=P1^5;
//LED显示 sbit l2=P1^6;
//LED显示
void delay(unsigned char z)
//延时1ms子函数 {
unsigned char x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);}
void init()
//初始化子函数 { a=0;TMOD=0x01;
//定时器T0工作方式设定
TH0=(65536-10000)/256;//装初值
TL0=(65536-10000)%256;EA=1;
//开定时器T0 ET0=1;
if(k1==0)
//判断时间加K1是否按下
{
delay(5);
//延时躲过抖动
if(k1==0)
//再次确认是否按下K1
{
num++;
//时间自加1
if(num==99)
//如果时间num=99,清零num
{
num=0;
}
num2=num;
//将num值赋值给num2
while(k1==0);//等待K1松手
}
}
if(k2==0)
//判断时间减K2是否按下
{
delay(5);
//延时躲过抖动
if(k2==0)
//再次确认是否按下K2
{
num--;
//时间自减1
if(num==-1)//如果时间num=-1,赋值num=99
{
num=99;
}
num2=num;//将num值赋值给num2
while(k2==0);//等待K2松手
}
}
if(k3==0)
//判断开始按钮K3是否按下
{
delay(5);
//延时躲过抖动
if(k3==0)//再次确认是否按下K3
{
x++;
//自加1
if(x==2)//假如x=2,清零x
{
x=0;
}
}
} }
void keyboad()
//按键检测子函数 { while(1)
{
P3=0xff;
//读引脚前需写入高电平
P3_4=0;
//置第一行线为低
temp=P3;
//P3口信息送入temp中
temp=temp & 0x0f;//屏蔽高四位,保留低四位
if(temp!=0x0f)//判断:假如列线有不为高的时候,执行if循环体
{
delay(5);//延时躲过抖动
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;//判断是哪个键按下
switch(temp)
{
case 0x0e: //第一行第四个按下
{delay(5);num1=4;l2=0;xianshi();} //第一行第一个键按下
break;
case 0x0d:
//第一行第三个按下
{delay(5);num1=3;l2=0;xianshi();}
break;
case 0x0b:
//第一行第二个按下
{delay(5);num1=2;l2=0;xianshi();}
break;
case 0x07: //第一行第一个按下
{delay(5);num1=1;l2=0;xianshi();} break;//第一行第一个键按下
}
}
}
P3=0xff;
P3_5=0;
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
delay(5);//延时躲过抖动
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
{delay(5);num1=8;l2=0;xianshi();} break;
case 0x0d:
{delay(5);num1=7;l2=0;xianshi();} break;
case 0x0b:
{delay(5);num1=6;l2=0;xianshi();} break;
case 0x07:
{delay(5);num1=5;l2=0;xianshi();} break;
}
}
}
P3=0xff;
P3_6=0;
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
delay(5);//延时躲过抖动
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
{delay(5);num1=12;l2=0;xianshi();} break;
case 0x0d:
{delay(5);num1=11;l2=0;xianshi();} break;
case 0x0b:
{delay(5);num1=10;l2=0;xianshi();} break;
case 0x07:
{delay(5);num1=9;l2=0;xianshi();} break;
//第二行第四个键按下//第二行第三个键按下//第二行第二个键按下//第二行第一个键按下//第三行第四个键按下//第三行第三个键按下//第三行第二个键按下//第三行第一个键按下
}
}
}
P3=0xff;
P3_7=0;
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
delay(5);//延时躲过抖动
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
{delay(5);num1=16;l2=0;xianshi();} break;
case 0x0d:
{delay(5);num1=15;l2=0;xianshi();} break;
case 0x0b:
{delay(5);num1=14;l2=0;xianshi();} break;
case 0x07:
{delay(5);num1=13;l2=0;xianshi();} break;
}
temp=P3;
P0=table[key];
}
}
} }
void xianshi(){
TR0=0;
//停止定时计数
num=0;
//倒计时num清零
sp=1;
//成功抢答,蜂鸣器叫
delay(100);
//延时一段时间
sp=0;
//关蜂鸣器
//第四行第四个键按下//第四行第三个键按下//第四行第二个键按下//第四行第一个键按下
while(1)
{
for(a=0;a<4;a++)//显示部分位选
{
delay(5);
P2=table0[a];
P0=table[display[a]];
}
display[0]=num/10;
//倒计时显示0
display[1]=num%10;
display[2]=num1/10;
//显示抢答者号
display[3]=num1%10;
if(k4==0)
//判断复位键K4是否按下
{
num=num2;
//num2值赋值给num
num1=0;
//清零抢答者号显示
TR0=1;
//启动定时器TO
l1=1;
//D1,D2关闭
l2=1;
return;
}
} }
void main()
//主函数 {
l1=1;
//D1,D2关闭
l2=1;
sp=0;//初始化蜂鸣器
x=0;
num=num2=30;
//赋初值
while(1)
{
if(x==1)
//开始键按下
{
delay(5);
TR0=1;
//启动定时
while(1)
{
keyboad();//调用按键检测子函数
if(k4==0)//判断复位键是否按下
{
l1=1;//D1,D2关闭
l2=1;
delay(5);
num=num2;//倒计时时间30秒赋值给num
TR0=1;//启动定时器T0
}
}
}
else
//开始键没有按下
{
for(a=0;a<4;a++)
//显示部分位选
{
delay(5);
P2=table0[a];
P0=table[display[a]];
}
display[0]=num/10;//倒计时显示0
display[1]=num%10;
display[2]=num1/10;
//显示抢答者号
display[3]=num1%10;
init();
//初始化
}
} }
void time0()interrupt 1 //定时器T0中断 {
TH0=(65536-10000)/256;
//重装初值
TL0=(65536-10000)%256;count++;
//中断次数记录
if(k4==0)
//复位键K4检测
{
num=num2;
TR0=1;
num1=0;
return;
}
for(a=0;a<4;a++)
{
delay(10);
P2=table0[a];
P0=table[display[a]];
} display[0]=num/10;
//倒计时显示0
display[1]=num%10;
display[2]=num1/10;//显示抢答者号
display[3]=num1%10;
if(count==100)
//1秒定时是否已到
{
count=0;
//清零记录
num--;
//显示倒计时自减一
if(num<6)
//倒计时倒数6秒,D2亮,蜂鸣器报警
{
l1=~l1;
sp=1;
delay(100);
sp=0;
if(num==0)
//倒计时为0,D2亮,蜂鸣器报警
{
l1=0;
sp=1;delay(200);sp=0;
delay(100);
sp=1;delay(200);sp=0;
delay(100);
sp=1;delay(200);sp=0;
}
if(num==0)
{
while(1)
{
xianshi();
//调用延时子函数
if(k4==0)//假如复位键按下
{
l1=1;
//D1,D2灭
l2=1;
num=num2;//30秒倒计时赋值给num
TR0=1;//启动定时器T0
return;
}
}
}
} } x2++;if(x2==4){
x2=0;} P3=table2[x2];
//分别给行线送低电?
第五篇:多路抢答器的设计
目录
摘要—————————————————————————————2
一、绪论—————————————————————————————2
1、单片机抢答器的背景—————————————————————2
2、单片机的应用————————————————————————3
3、抢答器的应用————————————————————————4
二、方案设计——————————————————————————4
1、总方案设计—————————————————————————4
2、基本功能——————————————————————————5
3、扩展功能——————————————————————————5
三、硬件电路设计————————————————————————6
1、单片机的选择————————————————————————6
2、各模块设计—————————————————————————8 2.1、单片机最小系统——————————————————————8 2.2、抢答按键电路———————————————————————8 2.3、显示器电路————————————————————————9 2.4、蜂鸣器音频输出电路————————————————————10
四、软件设计——————————————————————————11
1、程序设计——————————————————————————11
2、主程序设计—————————————————————————12
五、调试—————————————————————————————12
1、仿真测试——————————————————————————12 1.1、初始状态仿真———————————————————————12 1.2、抢答开始仿真———————————————————————13 1.3、抢答成功仿真———————————————————————13 1.4、抢答违规仿真———————————————————————14 1.5、抢答过时仿真———————————————————————14
2、仿真结果分析————————————————————————15
六、心得体会——————————————————————————15
附录
1.程序清单——————————————————————————16 2.硬件图———————————————————————————23 3.参考文献——————————————————————————23
基于单片机的多路抢答器设计—硬件设计
摘要
此次设计使用AT89C51单片机为核心控制元件,设计一个简易的抢答器,与数码管、报警器等构成八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时/中断电路等。设计的抢答器具有实时显示抢答选手的号码和抢答时间的特点,而复位电路,则使其能再开始新的一轮答题和比赛,与此同时还利用汇编语言编程,使其能够实现一些基本的功能。
本次设计系统实用性强、判断精确、操作简单、扩展功能强等。它的功能实现是比赛开始,主持人读完题之后按下总开关,则计时开始,此时数码管开始进行1s的减计时,直到有一个选手按下抢答按钮,这时对应的数码管上会显示出该选手的编号和抢答所用的时间,同时该选手的报警器也会发出声音,来提示有人抢答本题。如果在规定的30s时间内没有选手做出抢答,则此题作废,即开始重新一轮的抢答。
关键词:单片机、抢答器、数码管、报警器
一、绪论
1、单片机抢答器的背景
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。单片机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人脑的作用,要是它出了毛病,那么整个装置就将瘫痪。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设
4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
3、抢答器的应用
随着我国经济和文化事业的发展,在很多的公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。抢答器又称为第一信号鉴别器,因此能广泛应用于各种知识竞赛、文艺活动等场合。
二、方案设计
1、总方案设计
抢答器的工作原理是采用单片机最小系统(时钟电路、复位电路),用查询式键盘进行抢答。采用动态显示组号。主持人按下开始抢答键后选手才可以开始抢答。若主持人没有按下开始抢答按纽(P3.0),而有选手抢答则为抢答违规,此时报警器响起并显示此选手的组号,需要主持人按下开始抢答开关重新抢答。在主持人按下开始抢答按纽(P3.0),蜂鸣响声提示,且数码管进行30秒倒计时(30秒内抢答有效),有选手在30秒抢答,蜂鸣器响声提示并显示他的组号,同时开始60秒倒计时(60秒内必须回答完问题),60秒后主持人按下复位开关为下一题的抢答做准备;若此30秒内没有选手抢答,则此次抢答作废,由主持人按下复位开关进行下一轮重新抢答。此次设计包括单片机最小系统、抢答按键模块(8个按键)、显示模块、抢答开关模块、蜂鸣器音频输出模块。如下图所示为总体方框图。
图1 总方框图
2、基本功能
(1)、设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别为0、1、2、3、4、5、6、7,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别为S0-S7。
(2)、给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。
(3)、抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管行显示出选手的编号,扬声器给出音响提示,同时封锁输入电路,禁止其他选手抢答。优先抢答的选手的编号一直保持到主持人将系统清零为止。
(4)、如果主持人未按“抢答开始”键,而有人按了抢答按键,此为犯规抢答,LED上不断闪烁FF和犯规报警器并响个不停,直到主持人按下“停止” 键为止。
3、扩展功能
P1.0~P1.7:P1口8位口线,通用I/O接口无第二功能。
P2.0~P2.7:P2口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时传送高8位地址。
P3.0~P3.7:P3口8位口线,第一功能作为通用I/O接口,第二功能作为单片机的控制信号。
2、各模块设计
2.1、单片机最小系统
单片机的最小系统由时钟电路和复位电路组成。时钟电路中电容器C起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。本设计中采用大小为30pF的电容和12MHz的晶振,晶振提供89C51的时钟脉冲使其工作。复位电路是使单片机初始化,即使单片机重新开始执行程序。当复位开关按下,RST由高电平变为低电平,则程序从头开始执行。通常选择C=10~30μF,R=1K,本设计采用的电容值为22μF的电容和电阻为1K的电阻。在此次课程设计电路中当一个问题结束主持人后按下复位开关后进行下一题的准备。如下图所示。
图3 单片机最小系统
2.2、抢答按键电路
抢答电路的功能有两个:一是能分辨出选手按键的先后,并锁存优先抢答者的编号,供译码显示电路用;二是要使其他选手的按键操作无效。89C51的P1口做一个八路抢答按键。P1口P1.0至P1.7对应1~8号8位选手,当主持人按下开始按钮后,电平由高电平变成低电平传入P3口,此时选手可以开始抢答。此电路中采用10K的电阻起保护作用。当某一选手按下抢答按钮后,电平由高电平变成低电平传入P1口,经单片机处理后从P0输出由数码管显示抢答者编号,扬声器给出音响提示。当有一人抢答以后,由于系统已经接收到了一个电平信号,同一时间内它将不再接受另外的电平信号,所以其他选手将不好再抢答。如图所示。
图4 抢答按键电路
4.3、显示器电路
数码管的显示可以分为两种:静态显示和动态显示。静态显示的段选位和位选位均单独连接,因此占用的I/O接口多,无法扩展多个数码管。而数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划的同名端连在一起,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。数码显示管分为共阳数码管和共阴数码管两种。本设计采用共阴极数码显示管做显示电路。由于采用的是共阴的数码显示管,所以只要数码管的各引脚为高电平,那么其对应的二极管就会发光。数码管要显示抢答违规者编号、正常抢答者编号、抢答倒计时和回答问题时间倒计时,数码管采用动态显示。段选位接P0口,P0口显示的是抢答者的编号;位选位接P2口,图6 蜂鸣器音频输出电路
四、软件设计
1、程序设计
程序设计(Programming)是指设计、编制、调试程序的方法和过程。在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出。
为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。把一个程序分成具有多个明确任务的程序模块,分别编制、调试后再把它们连接在一起形成一个完整的程序,这样的程序设计方法称为模块化程序设计。所谓“模块”,实质上就是能完成一定功能,并相对独立的程序段,这种程序设计方法称为模块程序设计法。
模块程序设计法的主要优点是:
(1)单个模块比起一个完整的程序易编写、调试及修改。(2)程序的易读性好。(3)程序的修改可局部化。
(4)模块可以共存,一个模块可以被多个任务在不同条件下调用。(5)模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。本系统软件采用模块化结构,由主程序﹑键盘子程序、显示驱动子程序等构成。
2、主程序设计
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人按开始键发布抢答命令,若在主持人未按开始键之前,有选手提前答题,则为违规抢答,蜂鸣器会发出警告声,并在显示器上显示犯规的选手编号。当有选手抢答成功,则程序打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序,其他选手在此之后按键无效。当在扫描到有人按下了抢答键,马上关闭T0、调用显示程序、封锁键盘。
五、调试
1、仿真测试
由keil软件编译生成hex文件,将此文件导入单片机中,进行硬件仿真。1.1、初始状态仿真
主持人未按开始按钮且选手都处于准备状态时。仿真结果如图7。
图7 初始状态仿真图
11.4、抢答违规仿真
若在主持人还未按下开始按钮时,选手就抢答则为抢答犯规。图为4号选手在主持人未宣布开始时就抢答,从而造成犯规。仿真结果如图10。
图10 抢答违规仿真图
1.5、抢答过时仿真
主持人按下开始按钮后,开始30秒抢答倒计时,如果在这30秒中无人抢答,此次抢答算作失败,系统又将恢复为初始状态。仿真结果如图11
图11 抢答过时仿真图
3附录
1、程序清单
OK EQU 20H;抢答开始标志位 RING EQU 22H;响铃标志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0INT ORG 0013H AJMP INT1SUB ORG 001BH AJMP T1INT ORG 0040H MAIN: MOV R1,#30;初设抢答时间为30s MOV R2,#60;初设答题时间为60s MOV TMOD,#11H;设置未定时器/模式1 MOV TH0,#0F0H MOV TL0,#0FFH;越高发声频率越高,越尖 MOV TH1,#3CH MOV TL1,#0B0H;50ms为一次溢出中断 SETB EA SETB ET0 SETB ET1 SETB EX0 SETB EX1;允许四个中断,T0/T1/INT0/INT1 CLR OK CLR RING SETB TR1 SETB TR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了;=====查询程序===== START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY;未开始抢答时候显示FFF JB P3.0,NEXT ACALL DELAY JB P3.0,NEXT;去抖动,如果“开始键”按下就向下执行,否者跳到非法抢答查询
ACALL BARK;按键发声 MOV A,R1
MOV R5,A MOV R4,B MOV R3,#0AH ACALL DISPLAY;先在两个时间LED上显示R1 JNB P3.4,INC0;3.4为+1s键,如按下跳到INCO JNB P3.5,DEC0;3.5为-1s键,如按下跳到DECO JNB P3.1,BACK0;3.1为确定键,如按下跳到BACKO AJMP INT0SUB INC0: MOV A,R1 CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOV R1,#00H ACALL DELAY1 AJMP INT0SUB ADD0: INC R1 ACALL DELAY1 AJMP INT0SUB DEC0: MOV A,R1 JZ SETR1;如果R1为0, R1就置99,DEC R1 ACALL DELAY1 AJMP INT0SUB SETR1: MOV R1,#63H ACALL DELAY1 AJMP INT0SUB BACK0: RETI;=====INT1(回答时间R2调整程序)===== INT1SUB: MOV A,R2 MOV B,#0AH DIV AB MOV R5,A MOV R4,B MOV R3,#0AH ACALL DISPLAY JNB P3.4,INC1 JNB P3.5,DEC1 JNB P3.1,BACK1 JMP INT1SUB INC1: MOV A,R2 CJNE A,#63H,ADD1 MOV R2,#00H ACALL DELAY1 AJMP INT1SUB ADD1: INC R2 ACALL DELAY1
7继续倒数(这里起到锁抢答作用)AJMP RECOUNT ACCOUT:JNB P1.0,TRUE1 JNB P1.1,TRUE2 JNB P1.2,TRUE3 JNB P1.3,TRUE4 JNB P1.4,TRUE5 JNB P1.5,TRUE6 JNB P1.6,TZ3 JNB P1.7,TZ4 AJMP RECOUNT TZ3: JMP TRUE7 TZ4: JMP TRUE8 QUIT: CLR OK;如果按下了“停止键”执行的程序 CLR RING AJMP START;=====正常抢答处理程序===== TRUE1: ACALL BARK;按键发声 MOV A,R2 MOV R6,A;抢答时间R2送R6 MOV R3,#01H CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答 AJMP COUNT TRUE2: ACALL BARK;MOV A,R2 MOV R6,A MOV R3,#02H CLR OK AJMP COUNT TRUE3:ACALL BARK;MOV A,R2 MOV R6,A MOV R3,#03H CLR OK AJMP COUNT TRUE4:ACALL BARK;MOV A,R2 MOV R6,A MOV R3,#04H CLR OK AJMP COUNT TRUE5: ACALL BARK;MOV A,R2 MOV R6,A
CLR OK AJMP START;=====显示程序===== DISPLAY:MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出, MOV A,R3 MOVC A,@A+DPTR MOV P2,#0feH MOV P0,A ACALL DELAY MOV DPTR,#DAT2 MOV A,R5 MOVC A,@A+DPTR MOV P2,#0fdH MOV P0,A ACALL DELAY MOV A,R4 MOVC A,@A+DPTR MOV P2,#0fbH MOV P0,A ACALL DELAY RET DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;“灭”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“灭”,“F” DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;第一个为零,其他与上相同,因为十位如果为零显示熄灭;====加减时间延时(起到不会按下就加N个数)====== DELAY1: MOV 35H,#08H LOOP0: ACALL DISPLAY DJNZ 35H,LOOP0 RET;=====延时(显示和去抖动用到)===== DELAY: MOV 32H,#12H LOOP: MOV 33H,#0AFH LOOP1: DJNZ 33H,LOOP1 DJNZ 32H,LOOP RET;=====发声程序===== BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING;按键发声 RET;=====TO溢出中断(响铃程序)=====
122-