[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

时间: 2024-10-25 02:35:35

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

【BLE】CC2541之PWM控制直流电机

本篇博文最后修改时间:2016年4月14日,18:24. 一.简介 本文介绍如何在SimpleBLEPeripheral工程中,使用PWM控制直流电机. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8.20.2 硬件平台:Smart RF(主芯片CC2541) 三.版权声明 博主:甜甜的大香瓜 声明:喝水不忘挖井人,转载请注明出处. 原文地址:http://blog.csdn.net/feilusia 联系方式:[email protected] 技术交流QQ群

51单片机模拟PWM调制控制实验

-------------------------------------------- PWM(脉冲宽度调制) 对模拟信号电平进行数字编码的方法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 设计要求: 由于AT89系列单片机没有PWM控制器,所以

51单片机led灯控制

关于内容理解: 先读懂51单片机的实验原理图,然后再着手编程. 由图可知 1,led灯接的是单片机的P0口,意味着我们只能用P0口来编程. 2,led灯是共阳极,当给低电平时led灯才会亮,(单片机灌电流能力较强,输出电流较弱,所以一般用共阳极) 3,led所在的P0口是读io口,故使用时用一个变量来做中介 实验效果 实现跑马灯效果,P0^0->P0^7口依次亮且每次只亮一个灯,然后P0^7->P0^0. 实验代码 #include <reg52.h> //此文件中定义了51的一些

智能小车PWM控制直流电机

在汽车行业,我们不仅要通过CAN总线来控制汽车的运行,那么在智能遥控汽车市场就需要直流电机来控制小车的速度:平时我们可以通过PWM波,硬件改变电压等方法来改变小车电机两端的电压值,进而达到控制电机转速的调整. PWM波来控制电机的转速,PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形. 通过其对半导体电力器件的导通和关断进行控制,使输出端得到一些列幅值相同而宽度不相同的脉冲,用这些脉冲来代替正弦波或其他所需的波形.那么我们根据这样的特性,按一定的规则对个脉冲的宽度进行调制,即可改变电路输出电压

一个简单的51操作系统

网络编程项目:linux下基于C/S架构的聊天室 用的是vc++6.0,为什么老是显示max is 2 static成员理解 MacOS下mysql的卸载.重装和root密码重置 3wd颓辈窖http://p.baidu.com/ihome/center?uid=401b616263303164366633c7b1&tj56=om沾魄购a4rcis衙读怂http://p.baidu.com/ihome/center?uid=26a0616263376361313531f2b0&s962=m

[51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动(如下图中FUNC文件夹下led8.c文件). 但是该驱动电路是要有一定的硬件基础的(如下图):如2片74HC573.而我这里只有几个4位8段共阴数码管又没有74HC573,所以就得寻求用51直接驱动的方案了! 2)失败尝试 失败操作:直接在相应的引脚间加5伏电压来测试该数码管是否正常 结果:烧坏了2

[原创]基于51单片机的红外遥控课程设计

[注]: 一眨眼,大学接近尾声,具有找工作需要,所以把大学做的电子设计“劣作”放上来.希望考研失意,还能赶上“好工作”的春招班车.如果大伙有什么工作推荐也可以联系我哦,因为一年考研少接触了这方面,所以难免有些生疏.但请相信我!给我机会我会很认真学的! 邮箱:[email protected] 转载请注明出处呀! 基于51单片机的红外遥控课程设计 目录 第一章 设计简介... 3 第二章 系统方案... 3 一.设计方案对比... 3 二.方案设计... 4 第三章 硬件设计... 5 一.红外遥

51单片机PWM直流电机调速

直流电动机的PWM调压调速原理 直流电动机转速N的表达式为:N=U-IR/Kφ 由上式可得,直流电动机的转速控制方法可分为两类:调节励磁磁通的励磁控制方法和调节电枢电压的电枢控制方法.其中励磁控制方法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少.现在,大多数应用场合都使用电枢控制方法. 对电动机的驱动离不开半导体功率器件.在对直流电动机电枢电压的控制和驱动中,对半导体器件的使用上又可分为两种方式:线性放大驱动方式

51单片机控制的收音机(带串口,遥控,芯片89S52+LC72131+LA1845N)

本方案采用89S52做为主控芯片,LC72131+LA1845N做为收音模块,支持按键控制,红外线遥控控制,也可通过串口上位机控制,可以通过计算机并口更新单片机软件程序. 音量用两块DS1804控制,频率信息用一块1602液晶显示. 单面板,飞线很多,呵呵. 硬件方案.rar(Protel99) PC端控制软件.rar(VC++7.1,即Visual Stdio .Net 2003) 本方案的单片机软件使用C语言编写(Keil uVision3),LC72131芯片的驱动稍微麻烦,他使用SPI总