ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:61.69KB ,
资源ID:8829811      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8829811.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完美抢答器仿真图及程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完美抢答器仿真图及程序.docx

1、完美抢答器仿真图及程序课程设计题目:基于单片机的智能八路抢答器设计一、设计项目简介1. 设计意义及目的抢答器在现实生活中应用广泛,比如在各类娱乐节目中,像中央电视台的幸运52,开心辞典,因此做一个抢答器是具有现实意义的。抢答器具有人数限制,我们选择做八路抢答器。当某人抢答时,能够显示他的号码,限定他的答题时间,别人不能抢答,主持人要有启动和清空的权利。八路抢答器在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。抢答组数

2、可以在八组以内任意使用,本系统采用AT89S52单片机作为核心,控制系统的四个模块分别为:单片机最小系统、显示模块、显示驱动模块、抢答开关模块。2. 系统功能描述设计一个具有特定功能的抢答器。该抢答器上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯

3、亮,数码管显示违规台号。蜂鸣器发出音响;各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位按钮。3. 设计达到目标我们在要求的基础上拓展了一些功能,比如增加倒数剩下5S的时候每秒响一声,最后一声比较悠长,以提示选手抢答或者回答时间将尽,还将抢答按键和答完按键做在了同一个按键上,抢答之后选手答完题目再次按下该抢答按键即是答完,使剩余时间与台号定格。总体上我们达到了:按该抢答器上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;最后5S倒计时蜂鸣器每秒响一声提示,最后一声比较悠长,提

4、示抢答时间到;主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,数码管显示违规台号,和抢答期间一样,回答期间最后5S倒计时蜂鸣器每秒响一声提示,最后一声比较悠长,提示回答时间到;答完按钮设置在抢答按键上,再次按下抢答按键即是答完,此时蜂鸣器响一声,时间定格在答完题目之后剩下的时间;各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位按钮。二、系统硬件设计1. 系统设计方案(

5、1) 利用译码芯片先根据74LS148的优先功能,确定了先抢答到的选手的编码号,再根据74LS279的锁存功能,将其信号保持下来,并实现了锁定功能,将选手的编码锁定。再者,根据74LS48的译码功能,将74LS279锁定的数字编译成二进制,将信号送到显示器中。这样就实现了抢答功能。原理框图如图1所示。 图 1 原理框图 (2)利用单片机可以利用单片机的定时/计数器进行计时,设定抢答时间和答题时间;可以利用单片机的I/O口线接按键,通过按键按下后,所接口线电平的变化来判断那位选手按下键。我选择利用单片机做抢答器。1、仿真图2、程序/* 操作非常简单* 主持人先按键,然后有30s的时间,等待选手按

6、键* 选手在30s内按键,就显示选手的号数,及30s的回答倒计时* 此时,其他选手按键无效,* 只有抢答选手按键,才停止,并显示锁定* 最后,按复位,进行新一轮抢答*/#includereg52.h#includeintrins.h#includeabsacc.h#define uchar unsigned char#define uint unsigned int #define ulong unsigned long/* 定义定时器T0和T1时间常数和方式控制字 */#define v_th0 0x3c#define v_tl0 0xb0#define v_tmod 0x11sbit P3

7、0=P30;sbit P36=P36;sbit P32=P32;sbit P31=P31;uchar led_buf8;/显示缓冲数组uchar code dispcode11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c;/段码数组uchar keyzhi; uint m,time,time2; void delay(uint a) /延时程序 while(a-); void led() /违规指示灯亮程序 P32=0; delay(2000); delay(2000); void ring() /蜂鸣器程序 P36=0; de

8、lay(10000); P36=1; void ledk() /P.显示程序 uchar dmask=0x01; /位控码初始化 uchar pos; for(pos=0;pos3;pos+) P2=dmask; /位控码输出到位控口 P0=dispcode10; /取显示段码并输出到段控口 delay(200); dmask=_crol_(dmask,1); /位控码左移一位 void led_buf_auto_flush(void) reentrant /显示缓冲区更新函数 led_buf0=m; /获得选手的号码 led_buf1=time/10; /获得秒十位 led_buf2=tim

