10-PWM脉宽调制信号

#include "reg52.h"

sbit L1 = P0^0;
sbit S7 = P3^0;

void delay(unsigned char t)
{
	while(t--);
}

void HC573()
{
	P2 = (P2 & 0x1f) | 0x80;
}
//=============PWM===========

unsigned char count = 0;
unsigned char pwm_duty = 0;
void InitTimer0()
{
	TMOD = 0x01;
	TH0 = (65535 - 100)/256;
	TL0 = (65535 - 100)%256;
	
	ET0 = 1;
	EA = 1;
	
}

void Timer0() interrupt 1
{
	TH0 = (65535 - 100)/256;
	TL0 = (65535 - 100)%256;
	count ++;
	
	if(count == pwm_duty)
	{
		L1 = 1;
	}
	else if(count == 100)
	{
		L1 = 0;
		count = 0;
	}
}


//===========按键相关函数============
unsigned char state = 0;
void scan()
{
	if(S7 == 0)
	{
		delay(100);
		if(S7 == 0)
		{
			
			switch(state)
			{
				case 0:
					L1 = 0;
					TR0 = 1;
					pwm_duty = 10;
					state = 1;
				break;
				
				case 1:
					L1 = 0;
					TR0 = 1;
					pwm_duty = 50;
					state = 2;
				break;
				
				case 2:
					L1 = 0;
					TR0 = 1;
					pwm_duty = 90;
					state = 3;
				break;
				
				case 3:
					L1 = 1;
					TR0 = 0;
					state = 0;
				break;
				
			}
			while(S7 == 0);
		}
	}
}

void main()
{
	HC573();
	InitTimer0();
	L1 = 1;
	while(1)
	{
		scan();
	}
}

 

posted @ 2022-12-29 11:32  Unclesundada  阅读(58)  评论(0)    收藏  举报