打印

a=a<<1看不懂,灯怎么会多亮了一个呢?

[复制链接]
977|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
楼大胖|  楼主 | 2017-3-26 08:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{                                        //delay(500);大约延时500ms.
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);       
}
void main()                    //主函数
{
        uchar a,i,j;
        while(1)        //大循环
        {
                        a=0xfe;     //赋初值
                        for(j=0;j<8;j++)
                        {
                                for(i=0;i<8-j;i++)   //左移
                                {
                                        P1=a;       //点亮小灯
                                        delay(200); //延时200毫秒
                                        a=_crol_(a,1); //将a变量循环左移一位
                                }
                                a=_crol_(a,j);   //补齐,方便下面的左移一位
                                P1=0xff;                 //全部关闭
                                a=a<<1;                        //左移一位让多一个灯点亮
                        }
        }
}

相关帖子

沙发
HWM| | 2017-3-26 09:57 | 只看该作者
左移一位,末位扑零。

使用特权

评论回复
板凳
xyz549040622| | 2017-3-26 14:36 | 只看该作者
移位分为循环移位和移位补数据这么两种。

使用特权

评论回复
地板
fengrenjie| | 2017-3-27 08:23 | 只看该作者
a=_crol_(a,1); //将a变量循环左移一位
a=a<<1;        //左移一位让多一个灯点亮
体会一下这两句语句的区别

使用特权

评论回复
5
@若水| | 2017-3-28 08:40 | 只看该作者
你的灯是不是低电平就被点亮的?a=_crol_(a,1); 左移时,应该是低位补1,a=a<<1;左移时,是低位补0,后面的自己思考

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