【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态

步进电机控制

  • 设计思路

电路设计:

  1. 选用AT89C51单片机作为电路核心部件,外加LM016L液晶显示屏作为显示,显示步进电机的Fast,Slow,Stop的三个状态
  2. 将AT89C51单片机所选引脚与LM016L控制引脚相连,再将数据通过引脚与LCD接收引脚相连。
  3. 通过AT89C51单片机P0^0和P0^2两个引脚引出两个按钮,作为Fast和Slow。通过AT89C51单片机P3^0连接一个4N25光耦,以光为媒介来传递电信号,进而对步进电机的速度进行控制。

代码设计:

  1. 将AT89C51单片机所用引脚进行定义,例Fast、Slow按钮,LM016L数据和控制引脚等
  2. 构造基本的功能函数:延时函数、LCD控制函数、LCD数据函数、显示函数。
  3. 主函数:先将芯片的引脚和LCD屏幕进行初始化,然后循环执行以下操作:实时监测P0^0和P0^2两个引脚的高低电平(即外部两个按钮是否有操作),如果P0^0为低电平,说明fast按钮被按下,通过LCD控制函数在液晶显示屏上显示"fast",P0^2同理。如果两个电平都为高电平,则步进电机保持"stop"状态。
  • 原理图

  • 测试过程及结果说明

  • 在keil端进行代码编写,将实验代码进行编译,结果正确无任何错误。

  • 打开Proteus软件,绘制原理图,放置元件,双击AT89C51单片机芯片,将keil端编译之后生成的HEX文件加载到芯片内。

  • 进行Proteus仿真

  • 启动仿真,当两个按钮均未被按下时,LM016L液晶显示屏屏幕显示"stop"字样

  • 4.当上面的按钮(与P0^0相连)被按下时,发现步进电机开始运转,同时LM016L液晶显示屏屏幕显示"fast"字样

  • 5.当下面的按钮(与P0^2相连)被按下时,发现步进电机减速运转直至停止,同时LM016L液晶显示屏屏幕显示"slow"字样

  • C语言代码:

    #include<reg51.h>

    sbit F = P0^0; // Button for Fast Speed

    sbit S = P0^2; // Button for Slow Speed

    sbit RS = P3^1;// Register Select Pin of LCD

    sbit EN = P3^2;// Enable Pin of LCD

    #define LCD P2 // LCD Data pins

    sbit Motor = P3^0;

    void MSdelay(int n)

    {

    int i,j;

    for(i=0;i<1275;i++)

    for(j=0;j<n;j++);

    }

    void lcd_cmd(char a)

    {

    LCD = a;

    RS = 0;

    EN = 1;

    MSdelay(1);

    EN = 0;

    }

    void lcd_data(char b)

    {

    LCD = b;

    RS = 1;

    EN = 1;

    MSdelay(1);

    EN = 0;

    }

    void lcd_display(char *lcd)

    {

    while(*lcd!='\0')

    {

    lcd_data(*lcd);

    lcd++;

    }

    }

    void main()

    {

    lcd_cmd(0x01);

    lcd_cmd(0x0E);

    lcd_cmd(0x38);

    lcd_display("DC Motor Speed");

    while(1)

    {

    if(F==0)

    {

    lcd_cmd(0xC0);

    lcd_display("Fast");

    while(F==0)

    {

    Motor = 0;

    MSdelay(100);

    Motor = 1;

    MSdelay(0);

    }

    }

    if(S==0)

    {

    lcd_cmd(0xC0);

    lcd_display("Slow");

    while(S==0)

    {

    Motor = 0;

    MSdelay(50);

    Motor = 1;

    MSdelay(50);

    }

    }

    else

    {

    lcd_cmd(0xC0);

    lcd_display("Stop");

    Motor = 1;

    }

    }

    }

    C语言代码:
    #include<reg51.h>
    sbit F = P0^0; // Button for Fast Speed
    sbit S = P0^2; // Button for Slow Speed
    sbit RS = P3^1;// Register Select Pin of LCD
    sbit EN = P3^2;// Enable Pin of LCD
    #define LCD P2 // LCD Data pins
    sbit Motor = P3^0;
    
    void MSdelay(int n)
    {
    	int i,j;
    	for(i=0;i<1275;i++)
    	for(j=0;j<n;j++);
    }
    
    void lcd_cmd(char a)
    {
    	LCD = a;
    	RS = 0;
    	EN = 1;
    	MSdelay(1);
    	EN = 0;
    }
    
    void lcd_data(char b)
    {
    	LCD = b;
    	RS = 1;
    	EN = 1;
    	MSdelay(1);
    	EN = 0;
    }
    
    void lcd_display(char *lcd)
    {
    	while(*lcd!='\0')
    	{
    		lcd_data(*lcd);
    		lcd++;
    	}
    }
    
    void main()
    {
    	lcd_cmd(0x01);
    	lcd_cmd(0x0E);
    	lcd_cmd(0x38);
    	lcd_display("DC Motor Speed");
    	while(1)
    	{
    		if(F==0)
    		{
    			lcd_cmd(0xC0);
    			lcd_display("Fast");
    			while(F==0)
    			{
    			Motor = 0;
    			MSdelay(100);
    			Motor = 1;
    			MSdelay(0);
    			}
    		}
    		
    		if(S==0)
    		{
    			lcd_cmd(0xC0);
    			lcd_display("Slow");
    			while(S==0)
    			{
    			Motor = 0;
    			MSdelay(50);
    			Motor = 1;
    			MSdelay(50);
    			}
    		}
    		else
    		{
    			lcd_cmd(0xC0);
    			lcd_display("Stop");
    			Motor = 1;
    		}
    		
    	}
    }
    
相关推荐
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
辰哥单片机设计5 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器
夜间去看海5 小时前
基于51单片机的自动清洗系统(自动洗衣机)
嵌入式硬件·51单片机·proteus·洗衣机
yrx0203076 小时前
stm32 IIC总线busy解决方法
stm32·单片机·嵌入式硬件
YHPsophie7 小时前
ATGM331C-5T杭州中科微BDS/GNSS全星座定位授时模块应用领域
经验分享·笔记·单片机·信息与通信·交通物流
Archie_IT8 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
辰哥单片机设计8 小时前
1×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·传感器
wmkswd8 小时前
CAN总线-STM32上CAN外设
stm32·单片机·嵌入式硬件
Ruohongxu8 小时前
LAN8720A-CP-TR-ABC QFN-24 以太网收发器芯片
单片机