单片机+ULN2003A步进电机控制系统(正反转+加减速)

发布者:rho27最新更新时间:2019-12-11 来源: 51hei关键字:单片机  步进电机  控制系统  正反转  加减速 手机看文章 扫描二维码
随时随地手机看文章

51单片机步进电机的正反转。加减速控制
电路原理图如下:
原理图分解.jpg

仿真原理图如下
0.png 

单片机源程序如下:

#include

#include

#include


#define uchar unsigned char

#define uint unsigned int


sbit RS = P2^4;//1602数据/命令选择端(H:数据寄存器L:指令寄存器) 

sbit RW = P2^5;//1602读/写选择端 

sbit E  = P2^6;//1602使能信号端


sbit key1=P3^0;//用户按键

sbit key2=P3^1;

sbit key3=P3^2;

sbit key4=P3^3;

sbit key5=P3^4;


uchar code B_Rotation[8]={0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef,0x6f}; //反转表格

uchar code F_Rotation[8]={0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f}; //正转表格



uchar table1[]="dir: +  spe:005";

uchar table2[]="cir:000 ang:000";


uchar num;

uint key,flag,speed=5,zflag,znum,fflag,fnum,select,pp,qq;

//1键值2键值标志3速度4正转标志5正转圈数6反转标志7反转圈数8正转角度9反转角度10选择

float zang,fang;

/******************************************************************/

/*                    延时函数 Xms                                   */

/******************************************************************/

void delay(uint z)

{

        uint x,y;

        for(x=z;x>0;x--)

                for(y=110;y>0;y--);

}

/******************************************************************/

/*                   LCD1602写命令操作                            */

/******************************************************************/

void WriteCommand(uchar com)

{

        delay(5);//操作前短暂延时,保证信号稳定

        E=0;

        RS=0;

        RW=0;

        P0=com;

        E=1;

        delay(5);

        E=0;

}

/******************************************************************/

/*                   LCD1602写数据操作                            */

/******************************************************************/

void WriteData(uchar dat)

{

        delay(5);  //操作前短暂延时,保证信号稳定

        E=0;

        RS=1;

        RW=0;

        P0=dat;

        E=1;

        delay(5);

        E=0;

}

/******************************************************************/

/*                           1602初始化程序                       */

/******************************************************************/

void InitLcd()//1602初始化程序

{

        delay(15);

        WriteCommand(0x38); //display mode

        WriteCommand(0x38); //display mode

        WriteCommand(0x38); //display mode

        WriteCommand(0x06); //当读或写一个字符后地址指针加一,且光标加一

        WriteCommand(0x0c); //显示开及光标不显示

        WriteCommand(0x01); //清屏


        WriteCommand(0x80);

        for(num=0;num<15;num++)//第一行的显示

        {

                WriteData(table1[num]);

                delay(15);

        }

        WriteCommand(0x80+0x40);//第二行的显示

        for(num=0;num<15;num++)

        {

                WriteData(table2[num]);

                delay(15);

        }


}

/******************************************************************/

/*              独立键盘扫描函数                                  */

/******************************************************************/

void keyscan()  

{        

        

        P3=0xff;//拉高P3口,以读取P3口的值

        if(key1==0)//键1被按下

        {

                delay(5);//延时消抖

                if(key1==0)

                {

                        flag=1;

                }

                while(!key1);

                delay(5);//延时消抖

                while(!key1);//松手检测

        }

        if(key2==0)

        {

                delay(5);

                if(key2==0)

                {

                        flag=2;

                }

                while(!key2);

                delay(5);

                while(!key2);

        }

        if(key3==0)//键1被按下

        {

                delay(5);//延时消抖

                if(key3==0)

                {

                        flag=3;

                }

                while(!key3);

                delay(5);//延时消抖

                while(!key3);//松手检测

        }

        if(key4==0)

        {

                delay(5);

                if(key4==0)

                {

                        flag=4;

                }

                while(!key4);

                delay(5);

                while(!key4);

        }

        if(key5==0)

        {

                delay(5);

                if(key5==0)

                {

                        flag=5;

                }

                while(!key5);

                delay(5);

                while(!key5);

        }

}

