|
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2; //黃燈
sbit P23=P2^3; //紅燈
sbit P26=P2^6;
sbit P27=P2^7;
sbit key1=P3^2; //倒計(jì)時(shí)開關(guān)
sbit key2=P3^3; //搶答器開關(guān)
sbit key3=P3^5; //復(fù)位開關(guān)
uchar s,n,k,flag;
void delay5ms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--);
}
void delay10ms()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main()
{
P22=0;
P23=0;
P0=0xff;
P1=0xff;
TMOD=0x11; //T0用中斷定時(shí)1s,T1用定時(shí)器定時(shí)1s,均為方式一
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x8d; //1000 1101
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR0=1;
TR1=1;
flag=0;
while(1)
{
if(flag==1) //倒計(jì)時(shí)60s開始,中斷法定時(shí)
{
s=60;
k=20;
P20=1;
P21=0;
if(s>=10)
P0=zixingma[s/10];
delay5ms();
P0=0xff;
P20=0;
P21=1;
P0=zixingma[s%10];
delay5ms();
while(s==0) //倒計(jì)時(shí)結(jié)束,紅燈亮
{
P0=0xff;
P23=1;
}
}
if(flag==2) //搶答開始,定時(shí)器T0定時(shí)30s倒計(jì)時(shí)
{
P22=1; //答題開始,黃燈亮
P0=0xff;
k=20;
n=20;
while(TF1==0);
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TF1=0;
k--;
if(k==0)
{
k=20;
P1=0xff;
P26=1;
P27=0;
if(n>=10)
{
P1=zixingma[n/10];
delay5ms();
}
P1=0xff;
P26=0;
P27=1;
P1=zixingma[n%10];
delay5ms();
while(n==0) //答題時(shí)間到,黃燈滅,紅燈亮
{
P22=0;
P1=0xff;
P23=1;
}
}
}
if(flag==3) //復(fù)位
{
P2=0;
P0=0xff;
P1=0xff;
s=60;
n=30;
}
}
}
void t_0() interrupt 1 //1秒定時(shí) (1分鐘)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
k--;
if(k==0)
{
k=20;
s--;
if(s==0)
{
P23=1;
P0=0xff;
}
}
}
void int_0() interrupt 0 //倒計(jì)時(shí)開關(guān)
{
EX0=0;
delay10ms();
if(key1==0)
flag=1;
while(key1==1);
delay10ms();
EX0=1;
}
void int_1() interrupt 2 //搶答開關(guān)
{
EX1=0;
delay10ms();
if(key2==0)
flag=2;
while(key2==1);
delay10ms();
EX1=1;
}
void t_1() interrupt 3 //復(fù)位開關(guān)
{
ET1=0;
delay10ms();
if(key3==0)
flag=3;
while(key3==1);
delay10ms();
ET1=1;
} |
|