抢答器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于八路抢答器的设计专业班级:电信10102
设计者:
指导老师:
设计时间:2012-11-19~2012-11-30
一、设计目的:设计一个抢答器,学会使用单片机。 二、功能要求:
设计一个可控制系统的清零和抢答的开始及各种时间的调
节控制的智力竞赛抢答器,并且可同时供8名选手或8个代表队参加比赛。
三、方案论证:
系统框图设计如图1所示:
图1
四、系统硬件设计:
系统硬件设计如图2所示。
译码显示 提示电路
译码电路
锁存功能
时序控制 定时电路
优先编码 选手抢答按键 主持人控制 秒脉冲产生
23456781
2
3
4
5
6
7
8
s2
s1
1a1a2a3a4
a 1a 2a 3a 4
s 2
s1
LS1
SOUNDER
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD
17
P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C52
2345678
1
RP1
RESPACK-7
JP1
BUTTON
JP2
BUTTON
JP3
BUTTON
JP4
BUTTON
JP5
BUTTON
JP6
BUTTON
JP7
BUTTON
JP8
BUTTON
JP10答题计时键
JP11
开始抢答时间调整键
JP12
答题计时时间调整键
C3
10uF
R5
10k
R7
220
C1
30pF
C2
30pF
X1
12MHz
D1
LED-BIRY
R1
0R1
20S
30S
开始
图2 系统硬件设计 五、软件设计:
(1)程序流程图如图3所示:
图3 程序流程图(2)程序:
#include
#define uchar unsigned char
#define uint unsigned int
char s;
///uchar p2;
//char p0;
uchar num=0;
char time=20; //抢答时间
char datitime=30; //答题限时时间
uint tt,t1; //T0,T1定时器定一秒
bit flag=0,s_flag=1,b_flag,fall_flag; //标志位
bit K_startcountflag=1,K_timecountflag=1; //时间调整标志位sbit K0=P3^0;
sbit beep=P3^7; //蜂鸣器
sbit rled=P3^1; //指示灯
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit K7=P1^6;
sbit K8=P1^7;
sbit K_Time=P3^2; //答题计时键
sbit K_startcount=P3^3; //开始抢答时间调整键sbit K_timecount=P3^4; //答题计时时间调整键
void delay(uchar ms)
{
uchar y;
for(;ms>0;ms--)
for(y=120;y>0;y--);
}
uchar code tabledu[]={
0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};//共阳数码管编码
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; void T0_Init(void)
{
TMOD=0X01; //定时器的工作方式TH0=(65536-2000)/256; //定时20毫秒
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EA=1;
P0=0;
}
void Key_Scan(void) //开始键扫描
{
if(K0==0)
{
delay(10);
if(K0==0)
{
while(!K0);
TR0=1;
s=time;
tt=0;
flag=1;