标题: 单片机按键控制LED,程序加进去,完全控制不了,求助该咋办呀? [打印本页]

作者: 三三三皮蛋    时间: 2022-6-20 11:48
标题: 单片机按键控制LED,程序加进去,完全控制不了,求助该咋办呀?


单片机源程序如下:
#include<reg51.h>
sbit ZZ=P2^0;
sbit YZ=P2^1;
sbit QD=P2^2;
sbit HD=P2^3;
sbit DD=P2^4;
sbit ZUOZ=P1^0;
sbit YOUZ=P1^1;
sbit QIAND=P1^2;
sbit HOUD=P1^3;
sbit DAOD=P1^4;

void delay()   //定义延迟函数
{
unsigned char a,b;
for(a=0;a<200;a++)
for(b=0;b<200;b++);
}

void key()     //按键处理函数
{
        if(ZUOZ==0)
        {
                delay();
                if(ZUOZ==0)
                {
                        ZZ=~ZZ;
                }
                while(!ZUOZ);
        }

                if(YOUZ==0)
        {
                delay();
                if(YOUZ==0)
                {
                        YZ=~YZ;
                }
                while(!YOUZ);
        }

                if(QIAND==0)
        {
                delay();
                if(QIAND==0)
                {
                        QD=~QD;
                }
                while(!QIAND);
        }

                if(HOUD==0)
        {
                delay();
                if(HOUD==0)
                {
                        HD=~HD;
                }
                while(!HOUD);
        }

                if(DAOD==0)
        {
                delay();
                if(DAOD==0)
                {
                        DD=~DD;
                }
}
}
void main(void)   //主函数
{
if(ZUOZ==0)
{
while(1)
{
ZZ=0;
delay();
ZZ=1;
delay();
}
YZ=1;
QD=1;
HD=1;
DD=1;
}

if(YOUZ==0)
{
ZZ=1;
while(1)
{
YZ=0;
delay();
YZ=1;
delay();
}
QD=1;
HD=1;
DD=1;
}

if(QIAND==0)
{
ZZ=1;
YZ=1;
QD=0;
HD=1;
DD=1;
}

if(HOUD==0)
{
ZZ=1;
YZ=1;
QD=1;
HD=0;
DD=1;
}
if(DAOD==0)
{
ZZ=1;
YZ=1;
QD=1;
HD=1;
while(1)
{
DD=0;
delay();
DD=1;
delay();
}
}
}


作者: 这是个用户名    时间: 2022-6-20 16:03
你的程序这么多个while(1),你觉得没问题吗?
作者: wulin    时间: 2022-6-20 20:40
#include<reg51.h>
sbit ZZ=P2^0;
sbit YZ=P2^1;
sbit QD=P2^2;
sbit HD=P2^3;
sbit DD=P2^4;
sbit ZUOZ=P1^0;
sbit YOUZ=P1^1;
sbit QIAND=P1^2;
sbit HOUD=P1^3;
sbit DAOD=P1^4;

void delay()   //定义延迟函数
{
        unsigned char a,b;
        for(a=0;a<200;a++)
                for(b=0;b<200;b++);
}

void key()     //按键处理函数
{
        if(ZUOZ==0)
        {
                delay();
                if(ZUOZ==0)
                {
                        ZZ=~ZZ;
                }
                while(!ZUOZ);
        }

        if(YOUZ==0)
        {
                delay();
                if(YOUZ==0)
                {
                        YZ=~YZ;
                }
                while(!YOUZ);
        }
       
        if(QIAND==0)
        {
                delay();
                if(QIAND==0)
                {
                        QD=~QD;
                }
                while(!QIAND);
        }
       
        if(HOUD==0)
        {
                delay();
                if(HOUD==0)
                {
                        HD=~HD;
                }
                while(!HOUD);
        }

        if(DAOD==0)
        {
                delay();
                if(DAOD==0)
                {
                        DD=~DD;
                }
        }
}
void main(void)   //主函数
{
        while(1)
        {
                key();
        }
}



作者: hhh402    时间: 2022-6-21 23:59
楼主对基本电路可以说一窍不通,连基本的常识都不了解,89c52只有输出0才有20mA电流,输出1几乎没有电流,楼主LED接反了。LED限流电阻选5k,是闭着眼睛选的吧,欧姆定律是不是忘了。
作者: 三三三皮蛋    时间: 2022-6-22 13:04
大爷您说话真刺激,刚开始学3天,我要是懂我也不会发帖了,希望在你不擅长的事儿上也有人这么激励你,谢谢昂

作者: 小江哥哥    时间: 2022-6-22 13:43
程序死在循环中出不去了
作者: 小江哥哥    时间: 2022-6-22 13:45
程序死在循环中了
作者: sttt300    时间: 2022-6-22 13:50
刚开始学3天就能到这程度,那应该是要表扬的了,我都是初中开始学电路,那时只有理论,到了大学才能自己搭电路实践一下,用了这么多年,差太多了,没法比
作者: bbxyliyang    时间: 2022-6-22 16:23
while(1)
{
ZZ=0;
delay();
ZZ=1;
delay();
}这个while循环,系统死机了,出不来
作者: 人生涅槃    时间: 2022-6-22 17:37
改好了楼主讲一下,我来学习谢谢
作者: hylot    时间: 2022-6-22 17:59
改成二楼贴的程序
作者: hylot    时间: 2022-6-22 17:59
改成二楼贴的程序就OK
作者: 三三三皮蛋    时间: 2022-6-22 18:47
我重新搞了一下,但是他放在仿真里第四个灯的亮度不够,是为啥呢


#include <reg51.h>
#define uint unsigned int

void delay(uint z);
sbit K1=P1^0;         
sbit K2=P1^1;         
sbit K3=P1^2;     
sbit K4=P1^3;
sbit K5=P1^4;
sbit D1=P0^0;            
sbit D2=P0^1;
sbit D3=P0^2;
sbit D4=P0^3;
sbit D5=P0^4;
void main()
{
while(1)
{
D1=D2=D3=D4=D5=1;
if(K1==0)
{
D1=0;
delay(1000);
D1=1;
delay(1000);
}

if(K2==0)
{
D2=0;
delay(1000);
D2=1;
delay(1000);
}

if(K3==0)
{
D3=0;
}

if(K4==0)
{
D4=0;
}

if(K5==0)
{
D5=0;
delay(1000);
D5=1;
delay(1000);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1