当前位置: 首页 > news >正文

【【51单片机直流电机调速】】

学会电机调速,掌握中国速度

PWM的生成方法

先用户设定一个比较值,然后计数器定时自增。
当计数器<比较值,输出0
当计数器>比较值,输出1
在这里插入图片描述
在这里插入图片描述

main.c

#include <REGX52.H>
#include"delay.h"
#include"key.h"
#include"Nixie.h"
#include"Timer0.h"unsigned char Counter,Compare;
unsigned char KeyNum,Speed;
sbit Motor=P1^0;void main()
{Timer0_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;}}Nixie(1,Speed);}	}void Timer0_Routine() interrupt 1
{TL0 = 0x9C;		//设置定时初值TH0 = 0xFF;		//设置定时初值Counter++;Counter%=100;if(Counter<Compare){Motor=1;}else{Motor=0;}
}

delay.c

void Delay(unsigned int xms)		//@12.000MHz
{while(xms){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);xms--;
}
}

delay.h

#ifndef _DELAY_H__
#define _DELAY_H__
void Delay(unsigned int xms);#endif

key.c

#include <REGX52.H>
#include "Delay.h"/*** @brief  获取独立按键键码* @param  无* @retval 按下按键的键码,范围:0~4,无按键按下时返回值为0*/
unsigned char Key()
{unsigned char KeyNumber=0;if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}return KeyNumber;
}

key.h

#ifndef __KEY_H__
#define __KEY_H__unsigned char Key();#endif

Nixie.c

#include <REGX52.H>
#include "Delay.h"	//包含Delay头文件//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数
void Nixie(unsigned char Location,Number)
{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=NixieTable[Number];	//段码输出//Delay(1);				//显示一段时间//P0=0x00;				//段码清0,消影
}

Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__void Nixie(unsigned char Location,Number);#endif

Timer0.c

#include <REGX52.H>/*** @brief  定时器0初始化,100us@12.000MHz* @param  无* @retval 无*/
void Timer0_Init(void)
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0x9C;		//设置定时初值TH0 = 0xFF;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0=1;EA=1;PT0=0;
}

Timer0.h

#ifndef __TIMER0_H__
#define __TIMER0_H__void Timer0_Init(void);#endif
http://www.lryc.cn/news/99252.html

相关文章:

  • 【Spring Boot】
  • 使用docker 部署自己的chatgpt
  • Python适配器模式介绍、使用方法
  • 【数据结构】复杂度
  • 【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考
  • 微服务入门---SpringCloud(二)
  • 51单片机IO口控制
  • ERROR 1064 - You have an error in your SQL syntax;
  • leetcode做题笔记46
  • 快问快答JS面向对象面试题
  • googlenet论文理解
  • OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测
  • 【QT 网络云盘客户端】——获取用户文件列表信息
  • 从0到1,无代码开发如何简化产品创新流程
  • select、epoll 的快速核心理解
  • HTTP和HTTPS的区别
  • 分布式异步任务处理组件(二)
  • Jenkins 拉取 GitHub 私有仓库失败问题
  • 小程序 多层次对象数组的赋值、动态赋值
  • angular踩坑
  • C#时间轴曲线图形编辑器开发1-基本功能
  • elasticsearch查询操作(DSL语句方式)
  • JavaScript详解
  • 电缆振荡波局部放电检测定位技术
  • AI Chat 设计模式:10. 组合模式
  • 【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files
  • 【1】-Locust性能测试工具介绍与安装
  • 基于拉格朗日-遗传算法的最优分布式能源DG选址与定容(Matlab代码实现)
  • 【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败
  • Mybatis使用collection映射一对多查询分页问题