单片机C语言这个程序不太懂(实现灯左右亮P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0)

#include<AT89X51.H>unsignedchari;unsignedchartemp;unsignedchara,b;voiddelay(void){uns... #include
<AT89X51.H>
unsigned
char i;
unsigned
char temp;
unsigned
char a,b;

void
delay(void)
{

unsigned char m,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);
}
void
main(void)
{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i<8;i++)

{

a=temp<<i;
这里都不懂

b=temp>>(8-i);

P1=a|b;

delay();

}

for(i=1;i<8;i++)

{

a=temp>>i;

b=temp<<(8-i);

P1=a|b;

delay();

}

}}
展开
 我来答
ppc68
2012-07-02 · TA获得超过581个赞
知道小有建树答主
回答量:1257
采纳率:100%
帮助的人:780万
展开全部
其实就是往IO口写电平,要让灯逐个亮就是相应端口写0或1
一开始,temp=0xfe;也就是最低位bit0=0,对应P1=temp;也就是P1.0处灯亮;

a=temp<<i;
b=temp>>(8-i);
P1=a|b;
这些就是移位,实现灯逐个轮流点亮,其实这里写的有点复杂,目的是一样的,就是保证每次
P1口只有一位为0,你也可以采取别的移位方式,结果正确就行
这么拉风啊
2012-07-02
知道答主
回答量:44
采纳率:0%
帮助的人:16.5万
展开全部
你有学c语言吧?
这里都不懂是指while语句里面的内容吧?《这个符号是左移位,以上temp为0xfe化为二进制11111110左移即为11111100》为右移道理一样,“|”为或算法如下:0|0=0,0|1=1|0=1,1|1=1.
c语言书里都有讲的,具体的要看书啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式