|
各位大佬,下邊程序是我在開發板上實現交通燈的程序,我發現數碼管顯示是沒有問題的,但就是對應的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);
}
}
}
}
|
|