找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何在这个单片机程序加一个 循环4次 二极管熄灭?求帮助

[复制链接]
跳转到指定楼层
楼主
ID:613121 发表于 2019-9-18 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,k;
void delay(uint);
void main()
{
while(1)
{
temp=0Xfe;
        for(k=0;k<3;k++)
        {
        P1=temp;
                delay(200);
                temp=_crol_(temp,3);
        }
        temp=0X7f;
        for(k=0;k<8;k++)
                {
        P1=temp;
                delay(300);
                temp=_cror_(temp,1);
        }
}
}
void delay(uint x)
{
uint i,j;
        for(i=0;i<x;i++)
        for(j=0;j<110;j++);
}




怎么加一个 循环4次 二极管熄灭,求大神给个思路

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

使用道具 举报

沙发
ID:462827 发表于 2019-9-18 16:11 | 只看该作者
在while(1)循环里的最外层加就行了
回复

使用道具 举报

板凳
ID:293363 发表于 2019-9-18 20:19 | 只看该作者
uchar m;
回复

使用道具 举报

地板
ID:275826 发表于 2019-9-18 21:42 | 只看该作者
while(1)
{for(i=0;i<4;i++){
temp=0Xfe;
        for(k=0;k<3;k++)
        {
        P1=temp;
                delay(200);
                temp=_crol_(temp,3);
        }
        temp=0X7f;
        for(k=0;k<8;k++)
                {
        P1=temp;
                delay(300);
                temp=_cror_(temp,1);
        }
}
}
P1=0xff;
}
回复

使用道具 举报

5#
ID:601863 发表于 2019-9-18 22:31 | 只看该作者
我现在学习标志位,所以用标志位,在你原有程序上加入了a,b两个标志位。IF语句检测b的状态流水灯循环,每循环一次让a自加一。IF语句检测a的状态,加到四变更b状态,b变更流水灯不在循环。
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,k,a,b;
void delay(uint);
void aaaa();
void bbbb();
void main()
{   
    b=1;   //标志位赋初值                 
    while(1)
    {
        bbbb();
        aaaa();                 
     }
}
void delay(uint x)
{
uint i,j;
        for(i=0;i<x;i++)
        for(j=0;j<110;j++);
}

void aaaa()
{
    if(b==1)   //检测标志位状态
    {
        temp=0Xfe;
        for(k=0;k<3;k++)
        {
            P1=temp;
            delay(200);
            temp=_crol_(temp,3);
        }
        temp=0X7f;
        for(k=0;k<8;k++)
        {
            P1=temp;
            delay(300);
            temp=_cror_(temp,1);
        }
    }
    a++;         //标志位自加一
}

void bbbb()
{
    if(a==4)     //检测标志位状态
        b=0;     //标志位变更
    P1=0xff;   //熄灭
}
回复

使用道具 举报

6#
ID:613326 发表于 2019-9-19 09:39 | 只看该作者
H方与圆H 发表于 2019-9-18 22:31
我现在学习标志位,所以用标志位,在你原有程序上加入了a,b两个标志位。IF语句检测b的状态流水灯循环,每循 ...

未看到您的问题点,仅对编程习惯唠叨两句

变量声明时赋初值是个好习惯,变量a,使用前未赋初值;
尽量少用全局变量,子程序命名尽可能有意义;
建议抽空可以阅读《代码大全2》了解一下防御式编程,有利于后期复杂度高的项目代码维护
回复

使用道具 举报

7#
ID:272119 发表于 2019-9-20 19:33 | 只看该作者
能用局部变量肯定用局部变量,做一个累积计数器呀,循环计数到4就LED翻转一次并计数清零.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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