抢答器设计.docx
- 文档编号:17416121
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:20
- 大小:224.22KB
抢答器设计.docx
《抢答器设计.docx》由会员分享,可在线阅读,更多相关《抢答器设计.docx(20页珍藏版)》请在冰点文库上搜索。
抢答器设计
目录
1设计任务和性能要求1
1.1设计任务1
1.2性能要求说明1
2硬件系统分析2
2.1硬件系统各模块功能设计2
2.2电路原理图、PCB图及元器件清单3
2.2.1电路原理图3
2.2.2PCB图3
2.2.3元器件清单3
3软件系统分析4
3.1主程序的流程框图4
3.2程序清单5
4抢答器的设计结论、仿真结果13
4.1设计结论和使用说明13
4.1.1设计结论13
4.1.2使用说明13
4.2仿真结果13
结束语15
致谢16
参考文献17
附录18
附录A18
附录B19
附录C20
1设计任务和性能要求
1.1设计任务
(一)设计课题题目:
抢答器
(二)设计目的与任务:
学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,程序编辑,提高设计能力和实践动手能力。
1.2性能要求说明
1.该抢答器上电或按键复位后能自动显示系统提示符“D1004-28”。
2.设定key1键、key2键、key3键、key4键、key5键、key6键、key7键分别为复位键、开始键、答完键、一号选手键、二号选手键、三号选手键、四号选手键。
3.若在主持人按下开始键之前有人按下抢答键,则抢答违规,数码管显示器显示违规台号,违规指示灯(接在P3.2上的灯)亮,只有主持人按复位键后才能重新开始抢答。
4.主持人按下开始键后,抢答开始并限定时间20S。
20S内无人抢答,蜂鸣器发出音响,指示灯亮。
正常抢答下,从抢答键按下开始20S内,答完键没按下,则数码管显示器显示违规台号,违规指示灯亮,蜂鸣器发出音响。
各台数字显示的消除、蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位键实现。
2硬件系统分析
2.1硬件系统各模块功能设计
该抢答器主要由单片机最小系统、独立式键盘模块、LED显示电路模块、蜂鸣电路模块和LED指示灯电路模块组成。
各模块的功能如下:
1.单片机最小系统
由AT89S52单片机、时钟电路和复位电路构成。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
时钟电路由一个12MHz的石英晶体振荡器和两个33pF的的电容组成振荡电路和分频电路。
复位电路采用上电复位和按键复位结合的方式对电路进行复位,主要是通过RST引脚送入单片机。
单片机最小系统为整个电路的核心。
2.独立式键盘模块
采用独立式键盘接法,共有七个按键来对电路进行控制。
分别通过上拉电阻接在单片机的P1口线上。
其中有四个按键为抢答键(接在P1.0--P1.3口线上),开始键接在P1.4口线上,答完键接在P1.5口线上,复位键接在P1..6口线上。
3.LED显示电路模块
采用两个四位一体共阳型数码管显示器进行显示。
由于位控线的驱动电流较大,因此在P2口线上接了8个PNP型三极管提高驱动能力;在单片机的P1口线和P2口线上接了16个470Ω的电阻,这些电阻起限流的作用。
将段控口a--dp接在P0.0--P0.7上,位控口接在P2口线上,实现对显示的控制。
LED显示电路模块主要用来指示第一抢答者,显示倒计时和违规的台号。
4.蜂鸣电路模块
单片机P3.1口线上接上一个1KΩ电阻然后再通过一个PNP型三极管与蜂鸣器相连接组成蜂鸣器电路,接入PNP型三极管是为了增强蜂鸣器的驱动电流。
蜂鸣电路主要完成提示和违规报警功能。
5.LED指示灯电路模块
单片机P3.2口线上经过一个470Ω的电阻与LED灯的阴极相连接,LED灯的阳极接正五伏电压。
470Ω的电阻起限流的作用。
LED指示灯电路模块主要用来指示用违规操作发生。
2.2电路原理图、PCB图及元器件清单
2.2.1电路原理图
电路总原理图见附录A
2.2.2PCB图
PCB见附录B
2.2.3元器件清单
元器件清单见附录C。
3软件系统分析
3.1主程序的流程框图
图3.1主程序流程框图
3.2程序清单
/*项目名称:
抢答器的设计*/
/*设计者:
杨佳宜*/
/*设计时间:
2013.5.16--6.5*/
/////////*****************调用函数声明**************///////////////
#include
#include
/////////*****************数据类型声明**************/////////////
#defineucharunsignedchar
///////////*****************定义新的名字**************////////////
sbitled0=P3^0;//开始指示灯
sbitled1=P3^1;//结束指示灯
sbitled2=P3^2;//违规指示灯
sbitled3=P3^3;//超时指示灯
sbitled4=P3^4;//选手1指示灯
sbitled5=P3^5;//选手2指示灯
sbitled6=P3^6;//选手3指示灯sbitled7=P3^7;//选手4指示灯
///////////*****************显示代码数组**************/////////////
//////共阴代码表格,分别对应:
0,1,2,3,4,5,6,7,8,9,灭///////////////
ucharcodetable[]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0xff,0xff,0xbf};
ucharled[8]={11,11,11,11,11,11,11,10,};
////////////*************变量的定义**************/////////////
staticunsignedlongcount=0;
bits2=0,s3=0,s8=0,bxs=0,c=1;
ucharpb=0x80,temp;
staticuchara=20,xuanshou;//a为倒计时的起始时间,xuanshou为选手序号
/////////////************子函数的声明*************//////////
voiddelay();//延时子函数
voidfuwei();
voidbaojing();
voiddisplay();//显示子函数
voidanjian();//按键子函数
voiddisplay_bjxh();//显示学号函数
///////////**************定时部分**************/////////////
//选用定时器0,采用工作方式1;
voidtime0()interrupt1
{count++;
if(count==20)//count等于20表示1s时间到达
{count=0;a--;//a为倒计时初值,每一秒减一一次
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//50ms计数初值
}
voidmain()
{
while
(1)
{s2=0,s3=0,s8=0,bxs=0,pb=0x80,c=1,a=20;
TMOD=1;
EA=1;
ET0=1;
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
P3=0xff;//将所有指示灯熄灭while(a)
{display();
anjian();
if(bxs==1)
{
led[0]=xuanshou;
}//如果选手键按下,选手序号送缓冲单元
if(s2==1)
{
led[6]=a/10;led[7]=a%10;
}//如果开始键按下,倒计时初值送缓冲单元
display();
anjian();
if(s8==1)//复位标志位为1,表示复位
{
display_bjxh();//所有标志位清零再报警,并送班级学号
}
if(a==0&&bxs==1&&s2==1)//20s到,且是在按下开始,然后有人抢答的情况下;
{
led3=0;led0=1;led[6]=11;led[7]=11;
baojing();fuwei();
}//将定时器关闭,超时指示灯亮,再报警
if(a==0&&s2==1)//如果开始键按下,抢答时间到
{
TR0=0;led1=0;led0=1;
baojing();fuwei();//结束指示灯点亮,熄灭开始指示灯再报警
}
if(s3==1)//结束标志位为1,表示结束
{led1=0;led0=1;
baojing();fuwei();
}//结束指示灯点亮,熄灭开始指示灯,再报警
if(s2==0&&bxs==1)//在没按下开始按键情况下按抢答,再报警
{a=0;led2=0;led[6]=11;led[7]=11;
baojing();fuwei();
}//结束循环,违规指示灯点亮,再报警}
}
}
////////////*********按键部分**************/////////////
voidanjian()
{
P1=P1&0xff;
delay();//去抖动
P1=P1&0xff;
temp=P1;
temp=temp|pb;
if(temp==0xfe)
{
TR0=1;s2=1;a=20;led0=0;
baojing();
}//开始按键,标置位s2置1,定时器开启,
//开始指示灯亮,并置初值
if(temp==0xfd)
{
TR0=0;s3=1;led[6]=11;led[7]=10;
pb=0xbf;led1=0;baojing();
}//结束按键,置标志位if(temp==0xfb)
{
pb=0xbc;bxs=1;a=20;
xuanshou=1;led4=0;baojing();//选手1按下,给屏蔽pb送有效值
}
if(temp==0xf7)
{
pb=0xbc;bxs=1;a=20;
xuanshou=2;led5=0;baojing();//选手1按下,给屏蔽pb送有效值,并置标志位
}
if(temp==0xef)
{
pb=0xbc;bxs=1;a=20;
xuanshou=3;led6=0;baojing();
}//选手1按下,给屏蔽pb送有效值,并置标志位
if(temp==0xdf)
{
pb=0xbc;bxs=1;a=20;
xuanshou=4;led[7]=0;baojing();
}//选手1按下,给屏蔽pb送有效值,并置标志位if(temp==0xbf)
{
TR0=0;pb=0xff;s8=1;
baojing();
}//复位按键,置标志位
}
/////////************蜂鸣子函数**************/////////////
voidbaojing()
{ucharb;
led1=0;//让蜂鸣器叫
while(b!
=20)
{b++;display();
}//延时,
led1=1;b=0;//停止
}
//////////**********等复位s8按下子函数**************/////////////
voidfuwei()
{while(c)
{display();
anjian();
if(s8==1){c=0;}//等待复位键按下
}
}
//////////////显示班级学号///////////////////
voiddisplay_bjxh()
{
P2=0xfe;
P0=table[8];
delay();
P2=0xfd;
P0=table[2];
delay();
P2=0xfb;
P0=table[12];
delay();
P2=0xf7;
P0=table[4];
delay();
P2=0xef;
P0=table[0];
delay();
P2=0xdf;
P0=table[0];
delay();
P2=0xbf;
P0=table[1];
delay();
P2=0x7f;
P0=0xa1;
delay();
}
////////////////////////以下是显示部分///////////////////
voiddisplay()
{ucharm=7,n,wei=0xfe,ws=8;//ws为显示的位数,wei为位控//
while(ws)
{n=led[m];//位序送给n//
ws--;
P2=wei;
P0=table[n];
delay();//显示延时//
wei=_crol_(wei,1);
m--;
}
}
//////////************延时1ms子函数**************/////////////
voiddelay()//误差0us
{
unsignedchara,b,c;
for(c=1;c>0;c--)
for(b=100;b>0;b--)
for(a=2;a>0;a--);
}
4抢答器的设计结论、仿真结果
4.1设计结论和使用说明
4.1.1设计结论
通过对单片机进行外接键盘和LED数码管的操作以及加上硬件电路和软件的结合,实现了抢答器D1004-28显示以及抢答倒计时的显示,正常抢答时显示台号,抢答违规时显示违规台号、违规指示灯亮、蜂鸣器报警。
通过测试和仿真以及修改,该抢答器完成了设计任务,符合设计要求。
4.1.2使用说明
该抢答器采用两个四位一体八段数码管显示。
当抢答器一上电或复位即可显示“D1004-28”,进入准备工作状态。
按下key2(开始键)键后,抢答开始并计时20S,若计时到仍无人抢答则违规指示灯亮,蜂鸣器报警;若在key2键按下之前有人抢答,则显示器显示违规台号,违规指示灯亮,只有按key1(复位键)才能重新开始抢答。
正常抢答下,显示器显示台号,蜂鸣器发出音响,其它抢答键无效;正常抢答下,从抢答键按下开始20S内,key3键(答完键)没按下,则数码管显示器显示违规台号,违规指示灯亮,蜂鸣器发出音响。
4.2仿真结果
在仿真时用到了两个软件,第一个是Keil,第二个是Proteus,本次仿真是将两个软件结合起来进行的。
运用Keil软件用来编译和调试程序,运用Ptoteus软件来仿真。
Ptoteus仿真电路原理图如图4.1所示。
抢答器上电时,仿真的数码管显示器显示如图4.2所示;当按下开始键时,显示器显示倒计时,此时数码管显示器的显示如图4.3所示,正常抢答时,数码管显示台号仿真图如图4.4所示;若在开始键按下之前有人抢答,数码管显示违规台号,违规指示灯亮,仿真图如图4.5;所示抢答超时时,数码管显示违规台号,违规指示灯亮,蜂鸣器发出音响,仿真图如图4.6所示。
图4.1仿真电路原理图
图4.2抢答器上电或复位显示图图4.3抢答器显示倒计时图
图4.4抢答器正常抢答图图4.5抢答器抢答违规图
图4.6抢答器超时违规图
结束语
单片机是一门比较难学的课程,相对来说,单片机的课程设计也是不容易做的。
通过此次课程设计,使我更加扎实的掌握了有单片机编程方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
在此课程设计过程中,我不仅可以学到了很多在书本上所没有学到过的知识,同时还巩固了以前所学过的知识。
通过这次课程设计,让我对抢答器各种电路都有了大概的了解。
我深刻体会到实际动手操作与书本理论知识有很大的反差,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
在设计中遇到很多困难,我是通过桂友超导师的悉心指导以及上网和查找书本相关内容而慢慢得到解决。
在课程设计当中,我主要应用proteus、protel等软件,使得软件应用更加熟练了;另外对word排版也有了认识,为以后的毕业设计打下了很好的基础。
另外,设计过程中也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果
致谢
本设计是在桂友超导师的悉心指导下完成的,平易近人的性格都是我学习的楷模。
在课程设计与论文整理期间,桂老师给了我很大的支持和鼓励,才使得课程设计与说明书得以顺利的完成,在此谨向导师表示忠心的感谢和崇高的敬意。
同时,我也感谢同学及朋友,在做课程设计与制作期间,他们不仅在学习上对我有很大的帮助,使我在此次设计中学到了许多宝贵的知识和经验。
在此,衷心地感谢你们!
参考文献
[1]马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计[M].北京:
北京航空航天大学出版社,2006
[2]李广弟,朱月秀,冷祖祁.单片机基础[M].北京:
北京航空航天大学出版社,
[3]李光飞.单片机课程设计实例指导[M].北京:
北京航空航天大学出版社,2004.9
[4]邢增平.Protel99SE设计专家指导[M].北京:
中国铁道出版社,2004
附录
附录A
附录B
附录C
类型
名称
类型
名称
类型
名称
类型
名称
1K
RF2
470
RP7
470
R02
LED
D5
1K
R13
470
RP6
470
R03
LED
D8
1K
R12
BELL
LS1
470
R00
LED
D7
4.7K
Rk
CON2
JX1
470
R01
LED
D6
10K
J2
CON2
J1
470
R20
LEDS
LED2
10K
J5
CON2
JX2
470
R05
LEDS
LED1
12MHZ
Y1
CON2
JP5
470
R04
PNP2
Q9
22uF
C3
CON8
JP2
470
R06
PNP
Q6
33pF
C2
CON8
JP1
470
RP3
PNP
Q7
33pF
C1
CON8
JP4
470
RP4
PNP
Q8
200
RF1
CON8
JP3
470
RP5
PNP
Q2
470
R21
LED
D3
470
RP0
PNP
Q1
470
R24
LED
D4
470
RP1
PNP
Q3
470
R25
LED
D2
470
RP2
PNP
Q5
470
R22
LED
D1
470
R27
PNP
Q4
470
R23
LED
D9
470
R07
SW-PB
S1
470
R26
USB
J3
80C52
U1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 抢答 设计