利用80C51芯片和32颗LED灯,设计一个心形流水灯,设计功能要求如下:
1. 心形流水灯从P0.7口接的灯(即A7灯)亮开始右移一位,直到移到P0.0口(即A0灯),然后A0—A7灯全灭;
2. A0—A7灯全灭后,P1.0口接的灯(即B0灯)亮开始左移一位,直到移到P1.7口(即B7灯),然后B0—B7灯全灭;
3. B0—B7灯全灭后,P3.0口接的灯(即D0灯)亮开始左移一位,直到移到P3.7口(即D7灯),然后D0—D7灯全灭;
4. D0—D7灯全灭后,P2.0口接的灯(即C0灯)亮开始左移一位,直到移到P2.7口(即C7灯),然后C0—C7灯全灭;
5. 32颗灯循环一周后,要求所有的灯全灭,然后再全亮(即为闪烁一次),所有灯闪烁三次后,重复上面1-4的内容。
uchar time=0,mode=0,flag=0,cishu=0;
void main() //主函数
{
TMOD=1;//初始化定时器
TH0=0X3C;
TL0=0XB0;
ET0=1;
EA=1;
TR0=1;
while(1)
{
}
}
void timer0() interrupt 1//定时器中断
{
if(time<6)
time++;
else
{
time=0;
if(mode==0)//P0
{
P0=~(0x80>>flag);
if(flag<8)
flag++;
else
{
flag=0;
mode=1;
P0=0XFF;
}
}
if(mode==1)//P1
{
P1=~(1<<flag);
if(flag<8)
flag++;
else
{
flag=0;
mode=2;
P1=0XFF;
}
}
if(mode==2)//P3
{
P3=~(1<<flag);
if(flag<8)
flag++;
else
{
flag=0;
mode=3;
P3=0XFF;
}
}
if(mode==3)//P2
{
P2=~(1<<flag);
if(flag<8)
flag++;
else
{
flag=0;
mode=4;
P2=0XFF;
}
}
//闪烁
if(mode==4)
{
if(flag==0)
{
P0=0xff;P1=0xff;P2=0xff;P3=0xff;
if(cishu<3)
cishu
资料借鉴于此纷传
阅读全文