淘先锋技术网

首页 1 2 3 4 5 6 7

单片机 移位操作 右移 C语言

C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用 左移, 右移这两个C中的移位符号。

单片机左右移函数

首先对比一下 左边与右边 那里有不同 同时 程序不同对应的输出结构有哪些不同。。

P2口 连接8个LED 低电平驱动使其发光。

P2=0xfe //上电 P2.0连接的 LED发光。 其余的熄灭。

对比一下程序

void main() //主函数

{

P2=0xfe; //P2初始化

while(1) //死循环

{

num=P2; //这里 与左边不同 把P2的状态给 NUM 也就是0XFE num=0xfe

P2=_crol_(num,1); //P2等于num 循环左移 P2=0xef 这时应该是连接的P2.7的LED发光

delay(0);//延迟

}

}

左边 代码 NUM 每次大循环 都赋值 num=0xfe 是固定的 所以不管你以后怎么移动 P2口的输出都是不变得 只移动了一次。。

求采纳为满意回答。

C语言51单片机左移函数的问题

你首先赋值P0=0xfe,就是p0^1亮,其他全灭,而你的zuoyi()函数在执行完后才给P0赋值,而zuoyi()执行完后,返回值是0;

51单片机。用C语言的_crol_()函数实现LED灯循环左移。为什么我的程序只亮一盏灯啊。。。没有循环啊

你的led灯是共阳的,从你给的条件可以判断。p1=0xfe,即最低位为‘0’

,故点亮的是p1.0引脚所对应的led灯,也就是你所谓的c0。所以你的程序没有问题啊。

51单片机的c语言 左移右移怎么用?想用来控制流水灯,请帮忙写个完整的c程序,参考下,端口随意

# include "reg51.h" // 包含头文件

#define uchar unsigned char

void delay02s(void) // 延时0.2s子程序

{

unsigned char i,j,k;

for ( i=2;i0;i-- )

for (j=200;j0;j-- )

for (k=250;k0;k-- );

}

void main (void) // 主函数

{

uchar i,j;

while (1) // 死循环

{

j=0x01; // j初始化为0x01,左移初始值

for(i=0;i8;i++) // for循环语句,完成8个循环

{

P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出

delay02s( ); // 延时0.2s

j= j1; // 左移1位

}

j=0x80; // 设置右移初始值j为0x80

for (i=0;i8;i++)

{

P1= ~ j;

delay02s( );

j= j1; // 右移1位

}

}

}

单片机c51流水灯一亮一闪依次左移编程

下面是采用定时器定时1S(时钟晶振是11.0592MHz)的流水灯程序。采用左移函数_crol_(),此函数包含在intrinsic.h的头文件内。有不懂得再问,需要汇编的话,留言,再写给你。

#includereg52.h

#includeintrins.h

unsigned

int

a,temp;

void

main()

{

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

TR0=1;

temp=0xfe;

while(1)

{

if(a==20)

{

a=0;

P1=temp;

temp=_crol_

(temp,1);

}

}

}

void

T0_time0()interrupt

1

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

a++;

}