单片机综合实验报告 题 目: 班 级:姓 名:学 号:指导老师:时 间: 8路抢答器实验 一、实验内容:" />

单片机实验8路抢答器C语言版

时间:2025-05-14

gg336x280();0_0_0_0_0_0_893.25_1263.375-44-0-483-44.jpg" alt="单片机实验8路抢答器C语言版" />

单片机综合实验报告

题 目: 班 级:姓 名:学 号:指导老师:时 间: 8路抢答器实验

一、实验内容:

以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。本实验有Protues软件仿真。

分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。

抢答器具有锁存与显示功能。即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。

抢答器具有定时抢答功能,且一次抢答的时间由主持人设定为30秒。 当主持人启动“开始”键后,定时器进行减计时,同时绿色LED灯亮。

二、实验电路及功能说明

分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。

抢答器具有锁存与显示功能。即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统复位为止。复位后参赛队员可继续抢答。

如果定时时间已到,无人抢答,本次抢答无效,系统报警红色LED灯亮,并禁止抢答,定时显示器上显示00。

三、实验程序流程图:

主程序;

非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。主流程图如下图所示 子程序

四、实验结果分析

五、心得体会

六、程序清单

#include <reg51.h>

#define uchar unsigned char #define uint unsigned int sbit wela_a=P3^0; sbit wela1=P3^1; sbit wela2=P3^7; sbit rest=P3^5; sbit host=P3^6; sbit led1=P3^4;//绿灯 sbit led2=P3^3;//红灯 sbit led3=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 x,q,d,s,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 s,uchar ge,uchar a); void delay(uint z);

void keyscan(); void main() {

init();

display(s,ge,a); while(1) {

if(host==0) //主持人控制开关

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

flag=1;

start=1; delay(5); 延时

while(!host); 检测开关

}

}

if(rest==0) //复位 { delay(5); if(rest==0) {

q=30;

led2=1; led3=1; x=0; delay(5);

start=1; delay(5); while(!rest); }

}

if(flag==1)

{

if(start==0)//选手按下,倒计10秒开始 { led3=0; wela1=0; wela2=0; delay(1); TR0=0;

TR1=1;

display(s,ge,a); delay(1);

}

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

{

led1=0; wela1=0; wela2=0; delay(1);

TR0=1;

TR1=0;

display(s,ge,a); delay(1);

keyscan();

}

}

} }

void init()/*初始化*/ { t0=0; t1=0;

flag=0; q=30;

d=10; wela_a=0; a=0; TMOD=0x11;

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

void display(uchar s,uchar ge,uchar a)/*数码管动态扫描*/

{

wela1=1;

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

P0=table[s]; delay(5); wela_a=0; P2=table[a]; delay(5); }

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

if(key1==0)

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

P2=table[a];

start=0; TR1=1; TR0=0; delay(5); while(!key1);

}

}

if(key2==0)

{ delay(5); if(key2==0) { a=2;

P2=table[a];

start=0;

delay(5); while(!key2);

}

}

if(key3==0)

{ delay(5); if(key3==0) { a=3;

P2=table[a];

start=0; delay(5); while(!key3);

}

}

if(key4==0)

{ delay(5); if(key4==0) { a=4;

P2=table[a];

start=0; delay(5); while(!key4);

}

}

if(key5==0)

{

delay(5); if(key5==0) { a=5;

P2=table[a]; start=0; delay(5); while(!key5);

}

}

if(key6==0)

{ delay(5); if(key6==0) { a=6;

P2=table[a];

start=0; delay(5); while(!key6);

}

}

if(key7==0)

{

delay(5);

if(key7==0) { a=7;

P2=table[a];

start=0;

delay(5); while(!key7);

}

}

if(key8==0)

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

a=8;

P2=table[a];

start=0; delay(5); while(!key8);

}

} }

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

uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--);

}

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

TH0=(65536-50000)/256; TL0=(65536-50000)%256;

s=q/10; ge=q%10; t0++;

if(t0==20) { t0=0; q--; s=q/10; ge=q%10; if(q==0) {

while(1) { q=0; …… 此处隐藏:1620字,全部文档内容请下载后查看。喜欢就下载吧 ……

单片机实验8路抢答器C语言版.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219