资源目录
压缩包内文档预览:
编号:30367074
类型:共享资源
大小:67.56MB
格式:ZIP
上传时间:2019-12-11
上传人:遗****
认证信息
个人认证
刘**(实名认证)
湖北
IP属地:湖北
20
积分
- 关 键 词:
-
基于
51
单片机
八路
抢答
设计
- 资源描述:
-
-基于51单片机的八路抢答器设计,基于,51,单片机,八路,抢答,设计
- 内容简介:
-
/包含头文件#include/宏定义#define uchar unsigned char#define uint unsigned intsbit start=P30; /主持人按键开始sbit reset=P31;/复位sbit add1=P32; /抢答时间调整,加1sbit dec1=P33; /抢答时间调整,减1sbit add2=P34; /答题时间调整,加1sbit dec2=P35;/答题时间调整,减1sbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit k5=P14;sbit k6=P15; sbit k7=P16; sbit k8=P17; /选手按键 sbit beep=P36; /蜂鸣器bit qd;/抢答标志位,=1时开启抢答bit dt;/答题标志位,=1时开启答题bit disp_qd_dt;/显示抢答还是答题时间标志位,=0时是显示抢答时间,=1时是显示答题时间/uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77; /0-9代码unsigned char code tab=0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0xD7, 0xCE,0xC7,0xDC; /数字0-9的编码 和H q d uchar shiwei,gewei,xuanshou,count,p,second;uchar qd_time=30,dt_time=60;/抢答时间,默认30S,答题时间,默认60Suint t,m,n,a,a1,a2,a3,a4,a5,a6,a7,a8;void Timer()TMOD=0x01;/定义工作方式TH0=0x3C; /初值15536,计数50000次,每次1uS,总计50msTL0=0xB0;IE=0x82; /这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时TR0=0; /开启定时器定时void tim(void) interrupt 1 using 1 /为定时中断T0TH0=0x3C; /重新赋值TL0=0xB0;TR0=1;count+; /计数一次时50ms,20次为1sif(second=1)second-; /秒减1elseTR0=0;if(second0;x-)for(y=110;y0;y-);/约1msvoid display (void) /显示函数unsigned char shiwei,gewei,xuanshou;shiwei=tabsecond/10; /将秒数据拆开成两个一位数gewei=tabsecond%10;xuanshou=tabp;P0=gewei;/送入P0口的gewei数据P2=0x7F;/个位位选delay(5);/延时5msP2=0xFF;/关闭位选,防止出现鬼影 下同P0=shiwei;/显示十位P2=0xBF; /打开显示时间十位的位选delay(5);P2=0xFF;P0=0x80;/显示横线P2=0xDF; delay(5);P2=0xFF;P0=xuanshou;P2=0xEF; /选手位选delay(5);P2=0xFF;void keyscan(void) /按键扫描函数if(add1=0) /判断抢答时间加键是否按下display(); /延时去抖if(add1=0) /再次判断按键是否按下p=11; /显示q 代表抢答时间设置disp_qd_dt=0;/显示抢答时间qd_time+;/抢答时间加if(qd_time=99)/最大值可以加到99qd_time=99;second=qd_time;/将抢答时间赋值秒数据,用于计时dodisplay();/调用显示函数while(add1=0);/按键释放if(dec1=0)/键按键是否按下display();/用显示函数代替延时去抖,防止按下按键时屏幕的闪烁if(dec1=0)/再次判断按键是否按下p=11;/显示qdisp_qd_dt=0;/标志位置0qd_time-;/抢答时间减if(qd_time=99)dt_time=99;second=dt_time;dodisplay();while(add2=0);if(dec2=0)display();if(dec2=0)p=12;disp_qd_dt=1;dt_time-;if(dt_time=1)dt_time=1;second=dt_time;dodisplay();while(dec2=0);void init() /初始化函数 t=0;beep=1;p=10;/选手号初始为显示H,表示等待second=qd_time;/将抢答时间赋值秒void main()/主函数uchar i; init();/调用初始化函数Timer();/定时器设置while(1)/循环if(qd=0)&(dt=0)keyscan();/扫描按键display();/显示函数if(start=0) /主持人按下开始键if(qd=0)&(dt=0)/在非抢答,非答题状态下p=10;/显示Hdisp_qd_dt=0;/标志位置0second=qd_time;/抢答时间赋值秒qd=1;/开始抢答beep=0;/蜂鸣器长响一声for(i=0;i20;i+)/此处用于延时display();beep=1;/关闭蜂鸣器TR0=TR0;/定时器开关取反(就是一个开关,按一个就计时,再按一下就停止)dodisplay();/调用显示函数while(!start);/等待释放按键if(reset=0)/复位按键按下时display();/显示函数用做延时去抖if(reset=0)/再次判断按键是否按下disp_qd_dt=0;/标志位置0second=qd_time;t=0;p=10;/显示HTR0=0;/停止计时beep=1;qd=0;dt=0;/停止抢答和答题计时dodisplay();while(!reset);if(qd=1)/开始抢答后,才检测选手按键的状态 if(k1=0) /1号选手按下时display();/显示函数用作延时去抖if(k1=0);/再次判断按键是否按下do display(); while(!k1);/按键释放t=1;/抢答序号置1qd=0;/停止抢答dt=1;/准备答题else if(k2=0) /其他选手按键扫描参考1号选手按键注释display();if(k2=0);do display(); while(!k2);t=2;qd=0;dt=1;else if(k3=0) display();if(k3=0);do display(); while(!k2);t=3;qd=0;dt=1;else if(k4=0) display();if(k4=0);do display(); while(!k2);t=4;qd=0;dt=1;else if(k5=0) display();if(k5=0);do display(); while(!k2);t=5;qd=0;dt=1;else if(k6=0) display();if(k6=0);do display(); while(!k2);t=6;qd=0;dt=1;else if(k7=0) display();if(k7=0);do display(); while(!k2);t=7;qd=0;dt=1;else if(k8=0) display();if(k8=0);do display(); while(!k2);t=8;qd=0;dt=1;if(t)/有选手按下按键时,t的值不为0,进入此if语句switch(t)/判断t的值case 1:/t的值为1时,就是选手1按下按键TR0=0;/停止计时p=1;/数码管显示选手号码second=dt_time; /答题时间赋值秒beep=0; /蜂鸣器响for(i=0;i20;i+) /此处用于延时display();beep=1; /蜂鸣器延时后关闭qd=0;break; /qd置0,抢答环节结束,跳出switch语句case 2: /t为2时就是2号选手按下按键TR0=0; /以下参考1号选手注释/|即可p=2;second=dt_time;beep=0;for(i=0;i20;i+)display();beep=1;qd=0;break;case 3:TR0=0;p=3;second=dt_time;beep=0;for(i=0;i20;i+)display();beep=1;qd=0;break;case 4:TR0=0;p=4;second=dt_time;beep=0;for(i=0;i20;i+)display();beep=1;qd=0;break;case 5:TR0=0;p=5;second=dt_time;beep=0;for(i=0;i20;i+)display();beep=1;qd=0;break;case 6:TR0=0;p=6;second=dt_time;beep=0;for(i=0;i20;i+)display();beep=1;qd=0;break;case 7:TR0=0;p=7;second=dt_time;beep=0;for(i=0;i20;i+)display();beep=1;qd=0;break;case 8:TR0=0;p=8;second=dt_time;beep=0;for(i=0;i2
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。