于基51单片机的八路抢答器设计单片机原理课程设计大学毕设论文.docx
- 文档编号:27640862
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:36
- 大小:655.62KB
于基51单片机的八路抢答器设计单片机原理课程设计大学毕设论文.docx
《于基51单片机的八路抢答器设计单片机原理课程设计大学毕设论文.docx》由会员分享,可在线阅读,更多相关《于基51单片机的八路抢答器设计单片机原理课程设计大学毕设论文.docx(36页珍藏版)》请在冰豆网上搜索。
于基51单片机的八路抢答器设计单片机原理课程设计大学毕设论文
单片机原理及接口技术
课程设计报告
设计题目:
基于51单片机的八路抢答器设计
学号:
姓名:
指导教师:
信息与电气工程学院
二零一六年七月
八路抢答器系统设计
随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。
目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。
因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。
现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以STC89C52RC单片机为核心的八路抢答器。
我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。
1.设计任务
结合实际情况,基于AT89C51单片机设计一个八路抢答器系统。
该系统应满足的功能要求为:
(1)同时供8名选手比赛,分别用8个按钮K1~K8表示,设置一个系统抢答控制开关K0,该开关由主持人控制;
(2)用数码管显示抢答选手、答题时间倒计时、抢答时间倒计时、违规选手;
(3)利用蜂鸣器提示抢答、误操作、答题;
(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
当主持人启动"开始"键后,定时器进行减计时。
主要硬件设备:
AT89C51单片机、蜂鸣器、按键、共阴数码管。
2.整体方案设计
八路抢答器系统以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个抢答器的硬件系统。
其中P0、P2与数码管连接,用于显示时间和抢答选手;P1与按键连接,用于选手抢答;P3用于主持人控制和蜂鸣器调节。
当主持人选择开始抢答后,蜂鸣器提示抢答开始,数码管显示抢答剩余时间,选手可以开始抢答。
若选手抢答,显示抢答者编号以及剩余答题时间,同时蜂鸣器提示答题开始。
硬件电路分为复位电路、晶振电路模块、AT89C51、数码管显示电路、按键输入电路和蜂鸣器报警电路这六个模块。
各模块的主要功能如下:
(1)复位电路模块功能为复位按键按下,提供两个机器周期以上的高电平输入RST来使单片机复位;
(2)晶振电路模块提供给单片机固定频率的震荡脉冲,这个脉冲经分频后为单片机的时钟信号;
(3)AT89C51为控制器,根据外界信号和内部程序来控制模块的输入输出;
(4)数码管显示电路功能为根据单片机信号显示抢答、答题时间及选手等;
(5)按键输入电路提供主持人控制和选手抢答的按键,并将电平信号输入给单片机;
(6)蜂鸣器报警电路根据单片机信号提示答题、抢答、误操作等。
系统的整体设计方案设计图如图2-1所示。
图2-1系统的整体方案设计图
3.系统硬件电路设计
3.1晶振电路
本设计采用的晶振电路为12Mhz晶振以及30pF电容构成。
电路图如图3-1所示。
图3-1晶振电路图
3.2复位电路
本设计采用的复位电路采用20uF的极性电容和100欧姆的电阻构成,当按键按下时提供2ms的高电平脉冲,足够用于单片机的复位。
复位电路图如图3-2所示。
图3-2复位电路图
3.3按键输入电路
按键输入电路由8个选手抢答按键和4个主持人控制按键组成,并配备有上拉电阻以维持高电平。
当按键按下时会在I/O口输入低电平,以供单片机采集并根据程序控制其余模块。
其中K1、K2、K3、K4供主持人使用,1、2、3、4、
5、6、7、8供选手使用。
其与单片机的接口电路如图3-3所示。
图3-3按键输入电路与单片机的接口电路
3.4数码管显示电路
数码管显示电路采用四位一体数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。
LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。
本设计采用八路共阴数码管,共有有4根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。
其中位选线低有效,段选线高有效,位选线与P0连接,段选线与P2低四位连接,分别控制P0、P2接口电平即可显示。
段选线驱动电平如表3-1所示,数码管显示电路图如图3-4所示。
显示数值
H,G,F,E,D,C,B,A
P0口
0
00111111
3FH
1
00000110
06H
2
01011011
5BH
3
01001111
4FH
4
01100110
66H
5
01101101
6DH
6
01111101
7DH
7
00000111
07H
8
01111111
7FH
9
01101111
6FH
表3-1段选驱动代码
图3-4数码管显示电路
3.5蜂鸣器报警与提示电路
本设计采用蜂鸣器和Led灯设计报警和提示电路。
蜂鸣器在定时器1的控制下,当抢答开始、答题开始、误操作等情况下会提示,同时Led也会闪亮。
Led灯由P3^1控制,蜂鸣器由P3^1控制。
电路图如图3-5所示。
图3-5蜂鸣器报警与提示电路
3.6总电路图
总电路图如图3-6所示
图3-6总电路图
4.系统程序设计
4.1主程序流程图
系统在开始时初始化,使抢答时间和答题时间设定为默认值,同时数码管显示FFF。
然后检测开始按键,若开始键按下,则无法调整时间,同时开始检测选手按键,显示抢答剩余时间。
若选手按键按下,则可以由主持人控制开始答题,然后数码管显示抢答选手和答题剩余时间。
若开始键没有按下,且有选手按键,则显示误操作选手编号,同时进行提示;若没有选手按键,则可以进行答题和抢答时间调整。
系统主程序流程图如图4-1所示。
4.2开始键与选手按键扫描子程序流程
开始键扫描程序,它扫描开始键是否按下,若开始键按下,则控制数码管显示、定时器计时、蜂鸣器提示,打开开始键标志位,关闭时间调整标志位,以响应选手的按键处理程序。
选手按键扫描程序,它扫描选手按键是否按下,若按下,则控制数码管显示、蜂鸣器提示,关闭开始键标志位以禁止其他选手抢答,同时响应开始答题按键。
图4-1主程序流程图
4.3显示子程序流程图
显示子程序控制数码管显示,蜂鸣器的提示,led灯的亮灭。
功能如下:
(1)当没有任何操作时,数码管显示FFF,蜂鸣器和led灯无反应;
(2)当按下开始抢答键后,数码管显示抢答倒计时,蜂鸣器响一次,led灯闪烁一次;
(3)当有人抢答后,数码管显示抢答选手编号,蜂鸣器响一次;
(4)当开始答题后,数码管显示答题选手编号、剩余答题时间,蜂鸣器响一次,在时间少于3s时,led灯闪烁,蜂鸣器持续响;
(5)当存在误操作时,数码管显示误操作选手编号,蜂鸣器响一次,led闪烁一次;
(6)当进行时间调整时,数码管显示所调整的时间和调整后的答题时间或抢答时间。
显示子程序流程图如图4-2所示。
图4-2显示子程序流程图
5.系统调试
5.1Proteus软件仿真调试
(1)Proteus简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
1)现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
2)支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
3)提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
4)具有强大的原理图绘制功能。
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:
*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
PROTEUS是单片机课堂教学的先进助手。
PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。
前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。
这在相当程度上替代了传统的单片机实验教学的功能,例:
元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
(2)Proteus仿真过程
选取合适的纸张大小,绘制原理图,导入程序文件,点击运行仿真。
则在原理图中可以看到节点的电平状态,数码管、led灯、蜂鸣器的响应状态,从而可以检验是否达到所期望的功能要求。
1)调试时要注意的问题:
在ISIS中,每个元器件的管脚都要占据一块区域,该区域会排斥外部的走线;在仿真时要设置单片机的时钟频率;元件之间距离要足够以供修改与添加;P0口需要配备上拉电阻以维持高电平。
2)调试时遇到的问题及解决办法:
在仿真时遇到单片机引脚不存在的现象,如图5-1所示。
在更换了另一块单片机后问题解决。
图5-1仿真问题
3)仿真运行结果:
①初始化后数码管显示FFF如图5-2所示。
图5-2
②按下开始抢答键,数码管显示抢答剩余时间倒计时同时蜂鸣器提示,如图5-3所示。
当剩余时间少于3s时蜂鸣器和led灯同时提示,如图5-4所示。
图5-3
图5-4
③抢答成功后蜂鸣器提示,数码管显示抢答选手编号,如图5-5所示。
图5-5
④按下开始答题键后,蜂鸣器提示,数码管显示答题选手编号及答题时间倒计时,如图5-6所示。
⑤进行时间调整时,蜂鸣器提示,数码管显示调整后答题时间或者抢答时间,如图5-7所示。
图5-6
图5-7
5.2硬件调试
硬件调试结果符合Proteus仿真调试结果,不再赘述。
6.程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitK0=P3^0;//开始抢答按键
sbitbeep=P3^7;//蜂鸣器
sbitD0=P3^1;//指示灯
sbitK1=P1^0;//1号选手抢答按键
sbitK2=P1^1;//2号选手抢答按键
sbitK3=P1^2;//3号选手抢答按键
sbitK4=P1^3;//4号选手抢答按键
sbitK5=P1^4;//5号选手抢答按键
sbitK6=P1^5;//6号选手抢答按键
sbitK7=P1^6;//7号选手抢答按键
sbitK8=P1^7;//8号选手抢答按键
sbitS1=P3^2;//答题计时键
sbitS2=P3^3;//开始抢答时间调整键
sbitS3=P3^4;//答题计时时间调整键
chars;
ucharnum=0;//显示抢答选手
chartime1;//抢答时间
chartime2;//答题限时时间
uintm,n;//T0,T1定时器定一秒时
bitflag1,flag2,flag3,flag4;//标志位
bitaa,bb;//时间调整标志位
//延时子函数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
ucharcodetable1[]={
//共阴数码管段码值
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
ucharcodetable2[]={
//共阴数码管位码值
0xfe,0xfd,
0xfb,0xf7
};
//初始化子函数
voidinit()
{
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EA=1;
P0=0x00;
time1=10;
time2=10;
flag2=1;
}
//开始键扫描子函数
voidkey1()
{
uchari=100;
if(K0==0)
{
delay(10);
if(K0==0)
{
while(K0==0&&i)
{
i--;
delay(10);
}
TR0=1;
s=time1;
m=0;
flag1=1;
flag2=1;
flag3=1;
num=0;
beep=1;
D0=1;
flag4=0;//清除违规标志位
aa=0;
bb=0;
}
}
}
//选手抢答按键扫描子函数
voidkey()
{
uchari=100;
if(K1==0)
{
delay(10);
if(K1==0)
{
while(K1==0&&i)
{
i--;
delay(10);
}
num=1;//数码管显示1号"1"
TR0=0;//关闭定时器0,时间停止
TR1=1;//打开定时器1,使扬声器响一声
flag2=0;//关闭开始键标志位,使再按其他七个键不会响应
}
}
if(K2==0)//下面七个键的处理同上
{
delay(10);
if(K2==0)
{
while(K2==0&&i)
{
i--;
delay(10);
}
num=2;
TR0=0;
TR1=1;
flag2=0;//重要
}
}
if(K3==0)
{
delay(10);
if(K3==0)
{
while(K3==0&&i)
{
i--;
delay(10);
}
num=3;
TR0=0;
TR1=1;
flag2=0;
}
}
if(K4==0)
{
delay(10);
if(K4==0)
{
while(K4==0&&i)
{
i--;
delay(10);
}
num=4;
TR0=0;
TR1=1;
flag2=0;
}
}
if(K5==0)
{
delay(10);
if(K5==0)
{
while(K5==0&&i)
{
i--;
delay(10);
}
num=5;
TR0=0;
TR1=1;
flag2=0;
}
}
if(K6==0)
{
delay(10);
if(K6==0)
{
while(K6==0&&i)
{
i--;
delay(10);
}
num=6;
TR0=0;
TR1=1;
flag2=0;
}
}
if(K7==0)
{
delay(10);
if(K7==0)
{
while(K7==0&&i)
{
i--;
delay(10);
}
num=7;
TR0=0;
TR1=1;
flag2=0;
}
}
if(K8==0)
{
delay(10);
if(K8==0)
{
while(K8==0&&i)
{
i--;
delay(10);
}
num=8;
TR0=0;
TR1=1;
flag2=0;
}
}
}
//数码管显示子函数
voiddisplay()
{
if(flag1==1)//开始键按下,开始计时抢答
{
if(num!
=0)//如果有人抢答,则显示相应的几号
{
P0=table1[num];//显示几号抢到了
P2=table2[0];
delay
(2);
P0=0;
P2=0xff;
}
else//否则没人抢答,则前面不显示几号
{
P0=0x00;
P2=0xff;
}
P0=table1[s/10];//下面为显示抢答倒计时
P2=table2[2];
delay
(2);
P0=0;
P2=0xff;
P0=table1[s%10];
P2=table2[3];
delay
(2);
P2=0xff;
P0=0x00;
}
else//如果开始键没有按下,则显示FFF(若有违规者,则显示违规号码及FF)或时间调整
{
if(flag4==1)//违规显示
{
if(num!
=0)
{
P0=table1[num];//显示几号违规了
P2=table2[0];
delay
(2);
P0=0x00;
P2=0xff;
P0=table1[15];//下面显示FF,表示违规了
P2=table2[2];
delay
(2);
P0=0x00;//消隐
P2=0xff;
P0=table1[15];
P2=table2[3];
delay
(2);
P0=0x00;
P2=0xff;
}
else
{
P0=0x00;
P2=0xff;
}
}
else//没有人违规才显示调整时间
{
if(aa==1)
{
P0=0x76;//第一位数码管显示"5(S)"(表示抢答时间调整)
P2=table2[0];
delay
(2);
P0=0x00;
P2=0xff;
P0=table1[time1/10];//下面显示调整的抢答时间
P2=table2[2];
delay
(2);
P0=0x00;
P2=0xff;
P0=table1[time1%10];
P2=table2[3];
delay
(2);
P0=0x00;
P2=0xff;
}
elseif(bb==1)
{
P0=0x38;//第一位与第二位数码管合起来显示"T",表示答题时间调整
P2=table2[0];
delay
(2);
P0=0x00;
P2=0xff;
P0=table1[time2/10];
P2=table2[2];
delay
(2);
P0=0x00;
P2=0xff;
P0=table1[time2%10];
P2=table2[3];
delay
(2);
P0=0x00;
P2=0xff;
}
else//否则显示FFF
{
P0=table1[15];
P2=table2[0];
delay
(2);
P0=0x00;
P0=table1[15];
P2=table2[2];
delay
(2);
P0=0x00;//消隐
P2=0xff;
P0=table1[15];
P2=table2[3];
delay
(2);
P0=0x00;
P2=0xff;
}
}
}
}
//调整时间键扫描子函数
voidkey2()
{
uchari=100;
if(S2==0)//抢答时间调整
{
delay(10);
if(S2==0)
{
while(S2==0&&i)
{
i--;
delay(10);
}
time1++;
if(time1==61)
{
time1=10;
}
aa=1;//将抢答时间标志位置1
bb=0;//同时关闭答题时间标志位
}
}
if(S3==0)//答题时间调整
{
delay(10);
if(S3==0)
{
while(S3==0&&i)
{
i--;
delay(10);
}
time2++;
if(time2==61)
{
time2=10;
}
bb=1;
aa=0;
}
}
}
//主函数
voidmain()
{
uchari=100;
init();//调用初始化子函数
while
(1)
{
key1();//调用开始键扫描子函数
if((flag1==0)&(flag2==1))//当开始键没按下及没有人违规时才可进行时间调整
{
key2();
}
if((flag1==1)&(flag2==0))//当开始键按下及有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 八路 抢答 设计 原理 课程设计 大学 论文