单片机学习笔记.PWM

PWM原理: 

  • 频率=\frac{1}{​{t{s}}}
  • 占空比:\frac{​{t{H}}}{​{t{s}}}
  • 精度=占空比变化步距 

 电机驱动电路:


利用PWM实现呼吸灯代码 

sbit LED=P2^0;//引脚定义
unsigned char Time,i;//变量定义
void Delay(unsigned int t)//定义延时
{while(t--);
}

main函数里:

int main()
{unsigned char Time,i;while(1){for(Time=0;Time<255;Time++)//呼吸灯{for(i=0;i<20;i++){LED=0;Delay(Time);LED=1;Delay(255-Time);}}for(Time=255;Time>0;Time--){for(i=0;i<20;i++){LED=0;Delay(Time);LED=1;Delay(255-Time);}}}
}

 利用定时器中断产生PWM波实现电机调速:

主函数:

#include <REGX52.H>
#include "Delay.h"
#include "key.h"
#include "SEG.h"
#include "timer.h"extern unsigned char Compare;
unsigned char KeyNum,Speed;
int main()
{TIM0_Init();while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;if(Speed==0){Compare=0;}if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}SegDisplay(1,Speed);}
}

延时函数部分:

#include "Delay.h"void Delayms(unsigned char xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);}while (--i);xms--;}
}

按键部分:

#include "key.h"
#include <REGX52.H>
#include "Delay.h"extern unsigned char LEDMode;
extern unsigned int Password;
unsigned char Count=0;
/*** @brief  矩阵键盘读取按键键码* @param  传入的参数 无* @retval 返回值 KeyNumber:按下按键的键码值*/
unsigned char MatrixKey()//按列扫描
{unsigned char KeyNumber=0;P1=0XFF;P1_3=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=1;}//按键释放后有效if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=5;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=9;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=13;}P1=0XFF;P1_2=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=2;}if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=6;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=10;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=14;}P1=0XFF;P1_1=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=3;}if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=7;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=11;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=15;}P1=0XFF;P1_0=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=4;}if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=8;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=12;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=16;}return KeyNumber;
}/*** @brief  独立按键* @param  无* @retval 返回值 KeyNumber:按下按键的键码值*/
unsigned char Key()
{unsigned char KeyNumber=0;if(P3_1==0){Delayms(20);while(P3_1==0);Delayms(20);KeyNumber=1;}//按键释放后有效if(P3_0==0){Delayms(20);while(P3_0==0);Delayms(20);KeyNumber=2;}if(P3_2==0){Delayms(20);while(P3_2==0);Delayms(20);KeyNumber=3;}//按键释放后有效if(P3_3==0){Delayms(20);while(P3_3==0);Delayms(20);KeyNumber=4;}return KeyNumber;
}

数码管部分:

#include <REGX52.H>
#include "Delay.h"/*共阴断码0~9,A~F*/
unsigned char SegTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void SegDisplay(unsigned char Location,Number)//1位显示数据
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=SegTable[Number];
//	Delayms(1);/*消影:位选 段选(清0)位选 段选 位选 段选 */
//	P0=0x00;
}
void SegTest(void)
{unsigned char a=1,b=0;SegDisplay(a,b++);Delayms(1000);if(b==10){b=0;a++;}if(a==9){a=1;}}

定时器部分:

#include "timer.h"
#include <REGX52.H>
#include "INTRINS.H"unsigned char Compare;
sbit Motor=P1^0;/*** @brief  定时器0初始化,12Mhz,100us* @param  无* @retval 无*/
void TIM0_Init()
{//TMOD=0X01;//模式1TMOD&=0XF0;//	TMOD=TMOD&0XF0;//把TMOD的低4位清零,高4位不变TMOD|=0X01;//	TMOD=TMOD|0X01;//把TMOD的最低位置1,高4位不变TF0=0;TR0=1;//开始计时TL0 = 0x9C;		//设置定时初值TH0 = 0xFF;		//设置定时初值
//中断配置ET0=1;EA=1;PT0=0;//关闭高优先级
}void TIM0_NVIC(void) interrupt 1
{static unsigned int Tim0_Count;TL0 = 0x9C;//重装初值TH0 = 0xFF;	Tim0_Count++;
//	if(Tim0_Count>=100)
//	{
//			Tim0_Count=0;
//	}Tim0_Count%=100;//与上述效果一致if(Tim0_Count<Compare){Motor=1;}else{Motor=0;}
}

 利用定时器中断产生PWM电机调速核心代码:

