【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;
    		}
    		
    	}
    }
相关推荐
智商偏低3 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen4 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森6 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白6 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D7 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术10 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt11 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘11 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang11 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n13 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件