|
10黑币
#include<reg51.h>
unsigned char sum;
bit a,b;
unsigned char gw; //定义个位
unsigned char sw; //定义十位
//定义LED端口
sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
sbit L5=P1^4;
sbit L6=P1^5;
//数码管段码位码显示
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x7d,0x07,0x7f,0x6f};
void display();
//延时子程序 5ms
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<600;j++);
}
//主程序
void main()
{ unsigned char k;
TMOD=0X01;
EA=1;
EX0=1;
EX1=1;
ET0=1;
IT0=1;
IT1=1;
TH0=0xd8;
TL0=0xf0;
TR0=1;
PX0=1;
P0=0X3F;
P2=0XF0;
while(1)
{
display();
P1=0xf3;
delay(11000);
for(k=0;k<3;k++)
{
a=1;
delay(1);
P1=0xf3;
delay(100);
P1=0xfb;
delay(100);
}
P1=0xed;
delay(400);
P1=0xde;
delay(11000);
for(k=0;k<3;k++)
{
b=1;
P1=0Xde;
delay(100);
P1=0xdf;
delay(100);
}
P1=0xf6;
delay(400);
}
}
void display()
{
TR0=1;
while(P1==0xf3)
{
sum=55;
P0=sw;
P2=0XFA;
delay(100);
P0=gw;
P2=0XF5;
delay(100);
}
while(a==1)
{
sum=3;
P0=sw;
P2=0XFA;
delay(100);
P0=gw;
P2=0XF5;
delay(100);
}
while(P1==0xed)
{
sum=2;
P0=sw;
P2=0XFA;
delay(100);
P0=gw;
P2=0XF5;
delay(100);
}
while(P1==0xde)
{
sum=55;
P0=sw;
P2=0XFA;
delay(100);
P0=gw;
P2=0XF5;
delay(100);
}
while(b==1)
{
sum=3;
P0=sw;
P2=0XFA;
delay(100);
P0=gw;
P2=0XF5;
delay(100);
}
while(P1==0xf6)
{
sum=2;
P0=sw;
P2=0XFA;
delay(100);
P0=gw;
P2=0XF5;
delay(100);
}
}
//外部中断0 紧急情况
void int_0(void) interrupt 0 using 1
{
unsigned char i,j,k,l,m,c,d,e;
i=P0;
j=P1;
k=P2;
l=TH0;
m=TL0;
c=sum;
d=a;
e=b;
P1=0XF6;
delay(2000);
P0=i;
P1=j;
P2=k;
TH0=l;
TL0=m;
sum=c;
a=d;
b=e;
}
//外部中断1 特殊情况
void int_1(void) interrupt 2 using 2
{
unsigned char i,j,k,l,m,c,d,e;
i=P0;
j=P1;
k=P2;
l=TH0;
m=TL0;
c=sum;
d=a;
e=b;
P1=0XF3;
delay(2000);
P0=i;
P1=j;
P2=k;
TH0=l;
TL0=m;
sum=c;
a=d;
b=e;
}
//定时器中断
void time(void) interrupt 1 using 3
{
int se,count;
TH0=0Xd8;
TL0=0xf0;
se++;
if(se==100)
{
se=0;
count++;
if(count==sum)
count=0;
sw=table[count/10];
gw=table[count%10];
}
}
|
-
-
原理图.zip
22.21 KB, 下载次数: 2, 下载积分: 黑币 -5
|