8路抢答器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

珞珈学院单片机实验之

八路抢答器

年级:2009级

专业:通信工程

设计者:郭吕超

日期:2011.12.18

目录

一.实验安排 (3)

二.八路抢答器仿真图 (4)

三.八路抢答器设计原理 (5)

四.八路抢答器C语言程序 (6)

一.实验安排

1.设计一个八路抢答器。

2.必须有主持人按钮,当主持人按下按钮,开始30秒倒计时,这

30秒内即是八位选手抢答的时长,若30秒内无人抢答,则视为所有选手弃权。

3.倘若主持人按下开始的30秒内有人抢答,定时到10秒,同时

在一屏幕上显示该抢答选手号码,当主持人按下开始答题键时,则倒计时从10秒开始,同时选手号码清零。若10秒内无法回答,则该选手视为题目回答错误。

4.实验装置有绿.黄两盏灯;其中绿灯在主持人按钮按下时被点亮,

在倒计时30秒内,当有选手抢答时,绿灯被熄灭,。若30秒内无选手抢答,倒计时到0时绿灯还是熄灭;若开始答题后10秒钟倒计时黄灯被点亮,到零时黄灯熄灭。

二.八路抢答器仿真图

三.实验设计原理

1.准备工具:A T89C51单片机,两片74HC573锁存器芯片,一块

含两位选的共阴数码管,一块单个的共阴数码管,上拉排阻,黄.

绿二极管各一支,插针,焊接导线,焊锡,电烙铁,独立按键若干。

2.完成实验硬件部分后,软件部分用到了单片机定时器0;两位选

的共阴数码管来显示倒计时秒钟。

3.单个的数码管用来显示选手号码1~8,由8个选手按键决定选手

号码的显示。

4.初始化中选手号码无显示,倒计时秒钟无显示,定时器0和关中

断。

5.主持人按下开始键,定时器0开中断,进行30秒倒计时,当中

选手按键按下,定时器0关中断,当答题键按下时,定时器开中断,进行10秒倒计时,选手号码显示在单个数码管上。

6倒计时中按下清零键,即数码管全部显示0。

四.八路抢答器C语言程序设计

/*珞珈单片机课程《八路抢答器》c语言程序设计..........2011.12.18*/ #include

#define uchar unsigned char

#define uint unsigned int

sbit wela_hao=P3^0;//显示选手的数码管位选

sbit wela1=P3^1;

sbit wela2=P3^7;

sbit qing=P3^5;

sbit host=P3^6;

sbit answer=P3^4;

sbit led1=P3^3;//绿灯

sbit led2=P3^2;//黄灯

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit key4=P1^3;

sbit key5=P1^4;

sbit key6=P1^5;

sbit key7=P1^6;

sbit key8=P1^7;

uchar hao,shu,shi,ge,t0,t1,start,flag;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void init();/*初始函数申明*/

void display(uchar shi,uchar ge,uchar hao);

void delay(uint z);

void keyscan();

void main()

{

init();

display(shi,ge,hao);

while(1)

{

if(host==0) //主持人

{

delay(5);

if(host==0)

{

shu=30;

hao=0;

flag=1;

led1=0;

led2=1;

start=1;

delay(5);

while(!host);

}

}

if(qing==0) //清零

{

delay(5);

if(qing==0)

{

while(1)

{

shu=0;

shi=shu/10;

ge=shu%10;

TR0=0;

delay(5);

hao=0;

led1=1;

led2=0;

wela1=0;

wela2=0;

wela_hao=0;

delay(1);

display(shi,ge,hao);

if(host==0)break;

}

delay(5);

while(!qing);

}

}

if(answer==0)//开始答题

{

delay(5);

if(answer==0)

{

flag=1;

shu=10;

start=1;

led1=1;

led2=0;

hao=0;

}

delay(5);

while(!answer);

}

if(flag==1)

{

if(start==0)//选手按下,定时10秒

{

shu=10;

shi=shu/10;

ge=shu%10;

led2=1;

led1=1;

wela1=0;

wela2=0;

wela_hao=0;

delay(1);

TR0=0;

display(shi,ge,hao);

delay(1);

}

if(start==1)//主持人按下,倒计时30秒

{

相关文档
最新文档