首页 > 其他分享 >10-PWM脉宽调制信号的发生与控制

10-PWM脉宽调制信号的发生与控制

时间:2023-10-06 17:48:02浏览次数:33  
标签:case 脉宽调制 10 void P2 duty break state PWM

PWM脉冲调制信号的发生与控制

20231006141006

1、代码思路:

(1)我们可以利用定时器规定周期为10ms(100HZ),通过调节高电平时间来产生想要的PWM波,不同的亮度对应着不同占空比。

(2)首先我们先通过定时器产生四种不同的亮度,然后编写可以转换四种不同状态的按键,走后把他们整合起来

#include <REGX52.H>
sbit L1 = P0^0;
sbit S7 = P3^0;
unsigned char count = 0;
unsigned char pwm_duty = 0;
void Delay(unsigned int t) {

	
	while(t--);
}

void _74HC138(unsigned char n) {
	
	switch(n) {
		case 4:	P2 = (P2 & 0x1f) | 0x80;
		break;
		case 5:	P2 = (P2 & 0x1f) | 0xa0;
		break;
		case 6:	P2 = (P2 & 0x1f) | 0xc0;
		break;
		case 7:	P2 = (P2 & 0x1f) | 0xe0;
		break;
	
	}

}  
void sysInit(void) {
	_74HC138(5);
	P0 = 0x00;
	_74HC138(4);
	P0 = 0xFF;
}


void Timer0Init(void) {
	
	TMOD = 0x02;
	// 100us 
	TH0 = 256 - 100;
	TL0 = 256 - 100;
	EA = 1;
	ET0 = 1;
	
	// TR0 = 1;
	

}
unsigned char state = 0;
void Scan_Key(void) {
	
	if(S7 == 0) {
		Delay(300);
		if(S7 == 0) {
			
			
			switch(state) {
				case 0:
					TR0 = 1;   // 开启定时器
					L1 = 0;
					pwm_duty = 10;
					state = 1;
					break;
				case 1:
					pwm_duty = 50;
					state = 2;
					break;
				case 2:
					
					pwm_duty = 90;
					state = 3;
					break;
				case 3:
					
					L1 = 1;
					state = 0;
					TR0 = 0;
					
					break;
			
			}
			
			while(S7 == 0);
			
		
		}
	}

}


void Timer0Rountine () interrupt 1 {
	count++;
	// 20      20
	if(count == pwm_duty) {
		// 即对占空比的切换
		L1 = 1;            // count == pwm_duty 由低电平置为高电平
		
	}else if(count == 100) {
		L1 = 0;
		count= 0;
	}
	
	
}
void main(void) {
	sysInit(); 
	_74HC138(4);
	// 默认关灯
	L1 = 1;
	Timer0Init();
	while(1) {
		Scan_Key();
	}
	

	
	
	
}

标签:case,脉宽调制,10,void,P2,duty,break,state,PWM
From: https://www.cnblogs.com/bky111/p/17744755.html

相关文章

  • 2023-10-06
    一、第一次直接就焊MCU了,C8T6都焊的乌漆嘛黑的,再也不用松香了。SMT报价发BOM和Gerber过去,总共遥控和核心板2块贴片,不包含运费物料。要600大洋。。。。。 二、买了块练习板,又买了几块C8T6,总不可能焊坏100次。1.MCU焊接方法:所有焊点上锡,点焊法。  2.小元器件贴片:焊点上锡......
  • 如何彻底关闭win10自动更新 win10彻底关闭自动更新方法【步骤】
    如何彻底关闭win10自动更新win10彻底关闭自动更新方法【步骤】发布时间:2022-03-3019:10  原文:IT百科 https://product.pconline.com.cn/itbk/software/dnyw/1492/14922063.htmlwin10的自动更新可谓是非常顽固,很多用户在网上试了各种关闭win10自动更新的方法,......
  • 2023.10.5测试
    \[\text{NOIP模拟赛-2023.10.5}\]T1魔法少女定义\(f(i)\)为\(i\)所有约数的异或和,求\(f(1)\simf(n)\)的异或和\(1\leqn\leq10^{14}\)容易想到枚举约数然后计算出约数出现的次数并对答案做贡献,复杂度\(\mathcal{O}(n)\)发现约数\(x\)出现的次数即\(\left\lfloor......
  • 【GJOI 2023.10.5 T1】 雷老师的正偏态分布
    雷老师的正偏态分布题意:给出一个长度为\(n\)的\(a\)数组,其中\(1\lea_i\leV,1\lei\len\)。统计其中的满足平均数严格小于中位数且大小为奇数的子集数量,\(n\le100,V\le800\),时限\(4\)s。输入:510127910输出:8首先,可以考虑排序,保证一个子集中小......
  • 2023-10-06 useState数据渲染不同步==》async await
    业务:点击按钮增加数据并渲染出来。框架:antd+ts+react。原来写法:const[tagData,setTagData]=useState<Array<number>>([]);点击事件://添加标签constaddTag=()=>{letarr:(number)[]=[];arr=tagData;arr.push(Math.floor(Math.random()......
  • 2023-10-06 Warning: [antd: Switch] `value` is not a valid prop, do you mean `che
    该报错意思是你用的这个switch组件对应的属性应该是checked而不是value,后者应该是antd默认设置的属性,可以通过valuePropName来手动指定对应的属性值。如:<FormItemname="status"label="状态"valuePropName="checked"rules={[{required:true}]}><Switch/></FormIte......
  • 10月2总结
    在学习中使用哪些工具“工欲善其事必先利其器。”在网络技术的学习过程中,往往需要使用一些工具,来辅助我们学习,以此将抽象的技术通过具体的方式来表现出来,便于加深网络理论的印象。今天,我将列举我在学习过程中使用过的工具。以网络仿真工具为例,建议初学者选择一个厂商的软件作为......
  • 10月6日总结
    访问者模式(VisitorPattern)是一种强大的行为型设计模式,它允许你在不改变被访问对象的类的前提下,定义新的操作和行为。本文将详细介绍访问者模式,包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景、优缺点、类似模式以及最后的小结。1模式的定义访问者模式允许......
  • 10月5日总结
    四、用go语言,重写ENQUEUE和DEQUEUE的代码,使之能处理队列的下溢和上溢。文心一言:在Go语言中,我们可以使用切片来实现队列。下面是如何实现ENQUEUE和DEQUEUE操作,同时处理队列的下溢和上溢的情况:packagemainimport"fmt"typeQueuestruct{elements[]interface{}}......
  • 10月4日总结
    在deepin23上编译gcc13.2deepin20素以软件版本过老被人诟病,换成最新的deepin23之后情况大有好转,但是gcc版本为11.2,鄙人对此仍有意见,所以特意研究了如何编译一份较新的gcc来用。1.下载源码包http://mirrors.ustc.edu.cn/gnu/gcc/我相关在中科大镜像站下载东西,选择13.2版本的压......