单片机实验路抢答器C语言版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机综合实验报告
题目: 8路抢答器实验
班级:
姓名:
学号:
指导老师:
时间:
一、实验内容:
以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。本实验有Protues软件仿真。
分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。
抢答器具有锁存与显示功能。即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。
抢答器具有定时抢答功能,且一次抢答的时间由主持人设定为30秒。
当主持人启动“开始”键后,定时器进行减计时,同时绿色LED灯亮。
二、实验电路及功能说明
分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。
抢答器具有锁存与显示功能。即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统复位为止。复位后参赛队员可继续抢答。
如果定时时间已到,无人抢答,本次抢答无效,系统报警红色LED灯亮,并禁止抢答,定时显示器上显示00。
三、实验程序流程图:
主程序;
非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。主流程图如下图所示
子程序
四、实验结果分析
五、心得体会
六、程序清单
#include
#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;
最新可编辑word文档