逻辑运算,库自带函数都可以实现位移的效果:1. a=a << 1, 表示新的a是旧的a的所有位都左移一位,新a的最后一位用0填补; 2. a=_crol_(a,1) 表示循环左移,新a是旧a的各个位的数字都左移一位得到的,其中新a的最后一位是旧a的第一位循环过去。
题目:以500ms为间隔,在板子上实现流水灯,即第一个灯亮500ms,接着第二个灯亮500ms,接着第三个一直循环。
#include<reg52.h>
#include<intrins.h> // _crol_这个函数所在的库进行调用
#define uint unsigned int
#define uchar unsigned char
void delayxms(uint xms) //延迟的那个带参数的函数的定义
{
uint i,j;
for(i=xms;i>0;i--)
for (j=110;j>0;j--);
}
uchar aa; //定义一个数据类型:signed char: -2^7 ~ 2^7-1(-128~127)unsigned char : 0 ~ 2^8-1(0~255)
void main() //主执行,运算函数!
{
aa=0xfe; //a= 1111 1110
while(1)
{
P1=aa; //第八位的那个灯首先亮了
delayxms(500); //上面亮着的灯持续个500ms
aa=_crol_(aa,1); // aa表示的数字 1111 1110进行一个循环左移一位的函数处理,a变成了11111101,这时候while语句一直为真,则又开始执行while的第一行语句,反复循环。
}
}