
#include<reg51.h>
#include<intrins.h>
sbit D1=P1^0; //led灯引脚定义
sbit D2=P1^1;
sbit D3=P1^2;
sbit LS138A=P2^2; //数码管引脚定义
sbit LS138B=P2^3;
sbit LS138C=P2^4;
void delay(unsigned int i);
unsigned char aa,num,num1,a;
unsigned int LedOut[2];
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9数模
void main()
{ unsigned char i;
TMOD=0x01,TH0=0x3c,TL0=0xb0, EA=1; //定时器初始化(50ms中断一次)
ET0=1;
TR0=1;
num = 40;
D1=1;D2=1;D3=0; //led灯初始化
while(1)
{ num1=num/2;
LedOut[0]=Disp_Tab[num1/10];
LedOut[1]=Disp_Tab[num1%10];
for( i=0; i<2; i++) //实现8位动态扫描循环
{
P0 = LedOut[i]; //将字模送到P0口显示
switch(i) //使用switch 语句控制位选 也可以是用查表的方式 学员可以试着自己修改
{
case 0:LS138A=0; LS138B=0; LS138C=0;
break;
case 1:LS138A=1; LS138B=0; LS138C=0;
break;
}
delay(10);
}
}
}
void timer0(void) interrupt 1
{
TH0=0x3c,TL0=0xb0;
aa++;
if(aa == 10)
{ //如果到了0.5s
aa = 0;
num--;
if(num <= 6) D1 = ~D1; //黄灯闪烁
else if(a==2&&num==39) //变量a是控制不能重如这个通道
{
D1 = 1; //关闭黄灯.
D2 = 1; //关闭红灯.
D3 = 0; //打开绿灯.
a=0;
}
if(num == 0)
{
D1 = 1; //关闭黄灯.
D2 = 0; //打开红灯.
D3 = 1; //关闭绿灯.
num = 40; //开始20s倒计时.
a++;
}
}
}
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
这怎么在灯交换时,它的秒数跳得不正常,望高手解决.......谢谢! #include<intrins.h>
sbit D1=P1^0; //led灯引脚定义
sbit D2=P1^1;
sbit D3=P1^2;
sbit LS138A=P2^2; //数码管引脚定义
sbit LS138B=P2^3;
sbit LS138C=P2^4;
void delay(unsigned int i);
unsigned char aa,num,num1,a;
unsigned int LedOut[2];
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9数模
void main()
{ unsigned char i;
TMOD=0x01,TH0=0x3c,TL0=0xb0, EA=1; //定时器初始化(50ms中断一次)
ET0=1;
TR0=1;
num = 40;
D1=1;D2=1;D3=0; //led灯初始化
while(1)
{ num1=num/2;
LedOut[0]=Disp_Tab[num1/10];
LedOut[1]=Disp_Tab[num1%10];
for( i=0; i<2; i++) //实现8位动态扫描循环
{
P0 = LedOut[i]; //将字模送到P0口显示
switch(i) //使用switch 语句控制位选 也可以是用查表的方式 学员可以试着自己修改
{
case 0:LS138A=0; LS138B=0; LS138C=0;
break;
case 1:LS138A=1; LS138B=0; LS138C=0;
break;
}
delay(10);
}
}
}
void timer0(void) interrupt 1
{
TH0=0x3c,TL0=0xb0;
aa++;
if(aa == 10)
{ //如果到了0.5s
aa = 0;
num--;
if(num <= 6) D1 = ~D1; //黄灯闪烁
else if(a==2&&num==39) //变量a是控制不能重如这个通道
{
D1 = 1; //关闭黄灯.
D2 = 1; //关闭红灯.
D3 = 0; //打开绿灯.
a=0;
}
if(num == 0)
{
D1 = 1; //关闭黄灯.
D2 = 0; //打开红灯.
D3 = 1; //关闭绿灯.
num = 40; //开始20s倒计时.
a++;
}
}
}
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}