八路抢答器源程序

上传人:lil****ar 文档编号:281877257 上传时间:2022-04-25 格式:DOC 页数:5 大小:20.50KB
返回 下载 相关 举报
八路抢答器源程序_第1页
第1页 / 共5页
八路抢答器源程序_第2页
第2页 / 共5页
八路抢答器源程序_第3页
第3页 / 共5页
八路抢答器源程序_第4页
第4页 / 共5页
八路抢答器源程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《八路抢答器源程序》由会员分享,可在线阅读,更多相关《八路抢答器源程序(5页珍藏版)》请在金锄头文库上搜索。

1、基于单片机的八路抢答器源程序 #include #include /8255A各个端口的绝对地址 #define PCOM XBYTE0x0b00 #define PA XBYTE0x0800 #define PB XBYTE0x0900 #define PC XBYTE0x0A00 /计时器初值(初设20秒) #define T1 0x02 /十位为2 #define T2 0x10 /个位为0 #define SA 5 /答对一道题的加分值 #define SD 3 /答错一道题的减分值 sbit beep=P16; /定义全局变量 int count,start_flag; unsign

2、ed char t1,t2; unsigned char number,Num; int score_temp1,score_temp2,Score8; void delay(int x) int i,j; for(i=x;i0;i-) for(j=50;j0;j-); void sounder(int n,int m) /n,m分别控制其发声与不发声的时间 int i; for(i=0;i=5;i+) beep=1; /p1.6口高电平,蜂鸣器发声delay(n); beep=0; /p1.6口低电平,蜂鸣器不发声 delay(m); /计时器显示 void LED_TIME() t2=t2

3、-0x01; if(t2=0x0F) /剩余10s报警 t2=0x19; t1=t1-0x01; if(t1=0x00) sounder(400,250); else if(t1=0xFF) /倒计时完毕报警 TR0=0; EX0=0; /封锁抢答通道 EX1=1; /开放控制台中断 sounder(600,300); return; P1=t1; P1=t2; main() int i,j; unsigned char t0,s0; start_flag=0; /主持人开始按钮功能标志(0为开始计时,1为继续计时) Score8=0;/选手分数初始化 /控制台显示器初始化 t0=0x00;

4、for(i=0;i3;i+) P1=t0; t0=t0+0x10; /计分板初始化 PCOM=0x83; /8255A控制字(A口输出,B口、C口低四位输入) s0=0x00; for(j=0;j16;j+) PA=s0; s0=s0+0x10; /中断系统初始化EX1=1;IT0=1;IT1=1;EA=1;while(1); /等待中断 /主持人控制台按钮中断 void host_switch() interrupt 2 delay(100); switch(PC) case 0x0E : /(开始/继续)按钮(H1) if(start_flag=0) count=20; /12MHz主频,

5、每个机器周期为1us,采用T0模式1 TMOD=0x01;/16位定时器,最大定时65536us,设定50000us*20=1s TH0=0x3C; /TH0=(65536-50000)/256; TL0=(65536-50000)%256 TL0=0xB0; ET0=1; EX1=0; EX0=1; t1=T1; /计时器十位数字初值 t2=T2; /计时器各位数字初值 P1=t1; P1=t2; TR0=1; /启动定时器 else if(start_flag=1) EX1=0; EX0=1; TR0=1; break; case 0x0B : /复位按钮(H2)TR0=0; /停止T0定

6、时器ET0=0;t1=T1; /计时器初值重置t2=T2;P1=0x00; /计时器置零P1=0x10;P1=0x20; /抢答选手编号显示置零 EX0=0; /封锁抢答通道(禁止INT0中断)start_flag=0;/按钮功能标志置零(开始状态)number=0x00; /清除锁定的选手编号 break; case 0x0D : /加分按钮(H3) Scorenumber-1+=SA;score_temp1=2*number-2;score_temp1=(score_temp14)|(Scorenumber-1/10);PA=score_temp1; /显示十位score_temp2=2*

7、number-1;score_temp2=(score_temp24)|(Scorenumber-1%10);PA=score_temp2; /显示个位break;case 0x07 : /减分按钮(H4) Scorenumber-1-=SD;score_temp1=2*number-2;score_temp1=(score_temp14)|(Scorenumber-1/10);PA=score_temp1; /显示十位score_temp2=2*number-1;score_temp2=(score_temp24)|(Scorenumber-1%10);PA=score_temp2; /显示

8、个位break; /定时器T0中断 void Time0_int() interrupt 1 if(count=0) /计时满1秒,显示 LED_TIME(); count=21; TH0=0x3C;/重置定时初值 TL0=0xB0; count=count-1; /选手抢答中断 void Member_switch() interrupt 0 delay(100); switch(PB) case 0xFE:number=0x01;break; /SW1 case 0xFD:number=0x02;break; /SW2 case 0xFB:number=0x03;break; /SW3 case 0xF7:number=0x04;break; /SW4 case 0xEF:number=0x05;break; /SW5 case 0xDF:number=0x06;break; /SW6 case 0xBF:number=0x07;break; /SW7 case 0x7F:number=0x08;break; /SW8 Num=number|0x20; /显示选手编号 P1=Num; TR0=0; /停止计时 EX0=0; /封锁抢答通道 EX1=1; /开放支持人控制台中断 start_flag=1; /按钮功能标志置位(继续状态)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号