extern unsigned char Compare;
unsigned char KeyNum,Speed;
int main()
{TIM0_Init();while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;if(Speed==0){Compare=0;}if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}SegDisplay(1,Speed);}
}
void TIM0_NVIC(void) interrupt 1
{static unsigned int Tim0_Count;TL0 = 0x9C;//重装初值TH0 = 0xFF;	Tim0_Count++;
//	if(Tim0_Count>=100)
//	{
//			Tim0_Count=0;
//	}Tim0_Count%=100;//与上述效果一致if(Tim0_Count<Compare){Motor=1;}else{Motor=0;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94009.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】解决使用SSH连接远程仓库时需要多次输入密码的问题

问题产生的原因&#xff1a;你的SSH私钥设置了密码短语&#xff08;passphrase&#xff09;。解决问题的方法&#xff1a;使用SSH代理&#xff08;ssh-agent&#xff09;&#xff0c;ssh-agent是一个后台运行程序&#xff0c;它会记住你解锁过的SSH私钥的密码短语&#xff0c;这…

机器学习—逻辑回归

一介绍逻辑回归是处理二分类问题的线性模型&#xff0c;通过sigmoid函数将线性输出映射到[0,1]&#xff0c;输出事件发生概率&#xff0c;广泛用于预测与分类。如果做坐标的话&#xff0c;特征就是p1和p2&#xff0c;结果就是y红的与绿的 二Sigma函数代码说明Sigmoid 函数定义&…

深入解读OpenTelemetry分布式链路追踪:原理与实践指南

深入解读OpenTelemetry分布式链路追踪&#xff1a;原理与实践指南 分布式系统在微服务架构下&#xff0c;服务调用链越来越复杂&#xff0c;追踪单次请求在各个微服务之间的执行情况成为运维与性能优化的关键。作为新一代开源标准&#xff0c;OpenTelemetry为分布式追踪、指标与…

【0基础PS】PS工具详解--图案图章工具

目录前言一、图案图章工具基础认知​二、工具选项栏参数详解​三、图案图章工具应用案例​总结前言 在 Adobe Photoshop 这一强大的图像处理软件中&#xff0c;图案图章工具是一个独具特色的功能&#xff0c;它允许用户利用预先定义好的图案进行绘画操作。 一、图案图章工具基…

剧本杀小程序系统开发:构建数字化剧本杀生态圈

在快节奏的现代生活中&#xff0c;人们越来越渴望在闲暇之余找到一种既能放松心情又能增进社交的方式。剧本杀&#xff0c;作为一种集推理、表演、社交于一体的新兴娱乐形式&#xff0c;恰好满足了这一需求。然而&#xff0c;随着市场的不断扩大&#xff0c;如何保持剧本杀的新…

【DL学习笔记】计算图与自动求导

计算图计算图&#xff08;Computation Graph&#xff09;是一种用于描述计算过程的图形化表示方法。在深度学习中&#xff0c;计算图通常用于描述 网络结构、运算过程 和数据流向。计算图是一种有向无环图&#xff0c;用图形方式来表示算子与变量之间的关系&#xff0c;直观高效…

大型地面光伏电站开发建设流程

​地面电站特特点&#xff1a;规模大&#xff0c;通常占用土地、水面等&#xff0c;地面式选址选项多&#xff0c;且不断拓展出新的用地模式&#xff0c;地面式选址集中在山体、滩涂、沼泽、戈壁、沙漠、受污染土地等闲置或废弃土地上。

除数博弈(动态规划)

爱丽丝和鲍勃一起玩游戏&#xff0c;他们轮流行动。爱丽丝先手开局。最初&#xff0c;黑板上有一个数字 n 。在每个玩家的回合&#xff0c;玩家需要执行以下操作&#xff1a;选出任一 x&#xff0c;满足 0 < x < n 且 n % x 0 。用 n - x 替换黑板上的数字 n 。如果玩家…

一起学springAI系列一:初体验

Spring AI是干嘛的官网最权威&#xff0c;直接粘贴&#xff1a;“Spring AI”项目旨在简化那些包含人工智能功能的应用程序的开发过程&#xff0c;同时避免不必要的复杂性。AI相关领域的功能对python的支持是最好的&#xff0c;相关供应商在出了啥功能的时候&#xff0c;都会优…

Ext JS极速项目之 Coworkee

ExtJS Coworkee 是什么? Ext JS 的 Coworkee 是一个由 Sencha 官方提供的完整员工管理应用示例,旨在展示 Ext JS 框架在企业级应用开发中的能力。 在线试用的地址是: https://examples.sencha.com/coworkee/#home 页面效果与布局 登录页面: 主页效果 左右分区结构:左…

飞算科技:原创技术重塑 Java 开发,引领行业数智化新浪潮

在科技革新的浪潮中&#xff0c;飞算科技作为一家坚持自主创新的数字科技企业&#xff0c;同时也是国家级高新技术企业&#xff0c;正深耕互联网科技、大数据、人工智能等前沿领域&#xff0c;为众多企业的数字化与智能化转型提供强劲动力。​飞算科技的成长轨迹&#xff0c;是…

cesium FBO(一)渲染到纹理(RTT)

一听到三维的RTT&#xff08;Render To Texture&#xff09;&#xff0c;似乎很神秘&#xff0c;但从底层实现一看&#xff0c;其实也就那样&#xff0c;设计API的哪些顶级家伙已经帮你安排的明明白白了&#xff0c;咱们只需要学会怎么用就可以了。我认为得从WebGL入手&#xf…

PNP机器人机器人学术年会展示灵巧手动作捕捉方案。

2025年8月1-3日&#xff0c;第六届中国机器人学术年会&#xff08;CCRS2025&#xff09;在长沙国际会议中心举行&#xff0c;主题“人机共融&#xff0c;智向未来”。PNP机器人与灵巧智能联合展出最新灵巧手模仿学习方案&#xff1a;基于少量示教数据即可快速复现复杂抓取动作&…

【45】C#入门到精通——C#调用C/C++生成动态库.dll及C++ 生成动态库.dll ,DllImport()方式导入 C++动态库.dll方法总结

文章目录1 C 生成动态库.dll2 C#调用C/C生成动态库.dll2.1 [DllImport()] 方式导入 C动态库.dll2.2 调用测试3 C/C 生成通用dll,改进3.1改进后.h3.2 .cpp3.2 C# 调用4 [DllImport()] 方式导入C生成的 .dll 总结4.1 指定路径导入4.2 .dll放在 执行目录下&#xff08;一定要放对&…

从协议栈到ath12k_mac_op_tx的完整调用路径

文章目录 从协议栈到ath12k_mac_op_tx的完整调用路径 1. 整体架构概览 2. 详细调用路径分析 2.1 应用层到Socket层 2.2 协议层处理 2.3 网络设备层到mac80211 2.4 mac80211发送入口 2.5 mac80211核心发送处理 2.6 mac80211发送核心处理 2.7 mac80211发送调度 2.8 最终驱动调用 …

WPFC#超市管理系统(4)入库管理

入库管理7. 商品入库管理7.2 入库实现显示名称、图片、单位7.3 界面设计7.3 功能实现7. 商品入库管理 数据库中StockRecord表需要增加商品出入库Type类型为nvarchar(50)。C#中的数据库重新同步StockRecord表在Entity→Model中新建枚举类型StockType namespace 超市管理系统.E…

CSS 打字特效

效果图.wxml <view class"tips"><text>{{ tipsText }}</text><text class"tips-line">|</text> </view>.wxss .tips{padding: 50rpx 100rpx;font-size: 28rpx; } .tips-line{color: #ccc;animation: tips-line .5s al…

直播小程序 app 系统架构分析

一、引言 直播行业近年来发展迅猛&#xff0c;直播小程序和 APP 成为众多用户获取直播内容以及主播进行内容输出的重要平台。一个完善且高效的系统架构是支撑直播业务稳定运行、提供优质用户体验的关键。本文将详细剖析直播小程序 / APP 的系统架构&#xff0c;包括整体架构设计…

Vue常见题目

1. 什么是 Vue.js&#xff1f;它的核心特点是什么&#xff1f; Vue.js 是一个渐进式 JavaScript 框架&#xff0c;用于构建用户界面。它的核心特点包括&#xff1a; - 响应式数据绑定 - 组件化开发 - 虚拟 DOM - 指令系统 - 轻量级且易于集成 - 丰富的生态系统&#xff08;Vue…

ipynb文件直接发布csdn

第一步&#xff0c;下载markdown文件 file --> save and export notebook as --> markdown第二步&#xff0c;导入markdown文件 进入csdn发布文章界面&#xff0c;点击导入&#xff0c;选择第一步下载的markdown文件即可