【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;
    		}
    		
    	}
    }
相关推荐
逼子格20 分钟前
五种音频器件综合对比——《器件手册--音频器件》
嵌入式硬件·音视频·硬件工程师·硬件测试·电子器件·硬件笔试真题·音频器件
niuTaylor2 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)11 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫12 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi14 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
了一li16 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)19 小时前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb
march_birds19 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式20 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角0101000121 小时前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网