数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1895|回复: 7

[other] 51程序求助 按下key我的led为啥会闪。

[复制链接]
发表于 2020-1-5 16:21:33 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
程序是:上电默认LED为0灭,当key被按一下key,LED:0-100%亮保持,不管in外置开关是什么状态,在按一下key,LED:0-100%灭保持,不管in外置开关是什么状态;in外置拨动开关,默认为1高电平,LED为0灭,拨动开关in==0,LED:0-100%亮保持

现在按下key不松开,LED总会闪烁。是我程序那里写错拉吗,菜鸟才开始学习~往大神指点一二。

#include<stc15f104e.h>
sbit LED=P3^2;
sbit key=P3^5;
sbit in=P3^4;

//bit keybuf = 1;
//bit backup = 1;

unsigned char light;//占空比
unsigned char j=0;//步进

/*        ÑÓʱº¯Êý       */
void delay(unsigned char d)
{
        unsigned char i;
        while(--d!=0)
                {
                        for(i=0;i<20;i++);
                }
}

void delay130ms(void)
{
        unsigned char a,b,c;
                for(c=11;c>0;c--)
                        for(b=16;b>0;b--)
                                for(a=218;a>0;a--);
}

void pwm(unsigned char a)
{
        LED=0;
        delay(a);
        a=~a;
        LED=1;
        delay(a);
        a=~a;
}

void main()
{
    unsigned char keystatus = 1,flag=0;
                delay130ms();
                LED=0;//ϨÃðled      
        while(1)
        {       
                if(!key)  //key check
                {
                        if(!key)  //key check
                        {
                                if(key==0)  //key check
                                {
                                keystatus=!keystatus;
                                flag=1;       
                                }
                        }
                }
                if(flag)//Æô¶¯ÏÔʾ
                        {
                                light+=j;
                                if(keystatus)
                                        {       
                                                j=1;
                                                if(light==0xfe)
                                                flag=0;
                                                pwm(light);
                                                LED=0;
                                        }
                               
                        else{
                                                j=0xff;
                                                if(light==1)
                                                flag=0;
                                                pwm(light);
                                                LED=1;
                                        }
                       
                        }
                //pwm(light);            //OUT PWM

                if(keystatus) //单片机没有被电亮
                {
                   if(in==0)
                                   {
                                                if(in==0)
                                                {
                                                        keystatus=0;
                                                        flag=1;
                                                }
                                        }
                }
        }
}


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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-5 15:09 , Processed in 0.187200 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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