简单LED流水灯的制作及电路图
发布网友
发布时间:2022-04-22 10:15
我来回答
共1个回答
热心网友
时间:2023-04-23 13:46
看看这个,用51单片机做的
//P2.0、P2.1、P2.2三个口分别接黄红绿三个信号灯,每隔59秒红灯和绿灯轮流亮和暗,
//第60秒黄灯持续亮一秒,此时其他灯不亮。
#include<reg52.h>
#define uchar unsigned char
sbit yellow=P2^0;
sbit red=P2^1;
sbit green=P2^2;
sbit coma=P2^3;
sbit comb=P2^4;
int i=0,k=0,j=59;
///////////////////////////////////////////
uchar getcode(uchar a)
{
uchar p;
switch (a)
{
case 0: p=0xC0; break; /* 0 */
case 1: p=0xF9; break; /* 1 */
case 2: p=0xA4; break; /* 2 */
case 3: p=0xB0; break; /* 3 */
case 4: p=0x99; break; /* 4 */
case 5: p=0x92; break; /* 5 */
case 6: p=0x82; break; /* 6 */
case 7: p=0xF8; break; /* 7 */
case 8: p=0x80; break; /* 8 */
case 9: p=0x90; break; /* 9 */
default: break;
}
return(p);
}
///////////////////////////////////////////////
void delay( )
{
int x,y;
for(x=4;x>0;x--)
for(y=0;y<125;y++)
{ }
}
//////////////////////////////////////////////
void display( )
{
P1=getcode(j/10);coma=1;comb=0;delay();
P1=getcode(j%10);coma=0;comb=1;delay();
}
///////////////////////////////////////////
main( )
{
TMOD=0x01;
TH0=-(50000/256);
TL0=-(50000%256);
TR0=1;
EA=1;
ET0=1;
do{ display(); }
while(1);
}
////////////////////////////////////////////
void timer0( ) interrupt 1
{
i++;
TH0=-(50000/256);
TL0=-(50000%256);
if(i==20)
{i=0;j--;}
if(j<0)
{j=59;k++;}
if(k==2)
k=0;
if(j==0)
{yellow=0;red=1;green=1;}
if(k==0&&j!=0)
{red=0;yellow=1;green=1;}
if(k==1&&j!=0)
{green=0;red=1;yellow=1;}
}