一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1102|回复: 8
收起左侧

[51单片机] stc15f104e程序求助

[复制链接]
发表于 2020-1-7 17:35 | 显示全部楼层 |阅读模式
程序我想按下后执行,程序。但是这个程序烧进去按键按下就执行程序拉。找拉一下午也没找到原因。
外置按键in,我要求是低=0电平为0-100%pwm亮,为1就是100%-0灭。但是现在只能实现亮。菜鸟实在找不到原因拉。
#include<reg51.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;
                                                }
                                        }
                }
        }
}


发表于 2020-1-8 00:06 | 显示全部楼层
是不是按下钮后LED渐亮,松开后渐灭?感觉程序复杂化了,不符合自己的思路的程序,看起来很累。
发表于 2020-1-8 14:13 | 显示全部楼层
程序我想按下后执行,程序。但是这个程序烧进去按键按下就执行程序拉。
发表于 2020-1-8 14:14 | 显示全部楼层
这两句话意思难道不一样么
发表于 2020-1-9 08:49 | 显示全部楼层
while( 1 ) {
   if ( key ) continue;
   sleep();
   if ( !key ) break;
}

程序前面加上这个...

点评

感谢,一会测试一下  详情 回复 发表于 2020-1-17 14:02
发表于 2020-1-10 17:31 | 显示全部楼层
语文不好,再见
 楼主| 发表于 2020-1-17 14:02 | 显示全部楼层
junyee 发表于 2020-1-9 08:49
while( 1 ) {
   if ( key ) continue;
   sleep();

感谢,一会测试一下
发表于 2020-1-17 14:53 | 显示全部楼层
我想楼主的意思是:上电后,按一下按键,LED就慢慢变亮,再按一下按键,LED就慢慢熄灭,再按一下,LED又慢慢变亮... ...
发表于 2020-1-19 14:51 | 显示全部楼层
换个带PWM的单片机,代码就简单多了,比如STC15W401AS

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-19 02:47 , Processed in 0.068538 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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