前者是左移,最高位移出去了就丢弃,最低位补0,后者(正确的函数名应该是 _crol_)则是循环左移,最高位移出去后不丢弃,而是补到最低位,也就是说,最低位不补0
成都网站制作、网站设计服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!
数组循环只能用
循环语句
,这个函数是对一个数的二进制的每个位进行移动的,左边最高位移出后会补到最低位去
先发一个8 个灯的。
#includereg52.h
#include intrins.h
#define uint unsigned int
#define uchar unsigned char
uchar temp,num;
void delay(uint);
void main()
{
temp=0xfe;
while(1)
{
for(num=0;num8;num++)
{
P1=temp;
delay(100);
temp=_crol_(temp,1);
P1=0xff;
delay(100);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
/****************************************************************************
再发一个10个灯的,不过函数是IROL
*******************************************************************************/
_crol_不好实现,我用_irol_实现的。
//P2低两位,P1全部8位分别接LED,共十只LED
#include reg51.h
#include intrins.h
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
main()
{
unsigned int j;
unsigned char i;
while(1)
{
j=0xfffe;
for(i=0;i10;i++)
{
P2=j/256;
P1=j%256;
delay(500);
j=_irol_(j,1); //整数循环左移
}
}
}
_crol_不好实现,我用_irol_实现的。延时部分自己修改。
//P2低两位,P1全部8位分别接LED,共十只LED
#include reg51.h
#include intrins.h
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
main()
{
unsigned int j;
unsigned char i;
while(1)
{
j=0xfffe;
for(i=0;i10;i++)
{
P2=j/256;
P1=j%256;
delay(500);
j=_irol_(j,1); //整数循环左移
}
}
}
1、首先要写入单片机的头函数,定义单片机P1口的8个管脚,让他们分别代表流水灯的8个led。
2、写一个大约一小时的延时函数,为了清楚的看到流水灯的、效果。
3、下面是流水灯的主函数,流水灯一个点亮后一个熄灭反复循环点亮熄灭。
4、这样流水灯就可以反复循环了。把程序下到仿真软件或者是开发板,进行仿真即可完成。
这么说吧,举个例子,假如原来b=0xBA;即二进制的(10111010),
p1=_crol_(b,1);其执行过程是这样的,
1,首先把b循环左移,结果是01110101,即b=0x75;
2,把循环后的结果送给P1口,所以,P1口的值是0x75