单片机c语言移位
1. 用单片机移位实现,该怎么写程序啊,用C语言,主要是移位部分不会写
这个就是跑马灯程序嘛,你看看 我写的:
#include <REGX52.H>
#include <intrins.H> 这个是调用单片机头文件里面的函数,你自己查查书籍啊,要调用的话就要写这个头文件 本程序 调用的移位函数啦 就是左右移动函数
#define uchar unsigned char
#define uint unsigned int
uchar aa ;
void delay(uint z ) //延时程序,延时准确为1MS;
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}
void main()
{
uint i,j;
while(1)
{
aa=0xfe;因为要亮一个灯撒 所以就是1111 1110呀 这就是0xfe的含义啊
for(i=8;i>0;i--) //左移程序
{
P2=aa;
delay(500) ;
aa=_crol_(aa,1);这个就是调用函数的使用方法,这个是左移动一位,意思是把aa左移一位 在赋值给aa哦,这样再P2=aa;不就把移动的数据传到P2口了吗,懂了吧
}
aa=0x7f;这个因要亮一个等 也是一样的道理0111 1111是吧 就是0x7f 啦
for(i=7;i>0;i--) //右移程序
{
P2=aa;
delay(500) ;
aa=_cror_(aa,1);这里用法还是与左移动一样的道理 ,
}
}
}
2. 单片机 移位操作 右移 C语言
aa=_crol_(aa,1); //左移一位
aa=_cror_(aa,1); //右移一位
可以打开:intrins.h,查看。
3. 单片机C语言左移或右移多位是一次完成的吗
楼主所考虑的,很正确。
可以观察C程序在编译后,生成的汇编语言,
即可验证楼主的想法:
-------------------
35:main()
36:{
37:
38:charxx=1;------C语言
C:0x008F7F01MOVR7,#0x01
39:P0=xx<<3;-----C语言
C:0x0091EFMOVA,R7
C:0x009233RLCA--真是左移三次
C:0x009333RLCA
C:0x009433RLCA
C:0x009554F8ANLA,#0xF8
C:0x0097F580MOVP0(0x80),A
-------------------
共用了六条汇编指令,才实现P0=xx<<3;。
如果是移位7次,也许会用反移一次来代替。
楼主自己试试看吧。
4. C语言和单片机中的左移右移
# include "reg51.h" // 包含头文件
#define uchar unsigned char
void delay02s(void) // 延时0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}
void main (void) // 主函数
{
uchar i,j;
while (1) // 死循环
{
j=0x01; // j初始化为0x01,左移初始值
for(i=0;i<8;i++) // for循环语句,完成8个循环
{
P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出
delay02s( ); // 延时0.2s
j= j<<1; // 左移1位
}
j=0x80; // 设置右移初始值j为0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}
5. 单片机程序中数组中的值怎么实现位左(右)移(C语言)
data = nBitmapDot[i] >> 1; // nBitmap[i]右移一个二进制位,与 data = nBitmapDot[i] / 2; 同效。
data = nBitmapDot[i] << 1; // nBitmap[i]左移一个二进制位,与 data = nBitmapDot[i] * 2; 同效。
要说明的是移位操作(<< 或 >>)效率更高。
6. 单片机程序中数组中的值怎么实现位左(右)移(C语言)
data
=
nBitmapDot[i]
>>
1;
//
nBitmap[i]右移一个二进制位,与
data
=
nBitmapDot[i]
/
2;
同效。
data
=
nBitmapDot[i]
<<
1;
//
nBitmap[i]左移一个二进制位,与
data
=
nBitmapDot[i]
*
2;
同效。
要说明的是移位操作(<<
或
>>)效率更高。
7. 单片机 移位操作 右移 C语言
C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用<< 左移, 右移>>这两个C中的移位符号。