Proteus

您所在的位置:网站首页 车床正转和反转代码 Proteus

Proteus

2023-07-11 04:17| 来源: 网络整理| 查看: 265

正反转可控的步进电机

一、Proteus仿真演示

二、代码特点

1、代码启用定时器0作为键盘扫描的延时,不要采用Delay延时个几百毫秒,这样主循环就没有实时性了。切记:实际项目中是不会在主循环中延时上百毫秒的。

2、采用D4指示灯测试定时器0是否正常工作,同时也作为呼吸灯使用。

3、按键判断为释放后执行,其扫描子程序置放在定时器0中。全新的键盘扫描程序,经实际工程的验证。

三、开发环境介绍

本实验代码基于Keil C51,仿真软件:Protues_8.9

四、主要元件介绍

1、单片机:AT89C51或STC89C51

------------------------------------------------------------

2、LCD1602

Proteus里,LCD1602就是LM016L,除了没有背光灯电源外用法一致。

1)LCD1602概述

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1、16*2、20*2 与40*2 行等的模块。硬件如图:

------------------------------

2)1602LCD 主要技术参数 显示容量:16×2 个字符 芯片工作电压:4.5~5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V

------------------------------

3)引脚定义

PIN1:VSS 为地电源。 PIN2:VDD 接 5V 正电源。 PIN3:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。 PIN4:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 PIN5:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。 PIN6:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 PIN7~PIN14:D0~D7 为 8 位双向数据线。 PIN15:背光源正极。 PIN16:背光源负极。

------------------------------

4)指令集

LCD1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)

指令1:清显示,指令码 01H,光标复位到地址 00H 位置。

指令 2:光标复位,光标返回到地址 00H。

指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符。 指令 7:字符发生器 RAM 地址设置。 指令 8:DDRAM 地址设置。 指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。

------------------------------

5)如何显示

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,下图是 LCD1602 的内部显示地址。

例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。

1602LCD 的一般初始化(复位)过程: 延时 15mS 写指令 38H(不检测忙信号) 延时 5mS 写指令 38H(不检测忙信号) 延时 5mS 写指令 38H(不检测忙信号)

以后每次写指令、读/写数据操作均需要检测忙信号 写指令 38H:显示模式设置 写指令 08H:显示关闭 写指令 01H:显示清屏 写指令 06H:显示光标移动设置 写指令 0CH:显示开及光标设置

五、原代码

/******************************************************** 程序名:main.C 版 本:Ver1.0 芯 片:AT89C51 晶 体:片外12MHz 编 程: [email protected] 日 期:2022-6-11 描 述:本实例通过三个按键控制步进电机正转、反转、停止 C编译器:Keil C51 V9.54 注意事项: 重要事项: ********************************************************/ #include #define uint unsigned int #define uchar unsigned char sbit K1 = P3^0; sbit K2 = P3^1; sbit K3 = P3^2; sbit FFW_Led = P0^0; sbit REV_Led = P0^1; sbit Stop_Led = P0^2; sbit Led=P2^3; uchar code FFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转 uchar code REV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转 uchar Time0_Flag=0; uint Time0_Count=0; uchar Key1Flag,Key2Flag,Key3Flag; /***************************************************************************/ void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3