找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机流水灯代码问题

[复制链接]
跳转到指定楼层
楼主
这是我的代码,请问为什么仿真的时候会一个灯先走一遍,然后才开始按顺序1到8个等依次走一遍

DENG.png (35.6 KB, 下载次数: 26)

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

使用道具 举报

沙发
ID:505032 发表于 2019-10-30 06:43 | 只看该作者
编译后看汇编代码,单步运行不就知道了
回复

使用道具 举报

板凳
ID:332444 发表于 2019-10-30 06:45 | 只看该作者
写了2种位移,嵌套循环,也算是花样流水灯了,自己写的会不知道流水灯效果,那你不是写,是抄袭的?你可分别把其中一条移位语句注释掉试看。
回复

使用道具 举报

地板
ID:89515 发表于 2019-10-30 07:49 来自手机 | 只看该作者
k值不对,第一遍后a的初值被改变为0xff
回复

使用道具 举报

5#
ID:235200 发表于 2019-10-30 07:52 | 只看该作者
k=1时,此时a=0xfe,for (l=1;l<=8;l++)循环控制一个灯走一遍,k=2时,此时a=0xff,执行a=a<<k后,a=0xfc,才符合你编程逻辑
回复

使用道具 举报

6#
ID:213173 发表于 2019-10-30 08:07 | 只看该作者
  1. #include<reg52.h>

  2. void delay(unsigned int ms)
  3. {
  4.         unsigned int i,j;
  5.         for(i=ms;i>0;i--)      
  6.                 for(j=114;j>0;j--);
  7. }

  8. void main()
  9. {
  10.         unsigned char a=0xfe;
  11.         while(1)
  12.         {
  13.                 P1=a;
  14.                 delay(1000);
  15.                 a=(a<<1)+1;
  16.                 if(a==0xff)
  17.                         a=0xfe;
  18.         }
  19. }
复制代码
回复

使用道具 举报

7#
ID:632427 发表于 2019-10-30 10:14 来自手机 | 只看该作者
mengzhixinheng 发表于 2019-10-30 07:49
k值不对,第一遍后a的初值被改变为0xff

对,在第二个循环要用其他参数代替a,谢谢
回复

使用道具 举报

8#
ID:632427 发表于 2019-10-30 10:15 来自手机 | 只看该作者
csmyldl 发表于 2019-10-30 07:52
k=1时,此时a=0xfe,for (l=1;l

谢谢,知道了,是第二个循环里面要用一个参数代替a,我没注意直接改变a的值了
回复

使用道具 举报

9#
ID:632427 发表于 2019-10-30 19:49 | 只看该作者
#include<reg52.h>


DELAY(unsigned int ms)      
{
    unsigned int i,j;
    for(i=ms;i>0;i--)
        for(j=114;j>0;j--);
    return 0;  
}
void main()
{
        int a,b,k,l;
        while(1)
        {        a=0xfe;          
                for(k=0;k<8;k++)
                {        if(k>0)
                                a=a<<1;
                        b=a;                       
                        for(l=k;l<8;l++)
                        {        P1=b;
                                DELAY(400);
                                b=(b<<1)+1;       
                        }
                }         
        }
}
这是我的最终代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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