/******************************************************************/

/*                           1602显示3位数                       */

/******************************************************************/

void write_sfm(uchar add,uint date)//1602显示

{

        uchar bai,shi,ge;

        bai=date/100;

        shi=date%100/10;

        ge=date%10;

        WriteCommand(0x80+add);//设置数据地址指针

        WriteData(0x30+bai);

        WriteData(0x30+shi);

        WriteData(0x30+ge);

        WriteData(0x20);

}

/******************************************************************/

/*                           键值处理                             */

/******************************************************************/

void handle_flag() 

{        


        uchar select1;

        if(TR0==0&&TR1==0)

        {        

                if(flag==1) //正转

                {

                        WriteCommand(0x80+0x05);

                        WriteData('+');

                        delay(20);

                        select=0;

                }

                if(flag==2) //反转

                {

                        WriteCommand(0x80+0x05);

                        WriteData('-');

                        delay(20);

[1] [2]
关键字:单片机  步进电机  控制系统  正反转  加减速 引用地址:单片机+ULN2003A步进电机控制系统(正反转+加减速)

上一篇:单片机自行车测速系统+源程序+proteus仿真
下一篇:非常完备的按键操作系统,单击、双击、N击,长按。可移植

推荐阅读最新更新时间:2024-11-19 10:06

基于AT89C51单片机的智能计步器设计
1 引言 当今社会,随着经济的发展,人们生活水平的提高,肥胖的人越来越多,也就导致了越来越多的疾病产生,因此,人们越来越关注健康问题,而锻炼身体是让自己健康的最有效的方法。因此计步器应运而生,就成了时下流行的趋势。步行时,通过伸缩肌肉,血液在流动时的抵抗值下降,血压下降且稳定。经常步行的人很少患高血压或低血压病。坚持步行能减少血管内附着的脂肪性物质,使体重减轻,也逐渐减少心脏的负荷。而基于单片机为核心控制的计步器有着精确,可靠,稳定,方便等优点,已被大多数人所接受。通过计步器人们可以知道自己跑了多少步,实时掌握自己的锻炼情况。 2 总体设计方案 计步器由振荡电路、复位电路、显示电路以及按键电路几个部分组成,由电池进行供电。系统
[单片机]
基于AT89C51<font color='red'>单片机</font>的智能计步器设计
基于单片机的系统扩展
一、实验目的 1、学习片外存贮器扩展方法。 2、学习数据存贮器不同的读写方法。 3、学习片外程序存贮器的读方法。 二、实验内容 1.实验原理图: 2、实验内容 (1)使用一片2764EPROM,作为片外扩展的程序存贮器,对其进行读。 (2)使用一片6264RAM,作为片外扩展的数据存贮器,对其进行读写(使用键盘监控命令和程序运行两种方法)。 3、实验说明 (1)在使用键盘监控命令读片外扩展的程序存贮器2764中内容时,由于本系统中该程序存贮器作为用户目标系统的程序存贮器,因此DVCC系统必须处于仿真2状态,即“H.....”态,用MEM键即可读出。 (2)在使用键盘监控命令读写片外扩展的数据存贮
[单片机]
基于<font color='red'>单片机</font>的系统扩展
pic单片机走马灯动态显示实验报告
1. 实验目的 学习如何使用查找表 2. 任务要求 实现数字译码和动态显示 实现数码管显示的滚动效果 用数码管呈现实验三中的外中断 实现数码管数字显示 制作开机画面 3. 实验器材 单片机PIC16F886一片、LED灯一只、电阻任选、下载器(及相关的线)一个 4. 实验方案 图 1 硬件设计图 图 2 数字译码动态显示 流程图 图 3走马灯流程图 5. 实验现象分析 先看到SEEd四个字母然后是0-9循环滚动,每次显示4个数字或字符。电平变化中断触发后重新从0-9循环显示。 程序中用查询表的办法,循环选择数码管,循环选择要显示的数字和字符,利用视觉暂留以展现四个字符同时存在的错觉。利用
[单片机]
pic<font color='red'>单片机</font>走马灯动态显示实验报告
51单片机汇编语言实验(四)----串行通信实验
一、实验目的:    学习串行口的工作方式,掌握单片机通信程序编制方法。 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    与PC进行串行通信 四、与PC进行串行通信    1、实验原理:    8051单片机通过MAX232芯片与PC机进行通信,在PC机上运行串口助手软件。PC机通过软件助手发数据给单片机,单片机收到数据后取反发给PC机,可以在PC上观察数据。    2、实验步骤:   ① 将IO口区的P3.0与PACK区扩展板的RXD(P3.0)连接;   ② 将IO口区的P3.1与PACK区扩展板的TXD(P3.1)连接;   ③ 将PACK区模块的DB9通过串
[单片机]
51<font color='red'>单片机</font>汇编语言实验(四)----串行通信实验
基于STM32单片机连接射频si4438模块的方案设计
SI4438射频模块参数: 1、频率范围:425-525MHz 2、数字接收信号强度指示(RSSI) 3、64字节收发数据寄存器(FIFO) 4、跳频功能 等! 使用SI的WDS工具生成代码 1、选择仿真模式 2、芯片选择si4438 B1模式 3、Radio Configuration ApplicaTIon 4、Select ApplicaTIon 1、Select Project 选择BidirecTIonal packet ,双向通信模式 2、Configure project 配置工程 Frequency and power: 频率和功率的设置, base freq基频,中心频率, Channel spac
[单片机]
基于STM32<font color='red'>单片机</font>连接射频si4438模块的方案设计
基于单片机C8051F410的精确信号模拟电路设计
  引言   在对某型发射装置进行检测时.需要提供三组以11.50伏为基准的精确直流电压信号。为配合测试流程,这三组信号需要在不同的时段取18个不同的直流电压值,幅度分布在9.33-12.13伏范围之内。原有的测试仪采用22个精密电阻组成的分压器,配合波段开关选择来产生这18种不同的精确直流电压信号。这种设计方法价格昂贵,并且不能实现自动化检测,需要通过手工拨动波段开关来实现测试步骤的转换。为了实现对发射装置的自动测试。采用微机技术设计了新型的检测仪。新的检查仪以CPU模块为核心,通过程序控制D/A转换器来产生这三组精确直流电压信号,简化了设计,降低了成本,实现了测试步骤的自动切换。但是在检测仪的使用过程中发现经常出现重测合格
[单片机]
基于<font color='red'>单片机</font>C8051F410的精确信号模拟电路设计
PIC单片机在线调试中的一些问题
1 在线串行编程   1.1在线串行编程接口   带有Flash闪速存储器的PIC单片机产品一般都具有在线串行编程功能,只需要5根引线就可以把程序下载到单片机的Flash程序存储器中。这5根线的排列顺序是MCLR/Vpp、Vdd、Vss、PD(或PGD)和PC(或PGC),图1是PIC单片机在线串行编程接口图。                         图1PIC单片机在线串行编程接口   1.2引脚含义   上述5根引线的具体含义是:MCLR/Vpp——编程电压(对于PIC单片机一般为13 V左右);Vdd——编程电源(5 V);Vss——地;PD——编程数据信号;PC——编程时钟信号。   有了这
[单片机]
【PIC单片机】-- 串口相关知识
00 写在前面 该系列的文章,源自于担任过PIC单片机课程的助教,主要向学弟们讲解了几节实验课的内容。在此记录上课的一些知识。 本系列文章主要介绍的内容: 实验1–介绍和基本I/O–按钮和LED(学习嵌入式的第一步就是点一个灯,就像学习编程语言的第一步都是写一个“hello world”代码) 实验2–MPLAB+PICkit 3+LCD+I/O(这次主要是介绍液晶显示屏的使用,很多时候我们系统的调试都需要用到,比如做一个测温系统,那我们就可以通过液晶显示屏,显示传感器采集的数值,然后再通过软件来做进一步的处理) 实验3–ADC(这个是模数转化实验,就是之前模数电学习那些知识的一个综合运用) 实验4–串行通信–UA
[单片机]
【PIC<font color='red'>单片机</font>】-- 串口相关知识
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved