普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2125|回复: 2

PWM呼吸灯,我做的是一个按键控制渐灭一个控制渐亮,哪里错了?

[复制链接]

5

主题

6

帖子

26

积分

新手上路

Rank: 1

积分
26
发表于 2021-10-24 14:31:24 | 显示全部楼层 |阅读模式
1金钱
#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit pwm=P2^0;
sbit k1=P3^1;
sbit k2=P3^0;           
bit dir;                    
u16 count,timer,value;   

void tim0_init()        
{
        TMOD=0x01;         
        TH0=0XFF;           
        TL0=0XFF;
        EA=1;               
        ET0=1;              
        TR0=1;              
}

void delay(u16 i)
{
        while(i--);
}

void main()
{
        tim0_init();
        while(1)
                {
                if(k1==0)
                {
                delay(100);
                if(k1==0)
                {
               
                dir=1;
                }
                while(!k1);
                }
                if(k2==0)
                {
                delay(100);
                if(k2==0)
                {
               
                dir=0;
                }
                while(!k2);
                }

                        if(count>100)     
                        {
                                count=0;
                                if(dir==0)
                                {  
                                        value--;
                                }
                                if(dir==1)
                                {
                                        value++;
                                }
                        }
                        if(timer>1000)
                        {  
                                timer=0;
                        }
                        if(value==1000)
                        {
                                pwm=1;
                        }
                        if(value==0)
                        {
                                pwm=0;
                        }
                        if(timer<value)
                        {
                                pwm=1;
                        }
                        else
                        {
                                pwm=0;
                        }
                }
}

void tim0() interrupt 1   
{
        TH0=0XFF;
        TL0=0XFF;
        count++;
        timer++;
}


我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

0

主题

7

帖子

36

积分

新手上路

Rank: 1

积分
36
发表于 2021-10-25 19:55:17 | 显示全部楼层
可能是你没控制好value值,然后它在运行过程中超出范围。
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-4 18:27 , Processed in 0.100028 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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