数字抢答器课程设计 毕业设计.docx
- 文档编号:28871334
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:51
- 大小:3.55MB
数字抢答器课程设计 毕业设计.docx
《数字抢答器课程设计 毕业设计.docx》由会员分享,可在线阅读,更多相关《数字抢答器课程设计 毕业设计.docx(51页珍藏版)》请在冰豆网上搜索。
数字抢答器课程设计毕业设计
《单片机技术》课程设计说明书
数字抢答器
系、部:
电气与信息工程系
学生姓名:
黄伟
指导教师:
王韧职称副教授
专业:
电气工程及其自动化
班级:
电气本0901班
完成时间:
2012年1月4日
摘要
智能抢答器作为一种简单通用的电子产品,现在已经广泛应用于各种智力和知识竞赛中。
随着电子技术的发展,现在的抢答器功能也越来越强,可靠性和准确性也越来越高。
一般能够实现抢答器功能的方案有多种。
本设计采用AT89S52单片机系统以及外部设备,比如数码管显示器、独立式键盘等外部输入输出设备。
分别采用了C51语言和A51语言来编写程序。
晶振为12MHz。
事先已经将电路实物图制作完毕。
程序设计是在keil4的环境下编写的,通过JTAG接口将程序生成的16进制文件下载到单片机里面,就制作成了一个简单抢答器。
关键词:
抢答器;单片机;数码管;C51语言;A51语言
ABSTRACT
Intelligenceisasasimpleviestoanswerfirstgeneralelectronicproducts,nowhasbeenwidelyappliedinallkindsofintelligenceandknowledgerace.Withthedevelopmentofelectronictechnology,thefunctionalsoisnowviestoanswerfirstismoreandmorestrong,reliabilityandaccuracymoreandmoreisalsohigh.Generalcanrealizethefunctionoftheplanhasviestoanswerfirstofmanykinds.
ThisdesignUSEStheAT89S52SCMsystemandexternaldevices,suchasdigitaltubedisplay,independenttypekeyboardexternalinputandoutputdevices.C51areusedforthelanguageandlanguagetowriteaprogramfora251/A51.Crystalsfor12MHz.Beforehandwillcircuitphysicalfigurethefinished.Theprogramdesignisinkeil4undertheenvironmentofthepreparation,andthroughtheJTAGinterfacewillprogramgeneratedhexadecimaldownloadtosinglechipin,makebecameasimpleviestoanswerfirstdevice.
Keywords:
viestoanswerfirstdevice;Singlechipmicrocomputer;Digitaltube;C51language;A51language
1.功能概述
课题任务与功能要求
设计一个具有特定功能的抢答器。
该抢答器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,数码管显示违规台号。
蜂鸣器发出音响;各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位按钮。
方案概述
本设计采用AT89S52单片机以及其外部设备组成硬件电路,其中包括单片机、数码管驱动电路、数码管显示器、LED流水灯、独立式键盘和蜂鸣电路。
蜂鸣电路接在P3.1口上低电平有效;数码管采用共阳数码管,P0口接段控引脚(低电平有效),P2口接位控引脚(低电平有效);8个LED指示灯接P3口(低电平有效);键盘接P1口。
除此之外还有晶振电路,复位电路,电源电路和下载口电路。
程序设计采用C51和A51两种语言编写。
本设计最多可以有4个人同时抢答,其中S1为系统复位键,S2为开始键,S3为停止键,S4到S7为抢答键,S8为自定义复位键。
方案设计框图如图1所示:
图1系统设计框图
课题硬件系统设计
各模块电路简介
单片机最小系统
单片机最小系统包括电源电路、时钟电路、复位电路。
只有当单片机有了这些电路才会工作。
电源电路给单片机供电,时钟电路给单片机提供时钟脉冲,复位电路可以实现单片机的复位。
见下图2.1.1
图2.1.1:
单片机最小系统
独立式键盘电路
按键电路的设计就是在一段公共接地,另一端通过上拉电阻接到P1口,当有按键按下,相应的口就会变成低电平,产生一个下降沿。
见下图2.1.2
图2.1.2:
独立式键盘电路
流水灯电路
流水灯电路直接挂接在单片机的P3口上,采用共阳接法。
见下图2.1.3
图2.1.3:
流水灯电路
蜂鸣器电路
蜂鸣器通过三极管接单片机P3.1口。
见下图2.1.4
图2.1.4蜂鸣器电路
数码管电路
数码管的段控口接在单片机的P0上,而位控口通过三极管接在单片机的P2口上。
见下图2.1.5
图2.1.5:
数码管显示电路
下载口电路
下载口的1脚接P1.5口,2脚悬空,3脚接单片机的复位口,4脚接P1.6口,脚接P1.7口,6脚接地,7、8、8、10脚接地。
见下图2.1.6
图2.1.6:
下载口电路
硬件测试
板子做好后通过老师给的测试程序测得各模块的功能均正常。
单片机最小系统正常工作,数码管能够正常显示,按键正常工作,流水灯电路正常点亮。
课题软件系统设计
单片机资源使用情况
编写程序时,用到了单片机的定时/计数器1,并且让它都以中断方式工作。
P0、P1、P2、P3、口均已用到。
没有用到P3口的第二功能。
主程序系统框图
图二:
主程序流程框图
软件各模块简要介绍
显示函数
显示函数主要完成数码管的动态显示,将相应的段控码送往P0口,相应的位控码送往P2口。
实现显示需要的字符信息。
图三:
显示函数流程框图
键处理和键扫描函数
键处理函数主要是将从P1口取值送往单片机进行取反处理。
键扫描函数主要是判断是否真的有键按下,即度过前沿抖动之后再判断是否有键按下,如果确实有键按下再判断是否释放,同样也要度过后沿抖动。
最终将处理完的键值作为返回值返回。
图四:
键盘扫描函数KEY流程框图图五:
数据处理函数keychuli流程框图
延时1ms函数
此函数要再显示函数中用到,由于时间比较短,就采用纯软件的方法延时。
延时1s函数以及中断服务函数
延时1s函数是作为一个子函数,当这个函数执行完后就度过了1s。
在延时1s函数中开启定时器,定时器定时50ms,只需其定时20次即可。
中断函数重装初值。
在延时函数中时刻调用键扫描函数,当相应键按下后转到相应的键功能服务程序。
图六:
1S延时函数流程框图
主函数
主函数是程序的入口,在主函数中一直调用显示函数和键扫描函数,当没有键按下时一直保证显示P点,当有键按下后,如果是开始键就开始倒计时,如果是选手按下,则违规抢答。
图七:
主函数流程图框
设计结论
使用说明
本设计的S1为系统复位键,S2为开始键,S3为停止键,S4到S7为抢答键,S8为自定义复位键。
当开始键按下后才能进行抢答,抢答时间为30秒,抢答时,对应抢答台号指示灯亮,其他按键无效,答完后,答题人按下答完键,答题结束,若答题时间超过10S蜂鸣器自动鸣叫提醒,鸣叫时间为1S,若倒计时时间到,还没按下答完键则违规,违规指示灯亮,蜂鸣器报警。
若没有按下开始就抢答则违规,违规指示灯亮,蜂鸣器报警,显示违规者台号。
无论是正常抢答结束还是抢答违规报警只有按复位键才能重新开始。
心得体会
通过本次课程设计,我更深一步地掌握了单片机的接口技术以及其汇编语言和C语言的程序设计。
在编写程序时,经常也碰到很多难题,程序的跳转等等。
尤其是编写汇编程序的时候,程序的循环,多层循环,还有就是转移语句的跳转范围,这次编程的时候就遇到几次这样的情况,于是我就在跳转语句附近写一段跳转区程序,先让其跳到跳转区,然后通过无条件长转移指令跳到要去的程序段。
结束语
将本设计的程序下载到单片机中,通过测试,基本上完成了任务书的要求,并且抢答的精确度也比较高,因为在调用键扫描函数的时候是在1s函数中,每50ms就会调用一次键扫描函数。
当然对于高精度的抢答比赛,本设计的精度还是不够的,还需要进一步的改进,甚至可以精度提高到微秒级。
此外抢答设计抢答人数为四人,所以当有更多的人抢答时,应该把独立式键盘改接成行列式键盘。
致谢
本课题在选题及进行过程中得到了王韧老师悉心的指导以及同学的热心帮助。
在这里特意感谢在课程设计中帮助过我的老师和同学。
在2011年暑假的培训时由于王老师的悉心指导才让我在完成本次课程感觉不那么困难。
王老师尽职尽责、踏实坚韧的工作精神,将使我终生受益。
再多华丽的言语也显苍白。
在此谨向王老师致以诚挚的谢意和崇高的敬意。
参考文献
[1]李广弟.单片机技术基础[M].第三版.北京:
北京航空航天大学出版社,2007
[2]马忠梅.单片机的C语言应用程序设计[M].第四版.北京航空航天大学出版社,2007
[3]李光飞.单片机课程设计实例指导[M].北京:
北京航空航天大学出版社,2004
附录A:
数码管系统原理图
附录B:
数码管系统PCB图
图B1:
PCB顶层图
图B2:
PCB底层图
附录C:
数码管系统元器件布局图
附录D:
数码管系统元器件清单
PartType
Designator
Footprint
PartType
Designator
Footprint
1K
RX2
AXIAL0.4
LED
D2
SIP-2
1K
R12
AXIAL0.4
LED
D3
SIP-2
1K
R13
AXIAL0.4
LED
D7
SIP-2
4.7K
RK
AXIAL0.4
LED
D9
SIP-2
10K
J2
SIP9
LED
D8
SIP-2
10K
J5
SIP9
LED
D5
SIP-2
12MHz
Y1
JZ
LED
D6
SIP-2
22uF
C3
SIP2
LED
D4
SIP-2
33pF
C2
SIP2
PNP
Q0
TO92A
33pF
C1
SIP2
PNP
Q3
TO92A
200
RX1
AXIAL0.4
PNP
Q2
TO92A
470
RP0
AXIAL0.4
PNP
Q1
TO92A
470
R20
AXIAL0.4
PNP
Q7
TO92A
470
R00
AXIAL0.4
PNP
Q8
TO92A
AT89S52
U1
DIP40
PNP
Q6
TO92A
BELL
LS1
AXIAL-0.3
PNP
Q4
TO92A
CON2
J1
SIP2
PNP
Q5
TO92A
CON2
JX1
SIP2
RES2
RP5
AXIAL0.4
CON2
JX2
SIP2
RES2
RP6
AXIAL0.4
CON2
JP5
SIP2
RES2
RP7
AXIAL0.4
CON8
JP3
SIP8
RES2
RP4
AXIAL0.4
CON8
JP1
SIP8
RES2
RP1
AXIAL0.4
CON8
JP4
SIP8
RES2
RP2
AXIAL0.4
CON8
JP2
SIP8
RES2
RP3
AXIAL0.4
USB
J3
USBCK
附录E:
数码管系统实物图
图E1:
抢答器启动
图E2:
抢答器正常抢答
附录F:
C语言程序清单
/********************************************************************
*项目名称:
四位数字抢答器
*设计者:
黄伟
*时间:
2011年12月31日
*项目功能:
该抢答器上电或按键复位后能自动显示系统提示符"P.",
进入准备工作状态。
主持人按下开始按钮后,抢答开始并
限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人
按下开始按钮之前有人按下抢答器,抢答违规,显示器显
示违规台号,违规指示灯亮,其它按钮不起作用;正常抢
答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无
效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没
按下,则作超时处理,超时处理时,违规指示灯亮,数码
管显示违规台号,蜂鸣器发出音响;各台数字显示的消除,
蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位
按钮
********************************************************************/
#include"reg52.h"
#include
#defineucharunsignedchar
#defineuintunsignedint
//S2=P1.0开始键//
//S3=P1.1停止键//
//S4=P1.2一号台抢答键//
//s5=p1.3二号台抢答键//
//s6=p1.4三号台抢答键//
//S7=P1.5四号台抢答键//
//S8=P1.6复位键//
charz,n,m,i,S;
bitb,c,d,e,f,g,x,y,l,h;
/********************************************************************
*共阳数码管字型码
*0,1,2,3,4,5,6,7,8,9,p.,p,灭
********************************************************************/
charcodedis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xbf,0xff};
/********************************************************************
*位控码
********************************************************************/
charcodewei_code[]={0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef};
/********************************************************************
*数字显示代码序号
********************************************************************/
chardatafind_code[8]={10,12,12,12,12,12,12,12};
/********************************************************************
*延时1ms函数
********************************************************************/
voidDelayX1ms(uintcount)
{
uintj;
while(count--!
=0)
{
for(j=0;j<80;j++);
}
}
/********************************************************************
*显示函数
********************************************************************/
voiddisp()
{
uintk,i;
for(i=0;i<8;i++)
{
P2=wei_code[i];
k=find_code[i];
P0=dis_code[k];
DelayX1ms
(1);
P2=0xff;
}
}
/********************************************************************
*函数原型:
keychuli();
*功能:
处理与键盘相连的P1口的内容,作为键值。
********************************************************************/
ucharkeychuli()
{
uchark;
k=P1;//P1口内容送K
k=~k;//取反
return(k);//返回键值
}
/********************************************************************
*函数原型:
key();
*功能:
键盘扫描函数,函数返回值即键值。
********************************************************************/
ucharkey()
{
ucharkeyzhi,keyzhii;//电子钟键盘按键键值临时存放//
keyzhi=keychuli();//调P1口处理函数//
if(keyzhi!
=0)//有键动作延时去抖动,否则函数返回//
{
disp();
disp();
keyzhi=keychuli();//再次调P1口处理函数//
if(keyzhi!
=0)//真正有键按下,取键值并暂存//
{
keyzhii=keyzhi;
while(keyzhi!
=0)//判按键是否释放,没有释放延时去抖动等待释放//
{
disp();
disp();
keyzhi=keychuli();
}
keyzhi=keyzhii;//按键释放后恢复按键键值//
}
}
return(keyzhi);//返回按键键值//
}
/********************************************************************
*P.显示函数
********************************************************************/
voiddisp1()
{
find_code[0]=10;
find_code[1]=12;
find_code[2]=12;
find_code[3]=12;
find_code[4]=12;
find_code[5]=12;
find_code[6]=12;
find_code[7]=12;
disp();
}
/********************************************************************
*灭的显示函数
*******************************************************************/
voiddisp2()
{
find_code[0]=12;
find_code[1]=12;
find_code[2]=12;
find_code[3]=12;
find_code[4]=12;
find_code[5]=12;
find_code[6]=12;
find_code[7]=12;
disp();
}
/********************************************************************
*定时器1中断服务函数
********************************************************************/
voidt1(void)interrupt3using3
{
S++;
TH1=(65536-50000)/256;//装载计数器初值//
TL1=(65536-50000)%256;
}
/********************************************************************
*定时器1定时1s函数
********************************************************************/
voidDlayX1s()
{S=0;
TH1=(65536-50000)/256;//装载计数器初值//
TL1=(65536-50000)%256;
TR1=1;//启动T/C1//
do{
disp();
z=key();
switch(z)
{
case0x02:
b=1;gotoA;break;
case0x04:
if(l==0&&y==0&&h==0)
{c=1;gotoA;}break;
case0x08:
if(x==0&&l==0&&h==0)
{d=1;gotoA;}break;
case0x10:
if(x==0&&y==0&&h==0)
{e=1;gotoA;}break;
case0x20:
if(x==0&&y==0&&l==0)
{f=1;gotoA;}break;
case0x40:
g=1;gotoA;break;
}
}while(S<20);//查询等待TF0置位//
A:
TR1=0;
}
/*****************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字抢答器课程设计 毕业设计 数字 抢答 课程设计