我想实现单片机八个发光管来回流动,可是当它往下流动一次,就一直在最后两个灯循环。

求大神指点,就我的程序基础上改一下。谢谢#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--);
}
展开
 我来答
百度网友b14b526
2015-10-10 · TA获得超过184个赞
知道小有建树答主
回答量:108
采纳率:100%
帮助的人:46.1万
展开全部
想问一下,就是单纯的流水灯吗?那当你循环移动四次的时候的判断干什么用?你确定你这个程序的硬件是八个灯亮?起初你用的是循环左移指令,当第四个等亮了之后你用了循环右移指令,这样的话怎么可能控制把的流水灯?充其量控制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--);
}
goddog_2000
2015-10-10
知道答主
回答量:9
采纳率:0%
帮助的人:3万
展开全部
写的太乱了,ding函数还嵌套使用本身?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式