我想实现单片机八个发光管来回流动,可是当它往下流动一次,就一直在最后两个灯循环。
求大神指点,就我的程序基础上改一下。谢谢#include<reg52.h>#include<intrins.h>#defineuintunsignedint#define...
求大神指点,就我的程序基础上改一下。谢谢
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void ding();
void delay(uint);
void ding()
{
temp=0x01;
while(1)
{
P0=temp;
delay(300);
P0=0x00;
delay(300);
temp=_crol_(temp,1);
if(temp==0x80)
{
P0=temp;
delay(300);
P0=0x00;
delay(300);
temp=_cror_(temp,1);
if(temp==0x10)
{
ding();
}
}
}
}
void main()
{
ding();
}
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
} 展开
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void ding();
void delay(uint);
void ding()
{
temp=0x01;
while(1)
{
P0=temp;
delay(300);
P0=0x00;
delay(300);
temp=_crol_(temp,1);
if(temp==0x80)
{
P0=temp;
delay(300);
P0=0x00;
delay(300);
temp=_cror_(temp,1);
if(temp==0x10)
{
ding();
}
}
}
}
void main()
{
ding();
}
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
} 展开
2个回答
展开全部
想问一下,就是单纯的流水灯吗?那当你循环移动四次的时候的判断干什么用?你确定你这个程序的硬件是八个灯亮?起初你用的是循环左移指令,当第四个等亮了之后你用了循环右移指令,这样的话怎么可能控制把的流水灯?充其量控制4个灯罢了,但是这个程序目前四个灯的流水也是实现不了的,望检查硬件,到底是想几个灯的流水,四个Or八个?
追问
我希望,一开始从0x01开始往0x80移动,当到0x80时,往0x01移动。最后调用函数本身是希望它从头再开始运行,形成循环。但是当它移动到 0x80以后,就一直在0x80和0x40来回循环。
追答
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void ding();
void delay(uint);
void ding()
{
temp=0x01;
while(1)
{
P0=temp;
delay(300);
P0=0x00;
delay(300);
temp=_crol_(temp,1);
if(temp==0x80)
{
while(1){
P0=temp;
delay(300);
P0=0x00;
delay(300);
temp=_cror_(temp,1);
if(temp==0x10)
{
Temp=0x01;
break();
}
}
}
}
}
void main()
{
ding();
}
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询