四路单片机抢答器Word文档下载推荐.docx
《四路单片机抢答器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《四路单片机抢答器Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
有人抢答后,系统自动封锁其他选手的抢答按钮,使其不再抢答,从而实现抢答功能。
该系统还增加了抢答倒计时功能,可以调整。
通过自主的设计、编程和调试出一个简单的四路抢答并在液晶屏显示抢答成功者号码;
熟悉C语言编程以及模电的电路知识;
了解单片机仿真系统的使用方法,达到提高综合运用相关知识的能力;
进一步熟悉和掌握Proteus7的使用方法;
掌握单片机系统设计全部过程的目的。
指标及设计要求:
1、能够运用所学的电路、模拟电子技术、数字电子技术、高频电子技术、单片机原理等课程知识设计基本电子应用系统。
2、能应用电子设计的基本理论,根据所给技术指标,分析系统功能,完成系统的硬件电路设计,对并电路参数进行设计。
3、能够针对所设计的电路,在电脑中用Proteus软件对设计电路进行仿真,并根据仿真结果分析系统是否达到设计要求。
4、能应用撰写设计报告,根据期刊论文要求,撰写系统设计文档。
题目分析
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留了原始抢答器的基本功能的同时又增加一系列的实用功能。
并简化其电路结构。
控制系统的三个模块为:
显示模块、存储模块、抢答开关模块。
该系统通过开关电路四个按键输入抢答信号,利用1602液晶屏来完成显示功能,用按键来让选手进行抢答,在液晶屏上显示抢答最快的号码及时间,从而实现整个抢答过程。
本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
系统工作原理本系统采用AT89C52单片机作为核心。
工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,单片机控制的智能抢答器设计。
第2章整体构思
抢答器的设计方案要实现以下功能:
(1)抢答器同时供4名选手或4个代表队比赛,分别用4个按钮Nnmber1~Number4表示。
(2)设置一个系统清除Startingsystem和抢答控制开关Start,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在1602液晶屏上显示,同时蜂鸣器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒)。
当主持人启动"
开始"
键后,定时器进行减计时(5)如果定时时间已到,无人抢答,本次抢答无效,系统禁止抢答,定时显示器上显示01s。
该设计采用AT89C52单片机作为控制系统核心。
该系统可以完成信号识别,运算控制以及显示功能。
具体实现:
硬件电路应能完成以下功能:
参加竞赛者对主持人提出的问题要在最短的时间内作出判断,并按下抢答按键回答问题。
当第一个人按下按键后,则在显示器上显示此竞赛者的号码并进行声音提示,同时电路将其他抢答按键封锁,使其不起作用。
若有人在可以抢答之前按键,应该有违规提示。
电路应该具有倒计时功能,倒计时时间可以设置并显示,在规定时间内没有人抢答则本题作废。
回答完或超时后,由主持人将所有按键恢复,重新开始下一轮。
图1抢答器原理图
第3章各部分定性说明
3.1抢答器的电路图
如图
(2)所示为电路图,其工作原理为:
接通电源后主持人将开关拨到“清零”状态,抢答器处于禁止状态,定时器设定时间,主持人将开关置“开始”,宣布抢答开始时,选手要在规定时间内完成抢答;
定时器倒计时优先判断,编号锁存,扬声器提示。
图2抢答器仿真电路图
3.2液晶屏显示电路
使用液晶屏显示抢答成功者号码、时间。
液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。
3.3按键控制电路
键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。
键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生键码。
在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。
独立式键盘,键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。
因此可以根据实际需要对键盘中的按键灵活的编码。
如图3所示。
图3独立式键盘原理图
最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。
独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。
第3章仿真部分
3.1仿真实现
本设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
本次设计的主程序中包括时钟设计程序,定时器中断子程序,数码管显示程序以及按键控制子程序。
抢答器主流程图如图4所示:
图4抢答器主程序流程图
抢答器定时中断流程图如图5:
图5抢答器定时器中断流程图
4.2系统调试和结果分析
具有清零装置和抢答控制,可由主持人操纵。
具有定时功能,在10S内无人抢答表示所有参赛选手对本题弃权。
10S时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。
电路中的六个按键从上到下分别是清零键、开始键和四组选手的按键。
仿真现象及调试结果如图6、图7、图8所示。
1)图6为主持人按下清零键后的截图,此时液晶屏两项均显示0.
1)运行设计,等待主持人开始。
如图6:
图6
2)主持人按下启动键后的截图,液晶屏显示从10秒开始倒计时。
如图7:
图7
3)选手按下时的截图,显示对应的选手编号,例如3号选手,如图8所示:
图8
设计心得体会
这次课程设计是基于单片机设计四路数字抢答器,让我对电子学习也有了更深刻的认识,只有打下良好的基础才会学以致用,才会发挥出作用。
在本次课程设计过程中遇到了许多困难,PROTEUS做出的仿真效果不符合要求,用C语言编写的程序也出现问题,令人头疼不已,后来在经过查找相关资料,在老师同学的帮助下,终于改正了错误。
完成这次课程设计,让我深刻的认识是单片机对于我们专业的重要性,我对单片机的学习还是不够精通,有了这次课程设计的体会,我一定会利用课余时间更深的了解单片机知识。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准,所以这个课程设计对我们的作用是非常大的。
经过二个星期课程设计制作,过程曲折可谓一波三折,点点滴滴无不令我回味无穷。
没有经过实践永远都不会知道结果是怎样的,当实践的结果证实了你要得到的结论时那种心情真是不知如何表达。
我也非常的坚信只要付出了一定会有收获,并且这个过程是很美的享受!
汗水预示着结果也见证着收获。
通过本次课程设计,我真正感受到了那种快乐和喜悦!
并且懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在此我非常要感谢的是我的指导老师,感谢老师的细心认真的辅导,教给我许多原来不知道的知识。
这次课程设计能够顺利的完成,,同时也离不开指导老师的答疑解惑和同学的帮助。
参考文献
[1]李泉溪.《单片机原理与应用实例仿真》.北京航天航空大学出版社2009年
[2]江世明.《基于Proteus的单片机应用技术》.电子工业出版社2008年
[3]喻宗泉.《单片机原理与应用技术》.西安电子科技大学出版社2005年
[4]万光毅.《单片机实验与实践教程》.北京航天航空大学出版社2003年
附录1源程序
#include<
reg52.h>
#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>
j--);
}
voidWriteCmd_1602(unsignedcharcmd)
LCD1602_RS=0;
LCDPORT=cmd;
delay
(1);
LCD1602_EN=1;
LCD1602_EN=0;
voidWriteByte_1602(unsignedchardate)
LCD1602_RS=1;
LCDPORT=date;
voidInit_1602()
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);
SurplusTime:
WriteCmd_1602(0x80+0x40+13);
00s"
voiddisplay_num(uchara)//选手编号显示函数
WriteCmd_1602(0x80+15);
WriteByte_1602(a);
voidclr()//清零函数(主持人按下清零键后数码管显示0)
WriteByte_1602('
0'
voiddis10s()//十秒倒计时显示函数
ucharshi,ge;
shi=num1/10;
ge=num1%10;
WriteByte_1602(shi+0x30);
WriteCmd_1602(0x80+0x40+14);
WriteByte_1602(ge+0x30);
}
voidplayer()//选手按键检测函数
if(key1==0&
&
flag4==0)
delay(10);
if(key1==0&
{
display_num('
1'
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!
key1);
}
if(key2==0&
if(key2==0&
2'
key2);
if(key3==0&
if(key3==0&
3'
key3);
if(key4==0&
if(key4==0&
{
4'
key4);
voidkeyscan()//检测按键
if(clear==0&
flag2!
=1)//判断清零键,判断语句的作用是按下开始键清零键失效
if(clear==0&
=1)
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
num++;
if(num==20)
num=0;
num1--;
if(num1==0)
TR0=0;
flag1=0;
flag2=0;
num1=10;
clr();
beep();