9、e%10; /获得秒的个位 void timer0(void) interrupt 1 /定时器t0中断服务函数,选用定时器0工作方式为1 uchar j; static uchar click=0; TH0=v_th0; TL1=v_tl0; /设置初始值50ms为循环20次为1ms,12MHz +click; if(click=20) /定时器0定时中断次数 -time; click=0; if(time=20)&(j=0xff) ring(); if(time=5)&(time!=0)&(j=0xff) ring(); if(time=0)&(j=0xff) ring(); delay(

10、1000); ring(); led_buf_auto_flush(); /LED显示缓冲区时间值更新 void timer1(void) interrupt 3 /选用定时器1工作方式为1 uchar j; static uchar click=0; /定时器0定时中断次数 TH1=v_th0;TL1=v_tl0; /设置初始值50ms为循环20次为1ms,12MHz +click; if(click=20) -time2; click=0; if(time2=5)&(time2!=0)&(j!=0xff) ring(); if(time2=0)&(j!=0xff) ring(); dela

11、y(1000); ring(); TR1=0; P32=0; time=time2; led_buf_auto_flush(); /LED显示缓冲区时间值更新 void put_on_leds(void) /显示输出函数 uchar dmask=0x01; /位控码初始化 uchar pos; for(pos=0;pos4;pos+) P2=dmask; /位控码输出到位控口 P0=dispcodeled_bufpos; /取显示段码并输出到段控口 delay(100); /延时 delay(100); dmask=_crol_(dmask,1); /修改未控码 void init_sys(v

12、oid) /进行初始化并接受用户的初始化时间设置 TMOD=v_tmod; TH0=v_th0; TL0=v_tl0; TH1=v_th0; TL1=v_tl0; /设置时间初值 TR0=0; EA=1; ET0=1; TR1=0; ET1=1; /开启中断,关闭定时器 uchar keychuli() /处理与键盘相连的P1口的内容,作为键值 uchar k; k=P1; /P1口内容送K return(k); /返回键值uchar key()/键盘扫描函数,函数返回值即键值 uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放 keyzhi=keychuli(); /调

13、P1口处理函数 if(keyzhi!=0xff) /有键动作延时去抖动,否则函数返回 delay(100); /再次调P1口处理函数 if(keyzhi!=0xff) /真正有键按下,取键值并暂存 keyzhii=keyzhi; while(keyzhi!=0xff) /判按键是否释放,没有释放延时去抖动等待释放 put_on_leds(); put_on_leds(); keyzhi=keychuli(); keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值void main() /主函数调用init_sys()函数对系统初始化,调用pu

14、t_on_leds()函数 uchar j; uchar c=1; /C 1,2,3 1:无人违规合法抢答,2:有人违规,3: 允许答完 uchar keyzhiii; while(1) keyzhiii=key(); /调键盘扫描函数得到按键键码 ledk(); /调P.程序 if(P30=0) /主持人是否按下启动键 delay(100); if(P30=0) c=1; break; if(keyzhiii!=0xff) c=2; led(); break; init_sys(); /调用init_sys()函数对系统初始化 time=30; time2=30; TR0=1; /开定时器0

15、 while(1) put_on_leds(); /调显示函数 delay(100); /调延时函数 if(c=1) /判断有没有违规 keyzhiii=key(); /调键盘扫描函数得到按键键码 j=keyzhiii; if(c=3) keyzhiii=key(); /调键盘扫描函数得到按键键码 if(time=0) while(1) TR0=0; put_on_leds(); delay(100); if(c=1|c=2) switch(keyzhiii) /按键功能控制 case 0xfe: /1号选手抢答,抢答时间设定为三十秒 m=1; if(c=1) ring(); /有人正常按下,

16、蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); break; case 0xfd: /2号选手抢答 m=2; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); bre

17、ak; case 0xfb: /3号选手抢答 m=3; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); break; case 0xf7: /4号选手抢答 m=4; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1

18、=0; time=0; led_buf_auto_flush(); put_on_leds(); break; case 0xef: /5号选手抢答 m=5; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); break; case 0xdf: /6号选手抢答 m=6; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器

19、1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); break; case 0xbf: /7号选手抢答 m=7; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); break; case 0x7f: /8号选手

20、抢答 m=8; if(c=1) ring(); /有人正常按下,蜂鸣器发出声音 TR1=1; /开定时器1,关定时器0 TR0=0; c=3; keyzhiii=0xff; if(c=2) /有人违规 TR1=0; time=0; led_buf_auto_flush(); put_on_leds(); break; if(c=3) /无人违规,等待答完 TR1=1; TR0=0; if(j=keyzhiii) ring(); /有人答完,蜂鸣器发出声音 TR1=0; TR0=0; while(1) led_buf_auto_flush(); put_on_leds(); led_buf_auto_flush(); put_on_leds();

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

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