只需一步,快速开始
热门: 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 单片机教程网