[51单片机] 以PWM控制直流电机为例建一个简单的51工程框架
2015-04-20 22:52
344 查看
目录
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)[b]框架介绍[/b]
本文主要目的不是介绍如何实现功能,而是如何做一种方便复用和理解的框架。如下图左USER文件中的文件属于最高层(离用户最近);FUNC文件夹中的文件属于功能层(用户层文件可以调用功能层实现的各种功能,同时功能层内部也有少量的相互调用);INTE文件夹主要是中断层(本来想把中断单独拿出来,但是中断子程序和用户层交叉太多,所以仅在这里实现中断初始化函数,中断子程序依然放在main.c文件中)
注:注意main.c中的引用!(因为在keil里的文件夹和外部并没有直接对应关系,外部是我手动建的)
4)[b]模块说明[/b]
--> 4.1 delay说明:对外提供两个延时函数(在I2C、按键消抖等地方要用到)
--> 4.2 key8说明:对外提供按键扫描函数,如果有按键按下则返回对应的键值(这是8按键的,不是4x4的)
应用示例:如下KeyScan()被调用来检测按键实现按键控制功能~
--> 4.3 led8说明:对外提供在8x八段数码管显示功能(这里要做特殊处理)
应用示例:如下把要显示的2位的整数PWN_ON显示在8X八段数码管上。在1的地方要分别取PWN_ON的十位和个位然后通过DuanMa转换为相应的数码管灯的显示数值;然后在中断或具有频繁周期刷新的函数体内调用display函数进行显示(display的第一个参数是选择8x八段数码管的第几位开始显示,0表示从第1位开始;第二个参数是说明要显示几位)
[b]
[/b]
特别注意:这里的display(6,2)意思是把一个两位整数显示在8个数码管的后两个上,而给TempData赋值并不是TempData[6]和TempData[7]!
5)复用规则
今后便可采用相同的方法不断扩充FUNC层,当遇到具体问题可以在main和中断中做调整。
6)工程链接
https://github.com/beautifulzzzz/stc89c51-or-stc89c52
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)[b]框架介绍[/b]
本文主要目的不是介绍如何实现功能,而是如何做一种方便复用和理解的框架。如下图左USER文件中的文件属于最高层(离用户最近);FUNC文件夹中的文件属于功能层(用户层文件可以调用功能层实现的各种功能,同时功能层内部也有少量的相互调用);INTE文件夹主要是中断层(本来想把中断单独拿出来,但是中断子程序和用户层交叉太多,所以仅在这里实现中断初始化函数,中断子程序依然放在main.c文件中)
注:注意main.c中的引用!(因为在keil里的文件夹和外部并没有直接对应关系,外部是我手动建的)
4)[b]模块说明[/b]
--> 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^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 void Display(unsigned char FirstBit,unsigned char Num);
应用示例:如下把要显示的2位的整数PWN_ON显示在8X八段数码管上。在1的地方要分别取PWN_ON的十位和个位然后通过DuanMa转换为相应的数码管灯的显示数值;然后在中断或具有频繁周期刷新的函数体内调用display函数进行显示(display的第一个参数是选择8x八段数码管的第几位开始显示,0表示从第1位开始;第二个参数是说明要显示几位)
[b]
[/b]
特别注意:这里的display(6,2)意思是把一个两位整数显示在8个数码管的后两个上,而给TempData赋值并不是TempData[6]和TempData[7]!
5)复用规则
今后便可采用相同的方法不断扩充FUNC层,当遇到具体问题可以在main和中断中做调整。
6)工程链接
https://github.com/beautifulzzzz/stc89c51-or-stc89c52
相关文章推荐
- Spring+SpringMVC+MyBatis框架一个简单工程的搭建实例
- Cocos2dx:使用Cocos Studio创建一个简单的工程
- OkHttpUtils一个专注于让网络请求更简单的框架
- 一个vim框架的简单实现
- 构建自己的代码库及软件开发不能是加工作坊--及一个简单的Linux C程序开发框架—linux-dev-framework
- 从零构建一个简单的 Python 框架
- 一个简单的Python流程控制小脚本
- MFC工程中 定义一个变量让所有源程序都能用的最简单的方法
- 一个Android异步调用的简单框架
- Ogre: 建立一个简单的框架——关于场景节点
- 一个超级简单的服务器框架
- 【从零开始写一个简单的ImageLoader框架】项目介绍
- 【从零开始写一个简单的ImageLoader框架】ImageLoader分析
- Android——网络框架篇:OkHttpUtils一个专注于让网络请求更简单的框架
- VC++写的一个最简单的工程项目
- 一个简单的java工程
- 一个简单的游戏服务器框架
- 一个简单图形界面框架XYGui的设计与实现 (一)
- Xcode里一个工程(Project)多个项目(target)做版本控制讨论
- C#实现一个简单实用的TXT文本操作及日志框架详解