抢答器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档