四路智能抢答器计分功能.docx
- 文档编号:24381285
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:25
- 大小:287.15KB
四路智能抢答器计分功能.docx
《四路智能抢答器计分功能.docx》由会员分享,可在线阅读,更多相关《四路智能抢答器计分功能.docx(25页珍藏版)》请在冰豆网上搜索。
四路智能抢答器计分功能
引言
近年来随着科技的飞速发展,单片机、PLC的应用不断深入,同时带动传统的控制技术的不断更新,可编程控制器由于其优良的控制性能,极高的可靠性,在各行各业中的应用日益广泛普及。
当今社会,抢答器朝着数字化、智能化的方向发展,这必然提高了抢答器的成本。
鉴于现在小规模的知识竞赛越来越多,操作简单,经济适用的小型抢答器必将大有市场。
而本文设计的抢答器,电路简单,操作简单,经济实用,灵敏可靠,具有较高的推广价值。
对于抢答器其广泛应用于电视台、技术竞赛及文娱活动时作抢答之用,为参赛选手提供了一个公平竞争的平台,也增添了娱乐性、刺激性,一定程度上丰富了人们的业余生活,随即成为了各单位开展素质教育、精神文明、娱乐活动的必备产品。
1绪论
1.1单片机抢答器的背景
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词--“智能型”。
在知识竞赛中,往往会用到抢答器。
故此我们就选择利用单片机编程来设计抢答器,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组先抢答到。
1.2单片机抢答器的意义
本系统采用单片机作为整个控制核心。
控制系统的四个模块为:
显示模块、存储模块、语音模块、抢答开关模块。
该系统通过开关电路四个按键输入抢答信号,利用一个数码管来完成显示功能,用按键来让选手进行抢答,在数码管上显示哪一组先答题的,从而实现整个抢答过程。
本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
系统工作原理本系统采用89C52单片机作为核心。
控制系统的四个模块分别为:
存储模块、显示模块、语音模块、抢答开关模块。
该抢答器系统通过开关电路四个按键输入抢答信号,利用一个数码管来完成显示功能。
工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,单片机控制的智能抢答器设计。
1.3抢答器的应用
随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。
抢答器又称为第一信号鉴别器,其主要应用于各种知识竞赛、文艺活动等场合。
2AT89S52单片机
2.1AT89S52简介
AT89S52引脚图DIP封装
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
2.2AT89S52各I/O口简介
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动
AT89S52引脚图PLCC封装
4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
3软件设计
流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。
总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。
流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。
流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。
为便于识别,绘制流程图的习惯做法是:
方框表示:
要执行的处理(Process)
平行四边型表示:
代表资料输入(Input)
不规则图形代表资料输出(Output)或报表输出(Print)
菱形表示:
决策或判断(例如:
If...Then...Else)
3.1流程图
N
YYN
N
Y
YN
Y
N
3.2主程序
我们组所设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
本次设计的主程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitfmq=P3^6;
sbitd0=P3^1;/*变量,控制按键锁存*/
/********************************************************/
uintnum=0,qiangdanum,num1=5,num2=5,num3=5,num4=5,time=0;
ucharkey;
Ucharcodetable[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管字型表
/********************************************************/
voiddelay1()//按键延时函数,矩阵键盘用
{
ucharl;
for(l=254;l>0;l--);
}
/********************************************************/
voiddelayms(uintxms)//延时xms
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/********************************************************/
voiddelay500us()//500us基准延时程序
{
unsignedchark;
for(k=0;k<57;k++)
{
;
}
}
voidbeep1()//产生1KHZ频率声音的函数
{
fmq=1;
delay500us();
fmq=0;
delay500us();
}
/********************************************************/
voidbeep()//产生一秒钟的蜂鸣
{
uintm;
for(m=1000;m>0;m--)
beep1();
}
/********************************************************/
ucharkeyscan(void)//键盘扫描函数
{
ucharsccode,recode;
P1=0xf0;
if((P1&0Xf0)!
=0xf0){
delay1();
if((P1&0Xf0)!
=0xf0){
sccode=0xfe;
while((sccode&0x10)!
=0){
P1=sccode;
if((P1&0xf0)!
=0xf0){
recode=(P1&0xf0);
sccode=sccode&0x0f;
return(sccode+recode);
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return(0);
}
/********************************************************/
voidtime0()interrupt1//1秒定时函数
{
num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
/********************************************************/
voiddisplay()//显示函数
{
ucharshi,ge;/*时间显示*/
shi=time/10;
ge=time%10;
P2=0xf7;
P0=table[ge];
delayms(5);
P2=0xfb;
P0=table[shi];
delayms(5);
P2=0xfe;
P0=table[qiangdanum];
delayms(5);
P2=0xef;/*各组得分显示*/
P0=table[num1];
delayms(5);
P2=0xdf;
P0=table[num2];
delayms(5);
P2=0xbf;
P0=table[num3];
delayms(5);
P2=0x7f;
P0=table[num4];
delayms(5);
}
/********************************************************/
voidmain()
{
TMOD=0X01;/*采用方式一,即十六位计数器*/
TH0=(65536-50000)/256;/*设置初始值*/
TL0=(65536-50000)%256;
IT0=0;
EA=1;ET0=1;/*开启总中断源*/
EX0=1;/*启动外部中断0*/
{
while
(1)
{
display();
key=keyscan();
if(key==0xde)
TR0=1;/*开启定时器0中断*/
if(num==20)
{
num=0;
time++;
if(time==11)/*10秒的计时*/
time=0;
}
/*****************************************/
if(time==10)//超时抢答报警
{
TR0=0;
if(key==0xe7)/*开关1按下*/
{
qiangdanum=1;
beep();
}/*1号选手超时抢答,数码管显示1,蜂鸣器响*/
if(key==0xd7)/*开关2按下*/
{
qiangdanum=2;
beep();
}/*2号选手超时抢答,数码管显示2,蜂鸣器响*/
if(key==0xb7)/*开关3按下*/
{
qiangdanum=3;
beep();
}/*3号选手超时抢答,数码管显示3,蜂鸣器响*/
if(key==0x77)/*开关4按下*/
{
qiangdanum=4;
beep();
}/*4号选手超时抢答,数码管显示4,蜂鸣器响*/
}
/*****************************************/
if(key==0xed)//各组对应的加减分键
{
delayms(200);
if(key==0xed)
{
num1++;
if(num1>9)
num1=14;
while(!
key);
}
}
//1#
if(key==0xeb)
{
delayms(200);
if(key==0xeb)
{
num1--;
if(num1==0)
num1=0;
while(!
key);
}
}
/****************************/
if(key==0xdd)
{
delayms(200);
if(key==0xdd)
{
num2++;
if(num2>9)
num2=14;
while(!
key);
}
}
//2#
if(key==0xdb)
{
delayms(200);
if(key==0xdb)
{
num2--;
if(num2==0)
num2=0;
while(!
key);
}
}
/****************************/
if(key==0xbd)
{
delayms(200);
if(key==0xbd)
{
num3++;
if(num3>9)
num3=14;
while(!
key);
}
}
//3#
if(key==0xbb)
{
delayms(200);
if(key==0xbb)
{
num3--;
if(num3==0)
num3=0;
while(!
key);
}
}
/****************************/
if(key==0x7d)
{
delayms(200);
if(key==0x7d)
{
num4++;
if(num4>9)
num4=14;
while(!
key);
}
}
//4#
if(key==0x7b)
{
delayms(200);
if(key==0x7b)
{
num4--;
if(num4==0)
num4=0;
while(!
key);
}
}
/****************************/
if(num1==14||num2==14||num3==14||num4==14)//晋级环节:
那组分数先达到10晋级,比赛结束
{
beep();
delayms(3000);
num1=num2=num3=num4=10;qiangdanum=8;time=88;
}
/*****************************************/
if(d0==1)//抢答环节,有锁存功能
{
if(key==0xe7)/*开关1按下*/
{
qiangdanum=1;
beep();
TR0=0;
d0=0;
}/*1号选手抢答成功,数码管显示1,蜂鸣器响*/
if(key==0xd7)/*开关2按下*/
{
qiangdanum=2;
beep();
TR0=0;
d0=0;
}/*2号选手抢答成功,数码管显示2,蜂鸣器响*/
if(key==0xb7)/*开关3按下*/
{
qiangdanum=3;
beep();
TR0=0;
d0=0;
}/*3号选手抢答成功,数码管显示3,蜂鸣器响*/
if(key==0x77)/*开关4按下*/
{
qiangdanum=4;
beep();
TR0=0;
d0=0;
}/*4号选手抢答成功,数码管显示4,蜂鸣器响*/
}
/*****************************************/
if(key==0xbe)//主持人复位键
{
d0=1;
TR0=0;
time=0;
qiangdanum=0;
display();
key=keyscan();
if(key==0xde)
TR0=1;
if(num==20)
{
num=0;
time++;
if(time==11)
time=0;
}
}
}
}
}
/********************************************************/
4系统的仿真
4.1protenus软件的介绍及使用
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
Proteus软件包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。
Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如按键、LED、数码管等等。
通过Proteus仿真软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。
4.2抢答器protenus软件的仿真
绘制抢答器的软件仿真图步骤分一下四步:
(1)查找所需要的元器件;
(2)根据电路图进行连线;
(3)是用来写线所对应的坐标,即下图所示的P1.1等坐标;
(4)下载所写完的C程序即可以仿真。
通过以上步骤,来实现抢答器设计的仿真实现,仿真如下图所示:
此图为1号选手抢答成功各个组的分数依次为7、2、5、8.
5结论
经过近一个月的努力,在老师和同学的商讨和帮助下,我较好的完成了设计任务,通过此次课程设计,我重新认识到了自学的重要性,以及学以致用的道理。
我查阅了大量的资料,通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识,及我觉得此次设计让我更加巩固了所学的知识并在设计的过程中学会了与时俱进,克服了编程的枯燥感,让我受益匪浅。
而现在,我们在学习单片机这门课程,我们应该好好地记笔记,课下好好地做练习题,再加上课外的拓展才能把C程序设计灵活的运用到单片机程序的设计上。
在单片机这门课程的学习上,我们还应该知道一种常用的仿真软件proteus软件,可以让你我们更为清晰的掌握STC89C51/52系列的实际应用上的设计。
在今后的学习过程中,应该多到图书馆看一些专业方面的书籍,以丰富自己的知识。
这次课设也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设计中可能会存在着一些不足,我真诚地接受老师和同学的批评和指正。
谢辞
首先衷心地感谢我的导师老师。
本文从选题到完成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 四路 智能 抢答 计分 功能