首先,裁判在右方按下开始按钮,蜂鸣器响起,抢答开始,初始时间为20s,若1-8位选手按下按钮,即抢答成功,由显示屏显示该选手号码,如果超过时间(20s)没人认抢答,则时间重置为20s,并此题作废,答题结束后,按下重置按钮,这时时间重置,下次抢答开始。
创新功能(*)在没有按下开始键时,按下修改时间按钮,则时间会减少1s,由于默认时间为20s,所以这个功能可以实现20s内时间的调整
仿真原理图如下
单片机源程序如下:
#include #define uchar unsigned char #define uint unsigned int #define max 20 uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit d1=P2^4; sbit d2=P2^5; sbit x1=P2^6; sbit x2=P2^7; sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4; sbit k6=P1^5; sbit k7=P1^6; sbit k8=P1^7; sbit zk1=P2^0; sbit zk2=P2^1; sbit buz=P2^2; uchar d_num,cnt; uchar x_flag; void jianpan(); void init(void) { TMOD=0X01; TL0=0XB0; TH0=0X3C; // TR0=1; ET0=1; EA=1; d_num=max; } void delay(uint xms) { uint x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); } void display() { d1=0; //位选端; P0=tab[d_num/10];//显示倒计时 delay(5); d1=1; d2=0; P0=tab[d_num%10]; delay(5); d2=1; x1=0; //位选端 P0=tab[x_flag/10];//显示选手号 delay(5); x1=1; x2=0; P0=tab[x_flag%10]; delay(5); x2=1; } void main() { init(); while(1) { jianpan(); display(); } } void timer0(void) interrupt 1 { TL0=0XB0; //重装初值 TH0=0X3C; cnt++; if(cnt==20)//1 秒时间到 { cnt=0;//计数清零 d_num--; if(d_num==0) { d_num=max; TR0=0; //关闭所有操作 } buz=0; delay(20); buz=1; } } void jianpan() { if(zk1==0&&x_flag==0) { delay(5); x_flag=0; TR0=1; } if(zk2==0&&TR0==0) { delay(5); if(zk2==0&&TR0==0) { if(x_flag==0) { d_num--; //设置倒计时 buz=0; delay(20); buz=1; } if(d_num==5) d_num=max; if(x_flag!=0) //选手显示清零 { x_flag=0; d_num=max; TR0=0; buz=0; delay(20); buz=1; } while(!zk2) display(); } } if(k1==0&&TR0==1) { delay(5); if(k1==0&&TR0==1) { x_flag=1; TR0=0; } } if(k2==0&&TR0==1) { delay(5); if(k2==0&&TR0==1) {x_flag=2;TR0=0;} } if(k3==0&&TR0==1) { delay(5); if(k3==0&&TR0==1) {x_flag=3;TR0=0;} while(!k3) display(); } if(k4==0&&TR0==1) { delay(5); if(k4==0&&TR0==1) {x_flag=4;TR0=0;} } if(k5==0&&TR0==1) { delay(5); if(k5==0&&TR0==1)
上一篇:单片机控制无刷电机初步调试成果和学习经历
下一篇:单片机8位LED数码管的静态显示课程设计说明书与仿真
推荐阅读最新更新时间:2024-11-10 19:47