#include<reg52.h>
unsigned char table[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};
void delayms(unsigned int a)
{
unsigned int i,j;
for(j=a;j>0;j--)
for(i=125;i>0;i--);
}
void main()
{
while(1)
{
unsigned char b;
for(b=0;b<8;b++)
{
P1=table[b];
delayms(1000);
}
}
}
程序编译通过,PRoteus仿真实现功能。
二、采用移位函数的方式进行LED灯流水灯调试:
#include <reg52.h>
#include <intrins.h>
char temp;
void delay(unsigned int m)
{
unsigned int i,j;
for(j=m;j>0;j--)
for(i=125;i>0;i--);
}
void main()
{
unsigned char i;
temp=0xfe;
P1=temp;
while(1)
{
temp=_crol_(temp,1);
delay(300);
P1=temp;
}
}
程序编译通过,实现跑马灯循环效果,所使用的crol函数为移位专用函数,还可使用cror实现右移。
此外,还可使用>> <<移位符进行流水等程序设计。
3、实现8位流水灯来回跑动效果
程序如下:
#include <reg52.h>
#include <intrins.h>
char temp;
void delay(unsigned int m)
{
unsigned int i,j;
for(j=m;j>0;j--)
for(i=125;i>0;i--);
}
void main()
{
unsigned char i;
temp=0xfe;
P1=temp;
while(1)
{
for(i=7;i>0;i--)
{
temp=_crol_(temp,1);
delay(300);
P1=temp;
}
for(i=7;i>0;i--)
{
temp=_cror_(temp,1);
delay(300);
P1=temp;
}
}
}
程序编译通过,仿真实现预期效果。