标题: 单片机独立控制开关控制流水灯程序错误 [打印本页]
作者: 千岩 时间: 2022-3-28 18:15
标题: 单片机独立控制开关控制流水灯程序错误
大佬们,小白学习遇到问题了,还请大佬不嫌麻烦,指点一二。
事情:
本想用独立控制开关控制流水灯,但是,程序在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, 下载次数: 70)
程序图片
-
工程图.jpg
(291.3 KB, 下载次数: 61)
作者: lkc8210 时间: 2022-3-28 21:00
谁教你在函数中用while(1)的?
作者: 兴安xa 时间: 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();
}
}
作者: 千岩 时间: 2022-3-29 08:29
我自学的,老师们用的都是while(1)死循环。
而且,今天我分别测试了两个分装函数,发现是key()函数出的问题,于是便仔细检查每一句,最后发现是因为while(1)后面加了个分号,我已经狠狠掴了自己一个大鼻窦,希望我能记住这次教训,并由衷感谢您的留言。
作者: 千岩 时间: 2022-3-29 08:32
谢谢,我也找到自己的错误所在,问题就在于在while(1)后多加了一个分号,这种毛病不经意间~,由衷感谢你的教导。
作者: 千岩 时间: 2022-3-29 08:38
大佬们,这个问题已经解决,问题竟然是key()函数中的while(1)后多加了一个分号,这种低级错误确实难防,我以后会勤加练习,全力避免这样的错误。由衷的感谢大佬的帮助,我会仔细阅读各位的回复。
作者: laowang123222 时间: 2022-3-29 19:02
把按键的while(1)循环部分去掉,单独弄一个按键函数。然后放在main函数的大循环里
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |