找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4053|回复: 4
打印 上一主题 下一主题
收起左侧

单片机补齐和左移一位让多一个灯点亮是什么原理?

[复制链接]
跳转到指定楼层
楼主
ID:164707 发表于 2017-3-27 17:49 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
这个里面的补齐和左移一位让多一个灯点亮是什么原理,求大神讲解,谢谢了

  1. #include<reg52.h>  //52单片机头文件
  2. #include <intrins.h> //包含有左右循环移位子函数的库
  3. #define uint unsigned int    //宏定义
  4. #define uchar unsigned char  //宏定义
  5. void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
  6. {                                        //delay(500);大约延时500ms.
  7.         uint x,y;
  8.         for(x=z;x>0;x--)
  9.                 for(y=110;y>0;y--);        
  10. }
  11. void main()                    //主函数
  12. {
  13.         uchar a,i,j;
  14.         while(1)        //大循环
  15.         {
  16.                         a=0xfe;     //赋初值
  17.                         for(j=0;j<8;j++)
  18.                         {
  19.                                 for(i=0;i<8-j;i++)   //左移
  20.                                 {
  21.                                         P1=a;       //点亮小灯
  22.                                         delay(200); //延时200毫秒
  23.                                         a=_crol_(a,1); //将a变量循环左移一位
  24.                                 }
  25.                                 a=_crol_(a,j);   //补齐,方便下面的左移一位
  26.                                 P1=0xff;                 //全部关闭
  27.                                 a=a<<1;                        //左移一位让多一个灯点亮
  28.                         }
  29.         }
  30. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164707 发表于 2017-3-28 08:40 | 显示全部楼层
zl2168 发表于 2017-3-27 20:07
建议你keil编译后,打开P1口,运行(过程单步)一下,观测P1口空白跳转情况,可得到解答。但上述程序写得并 ...

a=_crol_(a,j);   //补齐,方便下面的左移一位
P1=0xff;              //全部关闭
a=a<<1;            //左移一位让多一个灯点亮
大神,这三句我单步运行看P1口直接就变成了0xff了,然后接直接进到for语句了,能给我详细讲解下吗,谢谢

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表