找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机新人刚学,在学到LED流水程序有些不会

[复制链接]
跳转到指定楼层
楼主
ID:1015310 发表于 2022-4-2 23:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个闪烁间隔300ms左右还有:增加闪烁间隔时间(一次增加50ms)
        增加闪烁间隔时间(一次减少加50ms)   
单片机程序写到这不会写了  求求帮帮可以嘛   需要咋改

#include<AT89X52.H>
#include<intrins.h>
sbit SW=P3^0;
typedef unsigned int u16;
void delay(u16 i)
{
         
                while(i--);
}

void main()
{
  unsigned char i;
        unsigned char temp;
         unsigned int CYCLE=600,PWM_LOW=0;

        
               
        if(SW!=0)
        {
                temp=0x80;
                for(i=0;i<8;i++)
                  {
                        P1=~temp;
                        delay(50000);
                        temp=_cror_(temp,1);
                  }
                        
        }        

        if(SW==0)
          {
                        
                temp=0x01;
                 for(i=0;i<8;i++)
      {
                        P1=~temp;
                        delay(50000);
                  
                                
                        temp=_crol_(temp,1);
            }
               
    }

}

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

使用道具 举报

沙发
ID:121859 发表于 2022-4-3 08:44 | 只看该作者
你这个程序框架是无法实现所说的功能的。可以考虑用定时器,或者增加几个变量来尝试。最好还是用中断比较好。

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:1015310 发表于 2022-4-3 09:24 | 只看该作者
zhxiufan 发表于 2022-4-3 08:44
你这个程序框架是无法实现所说的功能的。可以考虑用定时器,或者增加几个变量来尝试。最好还是用中断比较好 ...

谢谢啦   可是我还是不太懂  因为刚学有些东西没学到      我现在想做的是用开关改变流水灯的走向 和 延迟递增
回复

使用道具 举报

地板
ID:842100 发表于 2022-4-3 11:20 | 只看该作者
你可以用这种方式,能实现就是太啰嗦了,适合我这样的新手,你试试肯定可以完成你说的功能,精确度不高,可以用debug,尽量减小误差
void main()
{   sbit  SW=P3^0;//尽量不用这个端口,P3口的端口都是双功能口,可以用P012的任意端口
   unsigned  long i=0;
  unsigned char  j=xx;
  while(1)
  {
     while(j--)//这里的值需要计算看下面一次循环需要多少时间给j赋值
    {
      SW=1;
      for(i=0;i<xx;i++);
      SW=0;
      for(i=0;i<xx;i++);
    }
     j=xx;//
while(j--)//这里的值需要计算看下面一次循环需要多少时间给j赋值
    {
      SW=1;
      for(i=0;i<xx;i++);
      SW=0;
      for(i=0;i<xx;i++);
    }
  }
}


评分

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

查看全部评分

回复

使用道具 举报

5#
ID:96744 发表于 2022-4-3 15:38 | 只看该作者
把Delay(50000) 改成Delay(X),然后,通过按键改变X的值即可。

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:1015310 发表于 2022-4-4 08:15 | 只看该作者
alunli 发表于 2022-4-3 15:38
把Delay(50000) 改成Delay(X),然后,通过按键改变X的值即可。

我试过了  改为X就会闪得超级很快
回复

使用道具 举报

7#
ID:1007932 发表于 2022-4-4 17:05 | 只看该作者
有一个简单的方法,把端口的状态值写到一个数组里(数组最好加code关键字),然后再循环延时调用。
回复

使用道具 举报

8#
ID:1015310 发表于 2022-4-7 07:50 | 只看该作者
一事无成 发表于 2022-4-4 17:05
有一个简单的方法,把端口的状态值写到一个数组里(数组最好加code关键字),然后再循环延时调用。

不会呀。。。听不懂
回复

使用道具 举报

9#
ID:807651 发表于 2022-4-7 08:41 | 只看该作者
herohr0209 发表于 2022-4-4 08:15
我试过了  改为X就会闪得超级很快

有没有给X赋值啊,按现在一开始X=50000,通过按键1按一下 X=X+5000,按键2按一下X=X-5000,通过按键改变延时时间。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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