单片机抢答器.docx

上传人:b****8 文档编号:23794858 上传时间:2023-05-20 格式:DOCX 页数:17 大小:86.78KB
下载 相关 举报
单片机抢答器.docx_第1页
第1页 / 共17页
单片机抢答器.docx_第2页
第2页 / 共17页
单片机抢答器.docx_第3页
第3页 / 共17页
单片机抢答器.docx_第4页
第4页 / 共17页
单片机抢答器.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机抢答器.docx

《单片机抢答器.docx》由会员分享,可在线阅读,更多相关《单片机抢答器.docx(17页珍藏版)》请在冰豆网上搜索。

单片机抢答器.docx

单片机抢答器

 

单片机综合实验报告

 

题目:

8位竞赛抢答器的设计

班级:

0309410

姓名:

许高杨

学号:

030941020

指导老师:

高林

时间:

2011.12.28

 

实验内容:

以单片机为核心,设计一个8位竞赛抢答器:

同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。

设置一个系统清除和抢答控制开关S,开关由主持人控制。

抢答器具有锁存与显示功能。

即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。

抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。

当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。

参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。

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

通过键盘改变抢答的时间,原理与闹钟时间的设定相同,将定时时间的变量置为全局变量后,通过键盘扫描程序使每按下一次按键,时间加1(超过30时置0)。

同时单片机不断进行按键扫描,当参赛选手的按键按下时,用于产生时钟信号的定时计数器停止计数,同时将选手编号(按键号)和抢答时间分别显示在LED上。

2、实验电路及功能说明

主持人按“抢答开始”键,立刻进入抢答倒计时(预设20S抢答时间),如有选手抢答,会有提示,并会显示其号数,不进行抢答查询,所以第一个按抢答的选手有效。

倒数时间到小于5S会每秒响一下提示音。

如倒计时期间,主持人想停止倒计时可以随时按“停止”按键,系统会自动进入准备状态,等待主持人按“抢答开始”进入下次抢答计时。

如果主持人未按“抢答开始”键,则无法按抢答按键。

 

三、实验程序流程图:

 

3、实验结果分析

如图表示5号选手获得抢答机会,剩余18秒抢答时间。

4、心得体会

我觉得通过这次的设计,不仅学会了很多原来没有掌握的理论教科书上的知识,更多是学到了一些理论书上没有的,如设计各种功能电路的方法、修改电路等。

在平时的学习中基本不会遇到错误的电路,但现在是自己设计,还要自己发现错误,再自己修改,所以这需要很好的知识基础。

很高兴有这样一个锻炼、提高自己的机会。

六、程序清单

#include

#defineuintunsignedint

#defineucharunsignedchar

/*-----------------------------------------------------------

共阴极数码管编码表0-f显示

------------------------------------------------------------*/

unsignedcharcodetable[]={0x40,0x79,0x24,0x30,0x19,

0x12,0x02,0x78,0x00,0x10,0x08,0x03,

0x46,0x21,0x06,0x0e};

/*-----------------------------------------------------------

变量定义

------------------------------------------------------------*/

sbitstart=P3^6;

sbitstop=P3^5;

sbitreset=P3^7;

sbitkey1=P1^0;

sbitkey2=P1^1;

sbitkey3=P1^2;

sbitkey4=P1^3;

sbitkey5=P1^4;

sbitkey6=P1^5;

sbitkey7=P1^6;

sbitkey8=P1^7;

sbitbuzzer=P3^4;

bitstart_flag=0;

bitstop_flag=0;

bitkey1_flag=0;

bitkey2_flag=0;

bitkey3_flag=0;

bitkey4_flag=0;

bitkey5_flag=0;

bitkey6_flag=0;

bitkey7_flag=0;

bitkey8_flag=0;

bitreset_flag=0;

bitaction=0;

ucharsecond=20;

uchartimer0_count=0;

ucharnumber=0;

ucharnumber_display=0;

/*-----------------------------------------------------------

延时函数

------------------------------------------------------------*/

voiddelay(uintz)

{

uintx,y;

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

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

}

