完美抢答器仿真图及程序Word版.doc

上传人:rrsccc 文档编号:9471459 上传时间:2021-02-28 格式:DOC 页数:13 大小:72.50KB
返回 下载 相关 举报
完美抢答器仿真图及程序Word版.doc_第1页
第1页 / 共13页
完美抢答器仿真图及程序Word版.doc_第2页
第2页 / 共13页
完美抢答器仿真图及程序Word版.doc_第3页
第3页 / 共13页
完美抢答器仿真图及程序Word版.doc_第4页
第4页 / 共13页
完美抢答器仿真图及程序Word版.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《完美抢答器仿真图及程序Word版.doc》由会员分享,可在线阅读,更多相关《完美抢答器仿真图及程序Word版.doc(13页珍藏版)》请在三一文库上搜索。

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

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

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

4、响一声提示,最后一声比较悠长,提示抢答时间到;传播优秀Word版文档 ,希望对您有帮助,可双击去除!主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,数码管显示违规台号,和抢答期间一样,回答期间最后5S倒计时蜂鸣器每秒响一声提示,最后一声比较悠长,提示回答时间到;答完按钮设置在抢答按键上,再次按下抢答按键即是答完,此时蜂鸣器响一声,时间定格在答完题目之后剩下的时间;各台数字显示的消除,蜂鸣器

5、音响及违规指示灯的关断,都要通过主持人按复位按钮。二、系统硬件设计1. 系统设计方案(1) 利用译码芯片先根据74LS148的优先功能,确定了先抢答到的选手的编码号,再根据74LS279的锁存功能,将其信号保持下来,并实现了锁定功能,将选手的编码锁定。再者,根据74LS48的译码功能,将74LS279锁定的数字编译成二进制,将信号送到显示器中。这样就实现了抢答功能。原理框图如图1所示。 图 1 原理框图(2)利用单片机可以利用单片机的定时/计数器进行计时,设定抢答时间和答题时间;可以利用单片机的I/O口线接按键,通过按键按下后,所接口线电平的变化来判断那位选手按下键。我选择利用单片机做抢答器。

6、传播优秀Word版文档 ,希望对您有帮助,可双击去除!1、仿真图2、 程序/*操作非常简单*主持人先按键,然后有30s的时间,等待选手按键*选手在30s内按键,就显示选手的号数,及30s的回答倒计时*此时,其他选手按键无效,*只有抢答选手按键,才停止,并显示锁定*最后,按复位,进行新一轮抢答*/#includereg52.h#includeintrins.h#includeabsacc.h#define uchar unsigned char#define uint unsigned int #define ulong unsigned long/* 定义定时器T0和T1时间常数和方式控制字

7、*/#define v_th0 0x3c#define v_tl0 0xb0#define v_tmod 0x11传播优秀Word版文档 ,希望对您有帮助,可双击去除!sbit P30=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) /延时程序whil

8、e(a-);void led()/违规指示灯亮程序P32=0;delay(2000);delay(2000); void ring() /蜂鸣器程序P36=0;delay(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) ree

9、ntrant /显示缓冲区更新函数 传播优秀Word版文档 ,希望对您有帮助,可双击去除!led_buf0=m; /获得选手的号码led_buf1=time/10; /获得秒十位led_buf2=time%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

10、=20)&(j=0xff)ring();if(time=5)&(time!=0)&(j=0xff) ring();if(time=0)&(j=0xff)ring(); delay(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

11、;click=0;if(time2=5)&(time2!=0)&(j!=0xff)传播优秀Word版文档 ,希望对您有帮助,可双击去除! ring();if(time2=0)&(j!=0xff)ring();delay(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=dispcodele

12、d_bufpos; /取显示段码并输出到段控口delay(100); /延时delay(100);dmask=_crol_(dmask,1); /修改未控码 void init_sys(void) /进行初始化并接受用户的初始化时间设置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; /开启中断,关闭定时器 传播优秀Word版文档 ,希望对您有帮助,可双击去除!uchar keychuli() /处理与键盘相连的P1口的内容,作为键值uchar k; k=P1

13、; /P1口内容送Kreturn(k); /返回键值uchar key()/键盘扫描函数,函数返回值即键值uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放keyzhi=keychuli(); /调P1口处理函数if(keyzhi!=0xff) /有键动作延时去抖动,否则函数返回delay(100); /再次调P1口处理函数if(keyzhi!=0xff) /真正有键按下,取键值并暂存keyzhii=keyzhi;while(keyzhi!=0xff) /判按键是否释放,没有释放延时去抖动等待释放put_on_leds();put_on_leds();keyzhi=key

14、chuli();keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值void main() /主函数调用init_sys()函数对系统初始化,调用put_on_leds()函数 uchar j;uchar c=1;/C 1,2,31:无人违规合法抢答,2:有人违规,3: 允许答完uchar keyzhiii;while(1)keyzhiii=key(); /调键盘扫描函数得到按键键码ledk(); /调P.程序if(P30=0) /主持人是否按下启动键delay(100);if(P30=0) c=1; 传播优秀Word版文档 ,希望对您有帮助

15、,可双击去除!break;if(keyzhiii!=0xff)c=2;led();break;init_sys(); /调用init_sys()函数对系统初始化time=30;time2=30;TR0=1; /开定时器0while(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)

16、;if(c=1|c=2)switch(keyzhiii) /按键功能控制 case 0xfe: /1号选手抢答,抢答时间设定为三十秒 m=1;if(c=1)ring(); /有人正常按下,蜂鸣器发出声音传播优秀Word版文档 ,希望对您有帮助,可双击去除!TR1=1; /开定时器1,关定时器0TR0=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;

17、/开定时器1,关定时器0TR0=0;c=3;keyzhiii=0xff; if(c=2) /有人违规TR1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0xfb: /3号选手抢答 m=3;if(c=1)ring(); /有人正常按下,蜂鸣器发出声音TR1=1; /开定时器1,关定时器0TR0=0;c=3;keyzhiii=0xff;传播优秀Word版文档 ,希望对您有帮助,可双击去除! if(c=2) /有人违规TR1=0;time=0; led_buf_auto_flush();put_on_leds();break;cas

18、e 0xf7: /4号选手抢答m=4;if(c=1)ring(); /有人正常按下,蜂鸣器发出声音TR1=1; /开定时器1,关定时器0TR0=0;c=3;keyzhiii=0xff; if(c=2) /有人违规TR1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0xef: /5号选手抢答 m=5;if(c=1)ring(); /有人正常按下,蜂鸣器发出声音TR1=1; /开定时器1,关定时器0TR0=0;c=3;keyzhiii=0xff; if(c=2) /有人违规TR1=0;传播优秀Word版文档 ,希望对您有帮助,可双

19、击去除!time=0; led_buf_auto_flush();put_on_leds();break;case 0xdf: /6号选手抢答 m=6;if(c=1)ring(); /有人正常按下,蜂鸣器发出声音TR1=1; /开定时器1,关定时器0TR0=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,关定时器0TR0=0;c=3;

20、keyzhiii=0xff; if(c=2) /有人违规TR1=0;time=0; led_buf_auto_flush();put_on_leds();传播优秀Word版文档 ,希望对您有帮助,可双击去除!break;case 0x7f: /8号选手抢答 m=8;if(c=1)ring(); /有人正常按下,蜂鸣器发出声音TR1=1; /开定时器1,关定时器0TR0=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();

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1