左移右移来回循环流水灯源码
#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
unsigned int i = 0;
unsigned char j = 0;
unsigned char cnt = 0;
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while(j<258)
{
cnt = 0;
if(j%2 == 0)
{
while(cnt < 8)
{
P0 = ~(0x01 << cnt);
for(i=0;i<15000;i++);
cnt++;
}
}
else
{
while(cnt < 8)
{
P0 = ~(0x80 >> cnt);
for(i=0;i<15000;i++);
cnt++;
}
}
j++;
}
}
很奇怪的想法。
哪里奇怪了?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code li[28]={0,0,0,0,0,1,2,4,8,16,32,64,128,0,0,0,128,64,32,16,8,4,2,1,0,0,0,0}; //控制流星灯的单灯输出
uint i=0,n=1,k=0;
void delay(int ms);
void main()
{
while(1)
{
for(k=1;k<1500;k++) //调整流星灯的速度
{
i++; //i控制灯的占空比,调节灯的亮度,形成扫尾
if(i>80)
{
P1=0xff-li[n];
}
if(i>60)
{
P1=0xff-li[n+1];
}
if(i>40)
{
P1=0xff-li[n+2];
}
if(i>30)
{
P1=0xff-li[n+3];
}
if(i>=100)
{
i=0;
}
delay(0);
P1=0xff;
}
n++; //n是配合数组完成对灯的输出
if(n==24)
n=1;
}
}
void delay(int ms)
{
while(ms--)
{
ms++;
ms--;
}
}
个人不是很了解,但是用delay很耗CPU还没有工作