单片机补充案例--数字IO口呼吸灯

2021-03-03 14:46:25 浏览数 (1)

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

设备:

LED灯

这个案例用于解释常见的一种设计思想:软解码硬解码

软解码:需要使用CPU实现;

硬解码:需要定时器等硬件支持。

程序:

循环演示

代码语言:javascript复制
#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--); 		
     }
}

外部控制

代码语言:javascript复制
#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  ;				
}

0 人点赞