请懂单片机的朋友帮看一下这段C程序,错在哪里了?

做跑马灯程序:include<reg52.h>unsignedinti;voidmain(){P1=0xfe;while(1){i=P1^7;P1=P1<<1;P1=P1... 做跑马灯程序:
include<reg52.h>
unsigned int i;
void main()
{
P1=0xfe;
while(1)
{i=P1^7;
P1=P1<<1;
P1=P1+i;
}
}
一楼的兄弟,51单片机没有P1^8这一位哦,只有P1^0~P1^7这八个位哦.而且从KEIL单步跟踪来看,i被赋值后为249(十进制).这根本就不是我想要的,究竟错在哪里了呢?

受到4楼的启发,觉得i=P1^7这个赋值语句是有毛病的.后来经过修改,通过了.
应该在变量声明阶段,sbit i=P1^7.然后将i赋值给一个整形变量j,对j做数学运算即可.

lalahu的答案是正确的.
展开
 我来答
lalahu007
2010-11-18 · TA获得超过266个赞
知道小有建树答主
回答量:297
采纳率:100%
帮助的人:133万
展开全部
sbit P1_7=P1^7; 这是表示第七个管脚
i=P1^7就是异或的意思。oxfe^7=0xf9,就是249啊
与上面的sbit区别开来

程序意思没看出来。
启岩
2010-11-18 · TA获得超过1851个赞
知道小有建树答主
回答量:809
采纳率:0%
帮助的人:641万
展开全部
你程序中的P1^7并不是取的P1的第7位,而是用P1与7进行异或运算

P1=0xfe;
while(1)
{
i = ~P1;
if(i==0x80)
{
i = 0x01;
}
else
{
i = i<<1;
}
P1 = ~i;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lorddenton
2010-11-18 · TA获得超过879个赞
知道小有建树答主
回答量:269
采纳率:100%
帮助的人:454万
展开全部
i=P1^7; 改成 i=P1^0x80;试试看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wolongxuanzhu
2010-11-18 · TA获得超过170个赞
知道答主
回答量:150
采纳率:0%
帮助的人:72.2万
展开全部
你的i设置的不对,i是位变量 应该设为 unsigned bit
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友94f5501
2010-11-18 · TA获得超过350个赞
知道小有建树答主
回答量:457
采纳率:100%
帮助的人:370万
展开全部
你这是常量了啊,在P1=P1+i;后应加段几百毫秒的延时,要不看不出流动效果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式