单片机学习小组
直播中

张昂笙

7年用户 964经验值
私信 关注

怎样实现普通IO口对LED灯亮度的控制呢

怎样实现普通IO口对LED灯亮度的控制呢?其程序代码该怎样去实现呢?

回帖(1)

王彬

2022-1-17 15:13:31
说明:不使用PWM口,而是使用数字口和时延函数模拟,从而实现普通IO口对LED灯的亮度控制。

LED灯 这个案例用于解释常见的一种设计思想:软解码硬解码
软解码:需要使用CPU实现;
硬解码:需要定时器等硬件支持。
程序:
循环演示



#include <8052.h>
     
#define LSA   P1_5                         
#define LSB   P1_6                         
#define LSC   P1_7                         
#define Led   P0                 

int  main(void)               
{
         unsigned int a;
         LSA = 0;
         LSB = 0;
         LSC = 0;            
     while(1)                               
     {                                  
                  Led = 0x00;
                //a = 50000;
                //a = 9;
                //a = 1; //1000
                a=100;
                while(a--);                
                 Led = 0xff;      
                //a = 50000;
                //a = 1;
                //a = 9;
                a=900;
                while(a--);                
     }
}
外部控制


#include<8052.h>

#define LSA P1_5                                       
#define LSB P1_6
#define LSC P1_7
#define Led P0

char brightness=0,a=0;

void EXint_Init(void);
void Delayms(unsigned int);                               
void EXINT0() __interrupt 0;

void main()
{
        EXint_Init();       
        LSA=0;
        LSB=0;
        LSC=0;                                               
        while(1)                                       
        {
                  Led = 0x00;
                a=brightness;
                while(a--);                
                 Led = 0xff;      
                a=255;
                while(a--);                        
        }                        
}

void EXint_Init()              
{
        IT0=1;                     
        IT1=0;                     
//        IPH=0x40;                  
        PX1=1;                     
        EA=1;                       
        EX0=1;                     
        EX1=1;                     
}


void Delayms(unsigned int xms)
{
        unsigned int i,j;
        for(i = xms;i > 0;i--)
        {
                for (j = 110;j > 0;j--);
        }
}

void EXINT0() __interrupt 0            
{
        brightness++;                               
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分