單片機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中的移位符號。