⑴ 单片机C语言流水灯移位指令
//没有编译过,大概思路就这样
#define P_LED P1; //定义到你自己的端口
void main(void)
{
unsigned char circledata=0x01,i=0;
while(1)
{
for(i=0;i<4;i++) //显示范围 P_LED.0:P_LED3
{
P_LED=circledata<<i;
Delay_ms(1000);//根据自己的晶振写延时1S的函数
}
circledata=0xfe;
for(i=3;i>=0;i--) //显示范围 P_LED.3:P_LED.0
{
P_LED=circledata<<i;
Delay_ms(1000);//根据自己的晶振写延时1S的函数
}
}
return;
}
⑵ 请教单片机c语言移位问题
移位分为左移位和右移位,看你的系统精度,就是操作数是几位的,通常案例计算是以8位较多,按左右方向移动数字,不够的位数补上0就OK了。
⑶ 单片机 移位操作 右移 C语言
C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用<< 左移, 右移>>这两个C中的移位符号。
⑷ 单片机 移位操作 右移 C语言
先说第一个问题:
比如用查表法将结果保存到变量i中,查表变量为x,则i=table[x],记住c语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02是table[1],以此类推。
再说第二个问题:
比如说从p1.0口发送出去,则可以写为
sbitout=p1^0;//定义out为p1.0口,这样今后好写程序
chari;
for(i=0;i<8;i++)
{
out=data&0x80;//因为高位在前,将它写成二进制就明白了
data<<=1;
}
上面的程序就能搞定了;
应该是所有的单片机都有cy位(不知道浮点dsp有没有);
c语言中左移和右移之后低位或高位自动补零,cy位也保持为零(视编译器而定,这个得看编译器手册),有些编译器提供了循环移位的函数;
还有什么不明白的补充问题就是
⑸ 单片机循环移位C语言,即让如将二进制数,形如:(ABCD EFGH),移位后变为(HGFE DCBA)
你这个虽然有规律,属于镜像交换,简单移位做不到。
下面用old代表原数,new代表新数
char old,new;//定义两个变量
old=原数; // 将ABCDEFGH赋给old;如:old=0xf0;
new=0;
for(i=0;i<8;i++)
{
new<<=1;
if((old&0x01)==0x01) new|=0x01;
old>>=1;
}
执行后新数new,就是你要的镜像交换的数,这时new就等于HGFEDCBA
用心回答,望你采纳。
⑹ 单片机C语言右移指令怎么用
用这种移位语句,就是这种结果。
你试试:_crol_()和_cror_()移位函数。
需要先加上头文件:
#include<intrins.h>
⑺ 用单片机移位实现,该怎么写程序啊,用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);这里用法还是与左移动一样的道理 ,
}
}
}
⑻ 单片机程序中数组中的值怎么实现位左(右)移(C语言)
data
=
nBitmapDot[i]
>>
1;
//
nBitmap[i]右移一个二进制位,与
data
=
nBitmapDot[i]
/
2;
同效。
data
=
nBitmapDot[i]
<<
1;
//
nBitmap[i]左移一个二进制位,与
data
=
nBitmapDot[i]
*
2;
同效。
要说明的是移位操作(<<
或
>>)效率更高。
⑼ 单片机 移位操作 右移 C语言
aa=_crol_(aa,1); //左移一位
aa=_cror_(aa,1); //右移一位
可以打开:intrins.h,查看。
⑽ 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位
}
}
}