2.8 利用C51库函数实现流水灯

逻辑运算,库自带函数都可以实现位移的效果: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的第一行语句,反复循环。

    }  
}

猜你喜欢

转载自blog.csdn.net/weixin_44386138/article/details/121532108
2.8
今日推荐