用数码管显示交通灯实验,数码管显示的时候只有一部分显示正常其他的显示不正常
//交通灯用数码管显示实验
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code shuma_w[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//定义前进路红绿灯
sbit Q_Red = P1^0;
sbit Q_Yellow = P1^1;
sbit Q_Green = P1^2;
sbit Q_P_Red = P1^3;
sbit Q_P_Green = P1^4;
//定义宝田路红绿灯
sbit B_Red = P3^0;
sbit B_Yellow = P3^1;
sbit B_Green = P3^2;
sbit B_P_Red = P3^3;
sbit B_P_Green = P3^4;
uchar Count = 0;
uchar Sec = 0;
void Delay(uint del)//10ms的延时函数
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<1827;j++)
{
}
}
void Delay_1ms(uint i)//1ms的延时函数
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<148;x++)
{
}
}
void LED(uchar dic,uchar re,uchar yel,uchar gre,uchar p_re,uchar p_gre)
{
if(dic == 1)
{
Q_Red = re;
Q_Yellow = yel;
Q_Green = gre;
Q_P_Red = p_re;
Q_P_Green = p_gre;
}
if(dic == 2)
{
B_Red = re;
B_Yellow = yel;
B_Green = gre;
B_P_Red = p_re;
B_P_Green = p_gre;
}
}
void Time0_in(void)//时间50ms
{
TMOD = 0x01;
TH0 = 0x4c;
TL0 = 0x00;
IE = 0x82;
TR0 = 1;
}
void Time0_int(void) interrupt 1 //50ms*20=1s
{
TH0 = 0x4c;
TL0 = 0x00;
Count++;
if(Count == 20)
{
Count = 0;
Sec--;
}
}
void LEDreg(void)
{
P0 = 0;
P2 = shuma_w[3];
P0 = table[Sec/10];
Delay_1ms(2);
P0 = 0;
P2 = shuma_w[2];
P0 = table[Sec%10];
Delay_1ms(2);
P2 = 0xff;//数码管不会被点亮
}
void main(void)
{
uchar i;
Time0_in();
while(1)
{
//前进路绿灯亮,宝田路红灯亮持续时间10秒
Sec = 10;
while(Sec != 0)
{
LED(1,1,1,0,1,0);
LED(2,0,1,1,0,1);
LEDreg();
}
//前进路黄灯亮,宝田路红灯亮持续时间5秒
Sec = 5;
while(Sec != 0)
{
for(i=0;i<100;i++)
{
LED(1,1,0,1,1,1);
LED(2,0,1,1,0,1);
LEDreg();
}
LED(1,1,1,1,1,1);
LED(2,1,1,1,1,1);
Delay(50);
}
//前进路红灯亮,宝田路绿灯亮持续时间10秒
Sec = 10;
while(Sec != 0)
{
LED(1,0,1,1,0,1);
LED(2,1,1,0,1,0);
LEDreg();
}
//前进路红灯亮,宝田路黄灯亮5秒
Sec = 5;
while(Sec !=0)
{
for(i=0;i<100;i++)
{
LED(1,0,1,1,0,1);
LED(2,1,0,1,1,1);
LEDreg();
}
LED(1,1,1,1,1,1);
LED(2,1,1,1,1,1);
Delay(50);
}
}
}
|