救命啊 一个流水灯问题啊

zuanshishou 2010-08-15 11:56:35
救命啊!这是C51的
为什么这个流水灯实现不了呢
能不能直接对寄存器P1进行移位操作呢
#include <intrins.h>
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa;

void delay1s();
void main()
{
P1=0xfe;
while(1)
{
delay1s();
P1=_crol_(P1,1);
}
}
void delay1s()
{
uint i,j;
for(i=1000;i>0;i--)
{
for(j=110;j>0;j--)
{

}
}

}
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingminggui1 2011-11-15
  • 打赏
  • 举报
回复
#include "at89x51.h"
void delay(unsigned int t)
{ while(t--) ;

}


main()
{ unsigned int i=0x01;
while(1)
{ P2=i;
i=i<<1;
if(i==0xfc)i=0x01;


delay(50000) ; }



} 流水灯不能实现循环 为什么呢?? 求解
newstime 2010-08-16
  • 打赏
  • 举报
回复
你这个写的真乱,看不明白,记得写程序要有层次感啊,要不然,C语言的花括弧都叫人眼晕了。粗看你是少一个for循环,当然不流动了。
void main()
{
unchar i;
P1=0xfe;
while(1)
{
for(i=0;i<8;i++)
{
delay1s();
P1=_crol_(P1,1);
}
}
}
zuanshishou 2010-08-16
  • 打赏
  • 举报
回复
可能是你的硬件电路设计的问题,先检查一下,各个端口对应的接口吧


这是什么意思呢 谢谢
zuanshishou 2010-08-16
  • 打赏
  • 举报
回复
但是 如果我把他改成这样
就能实现两个灯一起流
这是为什么呢
#define uint unsigned int
#define uchar unsigned char
uchar aa;

void delay1s();
void main()
{
P1=0xfc;//此处改成0xfc时
while(1)
{
delay1s();
P1=_cror_(P1,1);
}
}
void delay1s()
{
uint i,j;
for(i=1000;i>0;i--)
{
for(j=110;j>0;j--)
{

}
}

}
QSCVBNM 2010-08-16
  • 打赏
  • 举报
回复
可能是你的硬件电路设计的问题,先检查一下,各个端口对应的接口吧
zuanshishou 2010-08-16
  • 打赏
  • 举报
回复
额 代码贴出来时候就自己变这样了
我将P1=0xfe改成P1=0xfc时候却能够实现流水灯
这是为什么呢 求解
bluesea87 2010-08-16
  • 打赏
  • 举报
回复
楼上,你这个程序效果跟lz效果应该一样,
yunqian09 2010-08-16
  • 打赏
  • 举报
回复
P1=P1<<1|P1>>7
pang123hui 2010-08-16
  • 打赏
  • 举报
回复
搞单片机这种,软件要对,硬件也要对

我看你这程序应该没问题,建议检查硬件
tietao 2010-08-16
  • 打赏
  • 举报
回复
因为单片机编程,是对硬件编程,
如果软件的接口定义,与硬件不一致。
那这个软件,即使在逻辑上是对的。
但对于你这个电路来说是无效的。


所以在写程序前,一定要保证自己的程序接口定义,
与自己的硬件是一致的,
这样写的程序才会在调试时,
避免一些麻烦。


但软件与硬件一起调试时,
至少要保证一个是对的,
但问题是,
有时候两个都弄错了。
这是找到错误,就是一种能力了。

祝你成功。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