/*-----------------------------------------------------------

数码管显示驱动函数

------------------------------------------------------------*/

voiddisplay(ucharnumber,ucharsecond)

{

ucharsecond_first,second_second;

second_first=second/10;

second_second=second%10;

P2=0xfd;

P0=table[number];

delay

(2);

P2=0xf7;

P0=0x3f;

delay

(2);

P2=0xfb;

P0=table[second_first];

delay

(2);

P2=0xfe;

P0=table[second_second];

delay

(2);

}

/*-----------------------------------------------------------

开始键扫描函数

------------------------------------------------------------*/

voidstart_keyscan()

{

if(start==0)

{

delay(8);

if((start==0)&&(!

start_flag))

{

start_flag=1;

action=1;

TR0=1;

}

}

else

{

start_flag=0;

}

}

/*-----------------------------------------------------------

八位抢答键扫描函数

------------------------------------------------------------*/

ucharkey_scan8()

{

if(key1==0)

{

delay(8);

if((key1==0)&&(!

key1_flag))

{

key1_flag=1;

number=1;

number_display=number;

}

}

else

{

key1_flag=0;

number=0;

}

if(key2==0)

{

delay(8);

if((key2==0)&&(!

key2_flag))

{

key2_flag=1;

number=2;

number_display=number;

}

}

else

{

key2_flag=0;

number=0;

}

if(key3==0)

{

delay(8);

if((key3==0)&&(!

key3_flag))

{

key3_flag=1;

number=3;

number_display=number;

}

}

else

{

key3_flag=0;

number=0;

}

if(key4==0)

{

delay(8);

if((key4==0)&&(!

key4_flag))

{

key4_flag=1;

number=4;

number_display=number;

}

}

else

{

key4_flag=0;

number=0;

}

if(key5==0)

{

delay(8);

if((key5==0)&&(!

key5_flag))

{

key5_flag=1;

number=5;

number_display=number;

}

}

else

{

key5_flag=0;

number=0;

}

if(key6==0)

{

delay(8);

if((key6==0)&&(!

key6_flag))

{

key6_flag=1;

number=6;

number_display=number;

}

}

else

{

key6_flag=0;

number=0;

}

if(key7==0)

{

delay(8);

if((key7==0)&&(!

key7_flag))

{

key7_flag=1;

number=7;

number_display=number;

}

}

else

{

key7_flag=0;

number=0;

}

if(key8==0)

{

delay(8);

if((key8==0)&&(!

key8_flag))

{

key8_flag=1;

number=8;

number_display=number;

}

}

else

{

key8_flag=0;

number=0;

}

if(number_display!

=0)

{

return1;

}

else

{

return0;

}

}

/*-----------------------------------------------------------

复位键扫描函数

------------------------------------------------------------*/

voidreset_keyscan()

{

if(reset==0)

{

delay(8);

if((reset==0)&&(!

reset_flag))

{

reset_flag=1;

number_display=0;

second=20;

}

}

else

{

reset_flag=0;

}

}

voidfengming()//蜂鸣函数,脉宽t=1ms周期T=2ms频率f=0.5khz实际发现延时1ms的时候效果最好

{

//延时1ms

buzzer=0;//给P3.7口送高电平

delay(100);//延时1ms

buzzer=1;

delay(100);

}

/*-----------------------------------------------------------

主函数

------------------------------------------------------------*/

voidmain()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=0;

while

(1)

{

start_keyscan();

reset_keyscan();

while(action==1)

{if(second<=5&&second>0)

fengming();

while(!

key_scan8()&&!

stop==0)

{

display(number_display,second);

if(second==0)

{

second=20;

break;

}

}

TR0=0;

display(number_display,second);

action=0;

break;

}

display(number_display,second);

}

}

/*-----------------------------------------------------------

中断服务函数

------------------------------------------------------------*/

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

timer0_count++;

if(timer0_count==20)

{

timer0_count=0;

second--;

if(second<=5&&second>0)

fengming();

if(second==0)

{

TR0=0;

number_display=0;

action=0;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1