[51单片机] 以PWM控制直流电机为例建一个简单的51工程框架
目录
1)功能概述
名称:独立按键控制直流电机调速
内容:对应的电机接口需用杜邦线连接到uln2003电机控制端;
使用5V-12V 小功率电机皆可 2个按键分别加速和减速;
采用8个8段数码管的后两位显示0~10级速度;

2)引脚连接
P3连接按键;P0连接8x八段数码管,P22段码锁存,P23位码锁存;P1.1连接ULN2003的一个输入;直流电机端连接ULN2003对应的输出,另一端连接VCC。
3)框架介绍
本文主要目的不是介绍如何实现功能,而是如何做一种方便复用和理解的框架。如下图左USER文件中的文件属于最高层(离用户最近);FUNC文件夹中的文件属于功能层(用户层文件可以调用功能层实现的各种功能,同时功能层内部也有少量的相互调用);INTE文件夹主要是中断层(本来想把中断单独拿出来,但是中断子程序和用户层交叉太多,所以仅在这里实现中断初始化函数,中断子程序依然放在main.c文件中)

注:注意main.c中的引用!(因为在keil里的文件夹和外部并没有直接对应关系,外部是我手动建的)
4)模块说明
--> 4.1 delay说明:对外提供两个延时函数(在I2C、按键消抖等地方要用到)
#include<reg52.h> void DelayUs2x(unsigned char t);//us级延时函数声明
void DelayMs(unsigned char t); //ms级延时
--> 4.2 key8说明:对外提供按键扫描函数,如果有按键按下则返回对应的键值(这是8按键的,不是4x4的)
#include<reg52.h> #define KeyPort P3 unsigned char KeyScan(void);//按键扫描函数,返回扫描键值
应用示例:如下KeyScan()被调用来检测按键实现按键控制功能~

--> 4.3 led8说明:对外提供在8x八段数码管显示功能(这里要做特殊处理)
#include<reg52.h> #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^;//定义锁存使能端口 段锁存
sbit LATCH2=P2^;// 位锁存 void Display(unsigned char FirstBit,unsigned char Num);
应用示例:如下把要显示的2位的整数PWN_ON显示在8X八段数码管上。在1的地方要分别取PWN_ON的十位和个位然后通过DuanMa转换为相应的数码管灯的显示数值;然后在中断或具有频繁周期刷新的函数体内调用display函数进行显示(display的第一个参数是选择8x八段数码管的第几位开始显示,0表示从第1位开始;第二个参数是说明要显示几位)

特别注意:这里的display(6,2)意思是把一个两位整数显示在8个数码管的后两个上,而给TempData赋值并不是TempData[6]和TempData[7]!
5)复用规则
今后便可采用相同的方法不断扩充FUNC层,当遇到具体问题可以在main和中断中做调整。
6)工程链接
https://github.com/beautifulzzzz/stc89c51-or-stc89c52

[51单片机] 以PWM控制直流电机为例建一个简单的51工程框架的更多相关文章
- 51单片机—使用PWM对直流电机调速
文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...
- 51单片机 | 模拟PWM调制控制实验
———————————————————————————————————————————— PWM(脉冲宽度调制) 对模拟信号电平进行数字编码的方法 - - - - - - - - - - - - - ...
- 51单片机-独立按键控制led矩阵的左移和右移
51单片机学习 独立按键 控制led灯光矩阵的左移和右移 开发板采用的是普中的A2学习开发板,具体的代码如下: typedef unsigned int u16; void delay(u16 tim ...
- python:什么是单例?一个简单的单例
单例:即一个类只能生成唯一的一个实例,python中的类如果没有被实例化,则cls._instance为None 如下: class Singleton(object): def __new__(cl ...
- [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY
目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...
- STM32F103定时器输出PWM波控制直流电机
这个暑假没有回家,在学校准备九月份的电子设计竞赛.今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题.. 要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念..一个定 ...
- 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
如图3,点阵屏分单色和彩色,点阵屏是由许多点组成的,在一个点上,只有一颗一种颜色的灯珠,这就是单色点阵屏,彩色的在一个点上有三颗灯珠,分别是RGB三原色. 图4你可能没看出来,那么大块黄色的就是点阵屏 ...
- Altium Designer16绘制51单片机的一些经验总结
制作这块51单片机的还是蛮艰辛的,应该是我水平太差,现在这块51板已经稳定了,也把这块板子制作过程中的一些问题及经验总结记录下来.这块板子制作出了很大问题很大原因是因为我对Altium Designe ...
- 51单片机 小车 L298N pwm调速 串口控制 按键控制
难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1——前进 按键2——后退 按键3——加速 按键4——减速 (板子上只有四个按键) 串口控制 ‘1’——前进 ...
随机推荐
- linux命令连接远程服务器
ssh root@IP ***连接远程ip cd 路径 ***进入指定路径 ll ***查看当前文件 ll -a ...
- Nodejs在centos下的安装
新学了nodejs,发现在centos下面安装的时候,与windows有一些不同的地方,以前习惯在安装不上的时候,去百度出来,解决了以后,当时都记住如何解决的了,但是过了一段时间以后,就全都忘记光了, ...
- 关于window.open()中文传值乱码问题的解决方法
最近组长叫我做一个把查询出的数据用POI导出Excel的功能,我前台把要查询的字段通过如下传回后台时,发现出现了乱码问题 window.open('user!export?name='+name); ...
- RBAC用户权限管理数据库设计
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- noip2008-t3
[题目描述] 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸 ...
- JS-reverse(数组内容颠倒)
var arr1 = [ 1,2,3,4,5,6 ];// arr1.reverse();// alert( arr1 ); //怎么颠倒字符串呢? var str = 'abcdef';alert( ...
- 让C++程序打印自身源码
本人原创文章,欢迎阅读,禁止转载. 这绝对是惊艳到让你眼前一亮(为了简洁,故意没考虑资源问题和编译警告). #include <iostream> #include <fstream ...
- Win7 64位 VS2015环境使用qt-msvc2015-5.6.0
QT下载 http://www.qt.io/download-open-source/#section-2 我用的是 qt-opensource-windows-x86-msvc2015-5.6.0. ...
- permutation II (boss出来了)
题目链接:https://leetcode.com/submissions/detail/55876321/ 自己的做法,30个测试用例通过了29例,终究还是有一个系列类型的是无法通过的,因为自己妄想 ...
- DOS tasklist 命令(转)
Dos命令之Tasklist用法及参数函义 2012-10-24 14:44:34| 分类: Windows |字号 订阅 TASKLIST [/S system [/U username [/ ...