请懂单片机的朋友帮看一下这段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的答案是正确的. 展开
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的答案是正确的. 展开
展开全部
你程序中的P1^7并不是取的P1的第7位,而是用P1与7进行异或运算
P1=0xfe;
while(1)
{
i = ~P1;
if(i==0x80)
{
i = 0x01;
}
else
{
i = i<<1;
}
P1 = ~i;
}
P1=0xfe;
while(1)
{
i = ~P1;
if(i==0x80)
{
i = 0x01;
}
else
{
i = i<<1;
}
P1 = ~i;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i=P1^7; 改成 i=P1^0x80;试试看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的i设置的不对,i是位变量 应该设为 unsigned bit
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这是常量了啊,在P1=P1+i;后应加段几百毫秒的延时,要不看不出流动效果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询