• 方案介绍
    • 1.  简介
    • 2.  主要功能
    • 3.  源程序(Keil5)
    • 4.  仿真proteus8.6
    • 5.  设计报告
    • 6.  资料清单
    • 7.  资料获取链接
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的12864步进电机控制系统!!!

04/03 09:39
1188
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

单片机仿真设计合集资料获取.pdf

共1个文件

资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频

仿真版本:Proteus8.6及以上版本

程序编译:Keil5 C51

编程语言:C语言

设计编号:【B04】

1.  简介

  本文介绍一种用AT89C51作为核心部件进行逻辑控制及信号产生的单片机技术和C语言编程设计的步进电机控制系统,本控制系统采用单片机控制,通过人为按动开关实现步进电机的正反转、加速、减速、停止。具有灵活方便、适用范围广的特点,基本能够满足实践需求。

2.  主要功能

a.支持按键设置正转、反转、停止、加速、减速。

b.支持LCD12864显示电机转动信息。

c.支持ULN2003驱动步进电机转动。

3.  源程序(Keil5)

  本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit AA=P3^4;//电机
sbit BB=P3^5;
sbit CC=P3^6;
sbit DD=P3^7;
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit RS	=P2^4;//显示器引脚
sbit RW	=P2^3;
sbit EN	=P2^2;
sbit CS1=P2^0;
sbit CS2=P2^1;
uchar start=0;//开启
uchar speed=10,time=0;//速度
uchar fang=0,flag=0;//方向
void lcd_r_busy()
{
    P0 = 0x00;
    RS = 0;
    RW = 1;
    EN = 1;
    while (P0 & 0x80);  // 最高位DB7==1,则busy
    EN = 0;
}  
/************* LCD写命令函数 *************/
void lcd_w_cmd(uchar value)
{
    lcd_r_busy();    // 每次读写操作前都要忙判断
    RS = 0;
    RW = 0;
    P0 = value;
    EN = 1;       // 下降沿锁存写入的数据/命令
    _nop_();
    _nop_();
    EN = 0;
}  
/************* LCD写数据  **************/
void lcd_w_data(uchar value)
{
    lcd_r_busy();
    RS = 1;
    RW = 0;
    P0 = value;
    EN = 1;        // 下降沿锁存写入的数据/命令
    _nop_();
    _nop_();
    EN = 0;
}
/***************页设置:显示在哪一页******************/
/*************共8页,一页是8行像素点*****************/
void lcd_set_page(uchar page)
{
    page = 0xb8 | page;   // 页的首地址为0xb8:page或上0xb8=选择page页
    lcd_w_cmd(page);
} 
/************行设置:起始在哪一行********************/
/**********每页共8行,一般从0行开始******************/
void lcd_set_line(uchar sline)
{
    sline = 0xc0 | sline;  // 起始行地址为0xc0:sline或上0xc0=选择行
    lcd_w_cmd(sline);
} 
/*************起始列设置+像素点选择********************/
/***********每半片共64列,列值不得大于63***************/
void lcd_set_column(uchar column)
{
    column = 0x3f & column;  // 与上列的最大值63:0x3f 可得所选列值<63
    column = 0x40 | column;  // 得列的首地址
    lcd_w_cmd(column);
}
/*************设置显示的开关********************/
/**********0为关闭显示;1为 开启显示************/
void lcd_on_off(uchar set)
{
    set = 0x3e | set;    // =0011 111x----0x3e为关闭显示;0x3f为开启显示
    lcd_w_cmd(set);
}
/*************选择左右半屏显示********************/
/********0-全屏显示;1-左;2-右********************/
/************cs片选端低电平有效********************/
void lcd_cs(uchar sel)
{
    switch (sel)
    {
    case 0:CS1 = 0; CS2 = 0; break;   // 全屏显示
    case 1:CS1 = 0; CS2 = 1; break;   // 左显示
    case 2:CS1 = 1; CS2 = 0; break;   // 右显示
    default:break;
    }
}
/*************清屏:选择半屏********************/
/********0-清全屏;1-清左;2-清右***************/
void lcd_clear(uchar sel)
{
    uchar i, j;
    lcd_cs(sel);
    for (i = 0; i < 8; i++)
    {
        lcd_set_page(i);
        lcd_set_column(0);
        for (j = 0; j < 64; j++)
        {
            lcd_w_data(0x00);  // 每列全部写0,列地址指针自动+1
        }
    }
}

4.  仿真proteus8.6

  本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

正转:

反转:

停止:

5.  设计报告

  设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。

6.  资料清单

  设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。

7.  资料获取链接

百度网盘下载链接:【B04】百度网盘下载链接

更多单片机仿真设计合集:单片机仿真设计合集

  • 单片机仿真设计合集资料获取.pdf
    下载
点赞
收藏
评论
分享
加入交流群
举报

相关推荐

方案定制

去合作
方案开发定制化,2000+方案商即时响应!