您好,欢迎来到九壹网。
搜索
您的当前位置:首页五路抢答器,

五路抢答器,

来源:九壹网


实习(设计)报告

姓 名 班 级 学 号

实习(设计)科目 基于51单片机的五路抢答器 实习(设计)地点 实习(设计)时间

电气工程及自动化学院

School of Electrical Engineering & Automation

一. 实验安排

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

2. 必须有主持人按钮,当主持人按下按钮,开始30秒倒计时,这30秒内即是八位选手抢答的时长,若30秒内无人抢答,则视为所有选手弃权。

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

/*《五路抢答器》c语言程序设计*/ #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 key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit key5=P1^4;

uchar hao,shu,shi,ge,t0,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(); while(1) {

if(host==0) //主持人 { delay(5); if(host==0) {

shu=30;

hao=0; flag=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; 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; hao=0; }

delay(5);

while(!answer); }

if(flag==1) {

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

{

shu=10; shi=shu/10; ge=shu%10; wela1=0; wela2=0; wela_hao=0; delay(1); TR0=0; display(shi,ge,hao); delay(1); } //主持人按下,倒计时30秒{ wela1=1; wela2=1; wela_hao=1; delay(1); TR0=1; display(shi,ge,hao); delay(1); keyscan(); }

void init() /*初始化*/ {

t0=0; t1=0;

shi=shu/10; ge=shu%10; flag=0; shu=30; wela_hao=1; hao=0;

TMOD=0x11;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=0; }

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

wela1=1; wela2=0; P0=table[ge]; delay(5);

wela2=1; wela1=0; P0=table[shi]; delay(5);

wela_hao=0; P2=table[hao]; delay(5); }

void keyscan() /*按键扫描函数*/ {

if(key1==0) { delay(5); if(key1==0)

/*数码管动态扫描*/ { hao=1; P2=table[hao]; start=0; delay(5); while(!key1); } }

if(key2==0) { delay(5); if(key2==0) { hao=2; P2=table[hao]; start=0; delay(5); while(!key2); } }

if(key3==0) { delay(5); if(key3==0) { hao=3; P2=table[hao]; start=0; delay(5); while(!key3); } }

if(key4==0) { delay(5); if(key4==0) { hao=4; P2=table[hao]; start=0;

delay(5); while(!key4); } }

if(key5==0) { delay(5); if(key5==0) { hao=5; P2=table[hao]; start=0; delay(5); while(!key5); } } }

void delay(uint z) /*延时函数*/ {

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--); }

void time0() interrupt 1 /*定时器0*/ {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; shi=shu/10; ge=shu%10; t0++;

if(t0==20) {

t0=0; shu--;

shi=shu/10; ge=shu%10; if(shu==0) {

while(1) {

shu=0; hao=0; wela1=0; wela2=0; wela_hao=0; delay(1);

display(shi,ge,hao); if(host==0)break; } }

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务