?? text1.c
字號:
//#include <reg52.h>
#include <reg52.h>
//#include "AT89X52.H"
//#include <intrins.h>
#define TIME0H 0xFC
#define TIME0L 0x17
#define TIME1H 0x3C
#define TIME1L 0xB0
unsigned char code table[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};
unsigned char code dis_digit[13]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFE,0xFD,0xFB,0xF7,0xEF};
unsigned char temp[13];
unsigned char uc_TimeCount=0;
int dis_index;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^4;
sbit key4=P3^5;
sbit BEEP=P0^5;
sbit Light=P0^6;
int key;
int flag;
int score=0;
int score2=0;
int second24,second,minute,jie;
void delay(char i)
{
unsigned char k;
for( k=0; k<i; k++)
{
;
}
} //延時
int keyscan()
{
int i;
P3=0xFF;
if(key1==0)
{
delay(6);
if(key1==0)
{
delay(6);
if(key1==0)
{
do{;}while(key1!=1);
i=1;
}
}
}
if(key2==0)
{
delay(6);
if(key2==0)
{
delay(6);
if(key2==0)
{
do{;}while(key2!=1);
i=2;
}
}
}
if(key3==0)
{
delay(6);
if(key3==0)
{
delay(6);
if(key3==0)
{
do{;}while(key3!=1);
i=3;
}
}
}
if(key4==0)
{
delay(6);
if(key4==0)
{
delay(6);
if(key4==0)
{
do{;}while(key4!=1);
i=4;
}
}
}
return(i);
}
/*void inc_min()
{
minute--;
if(minute <0)
{
minute = 12;
jie++;
flag=1;
ET1=0;
}
temp[10]=table[jie];
temp[1] = table[minute / 10]; // 分十位
temp[0] = table[minute % 10]; // 分個位
}
void inc_sec()
{
second24--;
second--;
if(second<0)
{
second=59;
inc_min();
}
if(second24==0)
{
second24=24;
flag=1;
ET1=0;
}
temp[8]=table[second/10];
temp[9]=table[second%10];
temp[11]=table[second24/10];
temp[12]=table[second24%10];
}
*/
void vTimer1(void) interrupt 3 //中斷1程序
{
TH1=TIME1H; //TIME1H=0x3C
TL1=TIME1L; //TIME1L=0xB0
flag=0;
uc_TimeCount++; //倒計時開始
if(uc_TimeCount==20)
{
uc_TimeCount=0;
second24--;
second--;
if(second24==0)
{
second24=24; //24秒倒計時
flag=1;
ET1=0;
}
if(second==-1)
{
second=59;
minute--;
if(minute==-1)
{
minute=12;
second=0;
second24=24;
jie++;
flag=1;
ET1=0;
}
}
}
temp[10]=table[jie];
temp[1] = table[minute / 10]; // 分十位
temp[0] = table[minute % 10]; // 分個位
temp[8]=table[second/10];
temp[9]=table[second%10];
temp[11]=table[second24/10];
temp[12]=table[second24%10];
}
void vTimer0(void) interrupt 1 //1毫秒刷新一次
{
TH0=TIME0H;
TL0=TIME0L;
if(dis_index>=0 && dis_index<8)
{
P1=dis_digit[dis_index];
P0=0xFF;
P2=temp[dis_index];
}
else
if(dis_index>=8 && dis_index<13)
{
P1=0xFF;
P0=dis_digit[dis_index];
P2=temp[dis_index];
}
dis_index++;
if(dis_index==13)
{
dis_index=0;
}
}
void intersvr0(void) interrupt 0 using 1
{
ET1=~ET1;
}
void intersvr1(void) interrupt 2 using 2
{
second24=24;
}
void main(void)
{
//初始化全局變量
P3=0xFF;
P2 = 0;
P1 = 0;
P0 = 0x01;
PX0=0;
PX1=0;
PT0=1;
PT1=0;
TMOD=0x11;
TH0=TIME0H;
TL0=TIME0L;
TR0=1; //開啟定時器0
ET0=1; //開定時器0中斷
EX0=1;
EX1=1;
TH1=TIME1H;
TL1=TIME1L;
TR1=1; //開啟定時器1
ET1=1; //開定時器1中斷
// ET2=0;
IT0=1;
EA=1; //開啟總中斷
uc_TimeCount= 0;
flag=0;
second24=24;
second=0;
minute=12;
score=0;
score2=0;
jie=1;
temp[0]=table[minute%10];
temp[1]=table[minute/10];
temp[8]=table[second/10];
temp[9]=table[second%10];
temp[11]=table[second24/10];
temp[12]=table[second24%10];
temp[2]=table[score/100];
temp[3]=table[(score%100)/10];
temp[4]=table[(score%100)%10];
temp[5]=table[score2/100];
temp[6]=table[(score2%100)/10];
temp[7]=table[(score2%100)%10];
temp[10]=table[jie];
dis_index = 0;
while(1)
{
if(flag==1)
{
BEEP=0;
Light=0;
}
key=keyscan();
if(key)
{
switch(key)
{
case 1 :
score++;
temp[2]=table[score/100];
temp[3]=table[(score%100)/10];
temp[4]=table[(score%100)%10];
break ;
case 2 :
score--;
if(score==-1)
{score=0;}
temp[2]=table[score/100];
temp[3]=table[(score%100)/10];
temp[4]=table[(score%100)%10];
break;
case 3 :
score2++;
temp[5]=table[score2/100];
temp[6]=table[(score2%100)/10];
temp[7]=table[(score2%100)%10];
break ;
case 4 :
score2--;
if(score2==-1)
{score2=0;}
temp[5]=table[score2/100];
temp[6]=table[(score2%100)/10];
temp[7]=table[(score2%100)%10];
break;
default :
break ;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -