找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机独立控制开关控制流水灯程序错误

[复制链接]
跳转到指定楼层
楼主
大佬们,小白学习遇到问题了,还请大佬不嫌麻烦,指点一二。
事情:
本想用独立控制开关控制流水灯,但是,程序在protues上模拟却没有反应,而且,我不知道怎么线上调试程序,所以,一直无法发现错误在哪?
希望大佬们不吝指教,救救小白。
下面是程序的截图和程序文本:
#include<reg52.h>
#define LED P2
typedef unsigned int u16;
typedef unsigned char u8;
sbit key=P3^1;
int daley(u8 x)
{
    u8y;
    for(x;x>0;x--)
    {
       for(y=110;y>0;y--);
    }
    return 0;
}
int Leds()
{
   u16 num;
   u16 LED_1;
   LED=0xff;
    while(1)
    {
       LED_1=0Xfe;
       LED=0Xfe;
       daley(100);
       for(num=7;num>0;num--)
       {
           LED_1=LED_1<<1|0X01;
           LED=LED_1;
           daley(100);
       }
    }
    return 0;
}
int KEY()
{
    while(1);
    {
       if(key==0)
       {
           daley(2);
           if(key==0)
           {
               Leds();
           }
           while(!key);
       }
    }
    return 0;
}
int main()
{
    while(1)
    {
       KEY();
//     Leds();
    }
    return 0;
}


程序.jpg (61.76 KB, 下载次数: 40)

程序图片

程序图片

工程图.jpg (291.3 KB, 下载次数: 43)

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

使用道具 举报

沙发
ID:161164 发表于 2022-3-28 21:00 | 只看该作者
谁教你在函数中用while(1)的?
回复

使用道具 举报

板凳
ID:979299 发表于 2022-3-28 22:42 | 只看该作者
改动一下,看看能跑起来不
#include<reg52.h>
#define LED P2
typedef unsigned int u16;
typedef unsigned char u8;
sbit key=P3^1;
void daley(u8 x)
{
    u8 y;
    for(x;x>0;x--)
    {
       for(y=110;y>0;y--);
    }
   
}
void Leds()
{
   u16 num;
   u16 LED_1;
   LED=0xff;
    {
       LED_1=0Xfe;
       LED=0Xfe;
       daley(100);
       for(num=7;num>0;num--)
    {
           LED_1=LED_1<<1|0X01;
           LED=LED_1;
           daley(100);
       }
    }
}

void KEY()

{
   if(key==0)
   {
       daley(2);
       if(key==0)
      {
           Leds();
       }
       while(!key);

   }

}


void main()

{

    while(1)

    {
       KEY();
       Leds();
    }
}
回复

使用道具 举报

地板
ID:1013777 发表于 2022-3-29 08:29 | 只看该作者
lkc8210 发表于 2022-3-28 21:00
谁教你在函数中用while(1)的?

我自学的,老师们用的都是while(1)死循环。
而且,今天我分别测试了两个分装函数,发现是key()函数出的问题,于是便仔细检查每一句,最后发现是因为while(1)后面加了个分号,我已经狠狠掴了自己一个大鼻窦,希望我能记住这次教训,并由衷感谢您的留言。
回复

使用道具 举报

5#
ID:1013777 发表于 2022-3-29 08:32 | 只看该作者
兴安xa 发表于 2022-3-28 22:42
改动一下,看看能跑起来不
#include
#define LED P2

谢谢,我也找到自己的错误所在,问题就在于在while(1)后多加了一个分号,这种毛病不经意间~,由衷感谢你的教导。
回复

使用道具 举报

6#
ID:1013777 发表于 2022-3-29 08:38 | 只看该作者
大佬们,这个问题已经解决,问题竟然是key()函数中的while(1)后多加了一个分号,这种低级错误确实难防,我以后会勤加练习,全力避免这样的错误。由衷的感谢大佬的帮助,我会仔细阅读各位的回复。
回复

使用道具 举报

7#
ID:1013784 发表于 2022-3-29 19:02 | 只看该作者
把按键的while(1)循环部分去掉,单独弄一个按键函数。然后放在main函数的大循环里
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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