#include "reg51.h"
sbit H_red1=P1^0;
sbit H_green1=P1^1;
sbit H_yellow1=P1^2;
sbit S_red1=P1^3;
sbit S_green1=P1^4;
sbit S_yellow1=P1^5;
sbit H_red2=P2^0;
sbit H_green2=P2^1;
sbit H_yellow2=P2^2;
sbit S_red2=P2^3;
sbit S_green2=P2^4;
sbit S_yellow2=P2^5;
unsigned char code disptab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //數碼管顯示0~F段碼數組
unsigned char code bittab[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//第N個數碼管顯
unsigned char S_temp=12,H_temp=15;
void Delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++) //延時t個1ms
for(j=0;j<112;j++); //延時約1ms
}
//數碼管顯示子程序,每次顯示1位,自動輪換,temp要先定義。
void disp()
{
static unsigned char num; //指定顯示的數碼管的序號
num++;
num=(num%8); //num 變化 0,1,……,7
P2=0xff; //數碼管消影
P0=0xff; //數碼管消影
P2=bittab[num]; //數碼管送位碼
switch(num) //數碼管送段碼
{
case 0: P0=disptab[H_temp%10]; break;//個位
case 1: P0=disptab[H_temp/10%10]; break;
case 2: P0=disptab[S_temp%10]; break;
case 3: P0=disptab[S_temp/10%10]; break;
case 4: P0=disptab[H_temp%10]; break;
case 5: P0=disptab[H_temp/10%10]; break;
case 6: P0=disptab[S_temp%10]; break;
case 7: P0=disptab[S_temp/10%10]; break;//十位
default: ;
}
//if(num==2||num==4)P0=P0&0x7f; // 小數點的顯示位 0*** ****
}
void int0() interrupt 1
{
static char k=0;
unsigned int i;
TH0=0x3c;
TL0=0xb0;
i++; //20′?ò???
k++;
if(i<=240)
{
if(k/20) {k=0;S_temp--;H_temp--;}
H_red1=0;
S_green1=0;
H_red2=0;
S_green2=0;
}
if(i==240){ H_temp =3; S_temp = 3;}
if(i<=300 && i>240)
{
if(k/20) {k=0;S_temp--;H_temp--;}
H_red1=0;
S_green1=1;
S_yellow1=~S_yellow1;
H_red2=0;
S_green2=1;
S_yellow2=~S_yellow2;
}
if(i==300){ H_temp =12; S_temp = 15;}
if(i<=540 && i>300)
{
if(k/20) {k=0;S_temp--;H_temp--;}
H_red1=1;
S_yellow1=1;
H_green1=0;
S_red1=0;
H_red2=1;
S_yellow2=1;
H_green2=0;
S_red2=0;
}
if(i==540){ H_temp =3; S_temp = 3;}
if(i<=600 && i>540)
{
if(k/20) {k=0;S_temp--;H_temp--;}
H_green1=1;
H_yellow1=~H_yellow1;
S_red1=0;
H_green2=1;
H_yellow2=~H_yellow1;
S_red2=0;
}
if(i==600){ S_temp=12;H_temp=15;}
if(i>600)
{
P1=0XFF;
i=0;
}
}
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
EA=1;
ET0=1;
while(1)
{
disp();
Delay(1);
}
}
|