只需一步,快速開始
熱門: 51單片機 | 24小時必答區 | 單片機教程 | 單片機DIY制作 | STM32 | Cortex M3 | 模數電子 | 電子DIY制作 | 音響/功放 | 拆機樂園 | Arduino | 嵌入式OS | 程序設計
前輩們,指點一下喲。
原來用匯編編程很容易的就進行多字節的移位,現在剛開始學用Keil C編程,就搞不懂從哪下手:
就是比如一次性移位11個字節,比如左移,將最高字節的最高位移出丟失,并將下一字節的最高位移進前一字節的最低位,如此進行將后10個字節的最高位分別移進其前一字節的最低位,最后一個字節的最低位補0(或補1)。右移反過來。
匯編的時候有RRL,RRC就搞定了,C怎么弄啊?
使用道具 舉報
給你看一個C的移位流水燈程序吧!
#include <AT89X51.H>#include <../stdint.h>
#define PORT P1
void delay(){ uint16_t i; for(i=0; i<20000; i++);}
void led_8(){ uint8_t i; uint8_t tmp = 0x01; for(i=0; i<8; i++) { PORT = ~(tmp<<i);//左移 delay(); } tmp = 0x80; for(i=0; i<8; i++) { PORT = ~(tmp>>i);//右移 delay(); }}
void main(){ while(1) { led_8(); }}
我這樣做的,比如有這些字節要參與移位:unsigned char a[]={0xfe,0x25,0x32,0x56,0x4e,0x56,0xab,0xef,0xf3}:
a[ i]=a[ i]<<1|((a[i+1]&0x80)? 1:0); // i 由0到7 。
a[8]=a[8]<<1;
這樣子就可以同時將9個字節順次向前移一位,如果要連續移多位,再加個循環控制就行了。
我這樣做是想讓LED顯示屏上的漢字向左或向右移動,昨晚就這樣寫搞定了。
本版積分規則 發表回復 回帖后跳轉到最后一頁
手機版|小黑屋|51黑電子論壇 | 管理員QQ:125739409;技術交流QQ群281945664
Powered by 單片機教程網