基于单片机的四路抢答器的设计2.docx
- 文档编号:14385078
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:19
- 大小:171.15KB
基于单片机的四路抢答器的设计2.docx
《基于单片机的四路抢答器的设计2.docx》由会员分享,可在线阅读,更多相关《基于单片机的四路抢答器的设计2.docx(19页珍藏版)》请在冰点文库上搜索。
基于单片机的四路抢答器的设计2
基于单片机的四路抢答器的设计2
摘要:
抢答器可以在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答成功者。
通过抢答者的指示灯、液晶屏显示和声音显示等手段指示出第一抢答者。
一般抢答器由单片机以及外围电路组成,分为四路、八路等不同,四路和八路的差别是,抢答器背面的接口有几组,和外形没有关系。
通过自主的设计、编程和调试出一个简单的四路抢答并在液晶屏显示抢答成功者号码;熟悉C语言编程;了解单片机仿真系统的使用方法,达到提高综合运用相关知识的能力;进一步熟悉和掌握Proteus7的使用方法;掌握单片机系统设计全部过程的目的。
关键字:
抢答单片机液晶屏显示
1.前言
电子技术和微型计算机的迅速发展,促进微型计算机测量和控制技术的迅速发展和广泛应用,单片机(单片微型计算机)的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。
单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。
因此一块芯片就构成了一台计算机。
它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。
随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留了原始抢答器的基本功能的同时又增加一系列的实用功能。
并简化其电路结构。
控制系统的三个模块为:
显示模块、存储模块、抢答开关模块。
该系统通过开关电路四个按键输入抢答信号,利用1602液晶屏来完成显示功能,用按键来让选手进行抢答,在液晶屏上显示抢答最快的号码及时间,从而实现整个抢答过程。
本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
系统工作原理本系统采用AT89C52单片机作为核心。
工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,单片机控制的智能抢答器设计。
1.四路抢答器的基本理论
本设计是采用单片机设计的四人比赛用抢答器系统。
它具有电路简单、功能齐全、制作成本低、性价比高等特点,是一种经济、实用的比赛用抢答器。
硬件部分主要由单片机AT89c52、74HC573锁存器、1602液晶屏、主持人操作键盘和其它基本外围电子电路组成。
2.方案设计
抢答器的设计方案要实现以下功能:
(1)抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0~S3表示。
(2)设置一个系统清除S1和抢答控制开关S2,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在1602液晶屏上显示,同时蜂鸣器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒)。
当主持人启动"开始"键后,定时器进行减计时(5)如果定时时间已到,无人抢答,本次抢答无效,系统禁止抢答,定时显示器上显示01s。
该设计采用AT89C52单片机作为控制系统核心。
该系统可以完成信号识别,运算控制以及显示功能。
抢答器的工作原理是采用单片机最小系统,用查询式键盘进行抢答。
通过抢答按键模块,连接按键进行抢答。
此电路完成的功能如图1所示,当主持人宣布抢答开始的时候,按下开始按钮,此时电路进入抢答状态,选手的输入采用了扫描式的输入,之后把相应的信息送往单片机,再由单片机输出到显示输出电路中。
此时有人第一按下相应的抢答按钮,经过单片机的控制选择,在液晶屏上显示相应的号码,并锁存,同时禁止其他按钮的输入。
系统是采用模块化设计的智能抢答器,主控与参赛者设为终端分系统。
主控分系统有:
开始与结束控制按钮、时限设定、各种相关显示调控功能等。
参赛者分系统设有:
抢答按纽、计时显示、提示功能等。
图1抢答器原理图
3.硬件电路的工作原理
3.1抢答器的电路图
如图
(2)所示为电路图,其工作原理为:
接通电源后主持人将开关拨到“清零”状态,抢答器处于禁止状态,定时器设定时间,主持人将开关置“开始”,宣布抢答开始时,选手要在规定时间内完成抢答;定时器倒计时优先判断,编号锁存,扬声器提示。
图2抢答器仿真电路图
3.1.1液晶屏显示电路
使用液晶屏显示抢答成功者号码、时间。
液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。
3.2按键控制电路
键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。
键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生键码。
在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。
独立式键盘,键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。
因此可以根据实际需要对键盘中的按键灵活的编码。
如图3所示。
图3独立式键盘原理图
最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。
独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。
4.软件编程
本设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
本次设计的主程序中包括时钟设计程序,定时器中断子程序,数码管显示程序以及按键控制子程序。
抢答器主流程图如图4所示:
图4抢答器主程序流程图
抢答器定时中断流程图如图5:
图5抢答器定时器中断流程图
5.系统调试和结果分析
系统调试包括硬件调试和软件调试,而且两者是密不可分的。
我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。
硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。
这种调试可单独模拟进行,也可通过开发装置由软件配合进行。
硬件联机调试则必须在系统软件的配合下进行。
软件调试一般包括分块调试和联机调试两个阶段。
程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。
这时该程序功能块已调试完毕,可去掉附加程序段。
其它程序功能块可按此法进行调试。
程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。
从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。
在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。
在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。
系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。
具有清零装置和抢答控制,可由主持人操纵。
具有定时功能,在10S内无人抢答表示所有参赛选手对本题弃权。
10S时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。
电路中的六个按键从上到下分别是清零键、开始键和四组选手的按键。
仿真现象及调试结果如图6、图7、图8所示。
1)图6为主持人按下清零键后的截图,此时液晶屏两项均显示0.
图6
2)主持人按下启动键后的截图,液晶屏显示从10秒开始倒计时。
如图7:
图7
3)选手按下时的截图,显示对应的选手编号,例如2号选手,如图8所示:
图8
6.结论及进一步设想
本设计可以实现四路抢答并在液晶屏显示抢答成功者号码及时间,可用于娱乐节目等活动当中。
但是这只是个简易的四路抢答器,还可以加入蜂鸣,报警等功能,更可实现多路抢答的功能。
参考文献
[1]于海生等,微型计算机控制技术[M],清华大学出版社,2008.
[2]郭天祥,51单片机C语言教程——入门、提高、开发、拓展全攻略[M],电子工业出版社
附录1元件清单
元件名称
型号
数量
单片机
AT89C52
1
锁存器
74HC573
1
开关
Button
7
电阻
R(1k)
1
电阻
R(10k)
1
晶振
CRYSTAL
1
电容
10uf
2
液晶屏
1602
1
电源
5v
2
附录2源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharnum;//定义中断变量,num计满20表示1秒时间到
ucharnum1;//十秒倒计时显示初始值
ucharflag1,flag2;//清零键及开始键按下标志位
ucharflag3,flag4=0;//定义键盘按下标志位
#defineLCDPORTP0
sbitLCD1602_RS=P2^0;
sbitLCD1602_EN=P2^1;
sbitsp=P2^2;//定义蜂鸣器端口
sbitclear=P1^0;//定义清零键
sbitstart=P1^1;//开始键
sbitkey1=P1^2;
sbitkey2=P1^3;
sbitkey3=P1^4;
sbitkey4=P1^5;//key1到key4为选手按键
voiddelay(uintz)//延时函数
{
uinti,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
voidWriteCmd_1602(ucharcmd)
{
LCD1602_RS=0;
LCDPORT=cmd;
delay
(1);
LCD1602_EN=1;
delay
(1);
LCD1602_EN=0;
}
voidWriteByte_1602(uchardate)
{
LCD1602_RS=1;
LCDPORT=date;
delay
(1);
LCD1602_EN=1;
delay
(1);
LCD1602_EN=0;
}
voidInit_1602()
{
LCD1602_EN=0;
WriteCmd_1602(0x38);
WriteCmd_1602(0x0c);//光标不显示地址
WriteCmd_1602(0x06);
WriteCmd_1602(0x01);
}
voidbeep()//定义蜂鸣器函数
{
sp=0;
delay(500);
sp=1;
//delay(500);
}
voiddis(uchar*p)
{
while(*p!
='\0')
{
WriteByte_1602(*p++);
}
}
voiddisplay_init()
{
WriteCmd_1602(0x80);
dis("SerialNumber:
");
WriteCmd_1602(0x80+0x40);
dis("SurplusTime:
");
WriteCmd_1602(0x80+0x40+13);
dis("00s");
}
voiddisplay_num(uchara)//选手编号显示函数
{
WriteCmd_1602(0x80+15);
WriteByte_1602(a);
}
voidclr()//清零函数(主持人按下清零键后数码管显示0)
{
WriteCmd_1602(0x80+15);
WriteByte_1602('0');
}
voiddis10s()//十秒倒计时显示函数
{
ucharshi,ge;
shi=num1/10;
ge=num1%10;
WriteCmd_1602(0x80+0x40+13);
WriteByte_1602(shi+0x30);
WriteCmd_1602(0x80+0x40+14);
WriteByte_1602(ge+0x30);
}
voidplayer()//选手按键检测函数
{
if(key1==0&&flag4==0)
{
delay(10);
if(key1==0&&flag4==0)
{
display_num('1');
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!
key1);
}
}
if(key2==0&&flag4==0)
{
delay(10);
if(key2==0&&flag4==0)
{
display_num('2');
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!
key2);
}
}
if(key3==0&&flag4==0)
{
delay(10);
if(key3==0&&flag4==0)
{
display_num('3');
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!
key3);
}
}
if(key4==0&&flag4==0)
{
delay(10);
if(key4==0&&flag4==0)
{
display_num('4');
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!
key4);
}
}
}
voidkey_scan()//检测按键
{
if(clear==0&&flag2!
=1)//判断清零键,判断语句的作用是按下开始键清零键失效
{
delay(10);
if(clear==0&&flag2!
=1)
{
while(!
clear);//等待按键释放
flag1=0;
flag2=0;
flag3=0;
flag4=0;
num=0;
num1=10;
clr();//清零
flag1=1;//按下清零键标志位
}
}
if(flag1==1)//如果按下清零键
{
if(start==0&&flag3==0)//判断开始键,判断语句的作用是按下开始键后开始键失效
{
delay(10);
if(start==0&&flag3==0)
{
flag2=1;
flag3=1;
while(!
start);
}
}
}
if(flag2==1)//按下开始键
{
TR0=1;//启动定时器0
dis10s();
player();
}
}
voidmain()
{
TMOD=0x01;//设置定时器0工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
Init_1602();
display_init();
while
(1)//一直检测按键
{
keyscan();
}
}
voidT0_ser()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
num1--;
}
if(num1==0)
{
TR0=0;
flag1=0;
flag2=0;
num=0;
num1=10;
clr();
beep();
}
}
课设体会
本次课程设计历时三周,在这三周的时间中,我广泛的查找资料,在图书馆借阅单片机书籍,也在网上观看了郭天祥老师的《十天学会单片机》的讲课视频。
初期,根据所学的和查到的资料,能够做出实现四路抢答的部分,但因对液晶屏1602不甚了解,进度有些缓慢。
我们的指导教师蒋老师仔细、耐心的给我介绍了一些1602的基本知识,并指导我怎么进行下一步的课程设计。
我又仔细的钻研几天,终于实现了液晶屏显示部分。
在这里,我要对我的指导老师蒋丽英老师说声谢谢,谢谢您百忙之中能给予指点,让我顺利完成这次课程设计。
这次课程设计让我对学习也有了更深刻的认识,只有打下良好的基础才会学以致用,才会发挥出作用。
完成这次课程设计,让我深刻的认识是单片机对于我们专业的重要性,我对单片机的学习还是不够精通,有了这次课程设计的体会,我一定会利用课余时间更深的了解单片机知识。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准,所以这个课程设计对我们的作用是非常大的。
经过三个星期课程设计制作,过程曲折可谓一语难尽,在此期间我们也失落过,也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
没有经过实践永远都不会知道结果是怎样的,当实践的结果证实了你要得到的结论时那种心情真是不知如何表达。
我也非常的坚信只要付出了一定会有收获,并且这个过程是很美的享受!
汗水预示着结果也见证着收获。
通过本次课程设计,我真正感受到了那种快乐和喜悦!
并且懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
[2011年7月13日完成]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 四路 抢答 设计