开发者社区> 史迪奇2号> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[51单片机] 以PWM控制直流电机为例建一个简单的51工程框架

简介:
+关注继续查看


目录

1)功能概述

2)引脚连接

3)框架介绍

4)模块说明

5)复用规则

6)工程链接


 

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、按键消抖等地方要用到)

1 #include<reg52.h>
2 
3 void DelayUs2x(unsigned char t);//us级延时函数声明 
4 void DelayMs(unsigned char t); //ms级延时

 

--> 4.2 key8说明:对外提供按键扫描函数,如果有按键按下则返回对应的键值(这是8按键的,不是4x4的)

1 #include<reg52.h>
2 
3 #define KeyPort P3
4 
5 unsigned char KeyScan(void);//按键扫描函数,返回扫描键值

应用示例:如下KeyScan()被调用来检测按键实现按键控制功能~

 

--> 4.3 led8说明:对外提供在8x八段数码管显示功能(这里要做特殊处理)

复制代码
1 #include<reg52.h>
2 
3 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
4 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
5 sbit LATCH2=P2^3;//                 位锁存
6 
7 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

 



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4442720.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
教你用200行代码写一个爱豆拼拼乐H5小游戏(附源码)
本文将带大家一步步实现一个H5拼图小游戏,考虑到H5游戏的轻量级和代码体积,我没有使用react或vue这些框架,而采用我自己写的dom库和原生javascript来实现业务功能,具体库代码可见我的文章如何用不到200行代码写一款属于自己的js类库,构建工具我采用了自己搭建的gulp4开发项目脚手架。
39 0
教你用 Netty 实现一个简单的 RPC!
众所周知,dubbo 底层使用了 Netty 作为网络通讯框架,而 Netty 的高性能我们之前也分析过源码,对他也算还是比较了解了。
37 0
01.源码阅读(Fragment--support-fragment-26.0.0-alpha1)
往一个viewgroup中添加fragment的两种方式如下: FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.
801 0
单片机+.NET+CentOS智能密码锁系统(纪念篇)
新入手了一个Mac,16G内存的,如果想玩Windows的话还是不太方便,于是我就想创建一个虚拟机玩玩,找到移动硬盘翻到之前的虚拟机系统的文件,我就安装到Mac上,打开虚拟机首先映入眼帘的就是全屏状态下的火狐浏览器,上面是我大学时候单片机课程设计课我做的一个基于单片机和.
1017 0
我的Android进阶之旅------&gt;Android实现用Android手机控制PC端的关机和重启的功能(二)Android客户端功能展示
Android客户端的实现思路大致如下: 1、首先扫描局域网内所有PC,看是否有PC端的服务器在运行并监听30000端口。 2、如果没有扫描到有PC端的服务器在运行并监听30000端口,则重新扫描或者退出。
1032 0
百度笔试题---一个简单的递归实现
由 a-z 0-9 字符构成的三位数密码,要求打印出所有的密码。   1 #include 2 #include 3 #include 4 #include 5 using namespace std; ...
536 0
858
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载