各位大佬,下边程序是我在开发板上实现交通灯的程序,我发现数码管显示是没有问题的,但就是对应的LED是没有反应的,在开发板上显示出来的是数码管在进行倒计时,但是LED只是亮了一个,其他都没亮(以很快的频率闪烁),下图为开发板,附录为开发板原理图
单片机源程序如下:
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
uchar flag1=0,flag2=0,flag3=0;
uchar table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar dig_num=60,num1,num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit red=P1^0;
sbit green=P1^3;
sbit yellow=P1^6;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(dig)
{
uint shi,ge;
shi=dig/10;
ge=dig%10;
P0=0xff;
wela=1;
P0=0xee;
wela=0;
dula=1;
P0=table2[shi];
dula=0;
delayms(3);
P0=0xff;
wela=1;
P0=0xdd;
wela=0;
dula=1;
P0=table2[ge];
dula=0;
delayms(3);
}
void INIT()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void T0_time()interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
num++;
}
void main()
{
INIT();
while(1)
{
display(dig_num);
if(num==50)
{
num=0;
dig_num--;
if(dig_num<=0)
{
dig_num=60;
}
if(0<dig_num<20)
{
red=0;
green=0;
yellow=0;
//delayms(5);
}
if(20<dig_num<40)
{
red=1;
green=1;
yellow=0;
//delayms(5);
}
if(40<dig_num<60)
{
red=1;
green=0;
yellow=1;
//delayms(5);
}
}
}
}
|