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 @   Unclesundada  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示