单片机控制步进电机和数码管显示
步进电控制实验报告
一、实验目的1. 理解步进电机的工作原理及其应用领域。
2. 掌握单片机控制步进电机的技术方法。
3. 熟悉步进电机的驱动电路设计。
4. 通过实验验证步进电机控制系统的性能。
二、实验原理步进电机是一种将电脉冲信号转换为角位移的电机,具有精度高、响应快、控制简单等优点。
其工作原理是:当输入一定频率的脉冲信号时,步进电机按照一定的步距角转动。
步进电机的步距角与线圈匝数、绕组方式有关。
本实验采用单片机控制步进电机,通过编写程序实现步进电机的正转、反转、停止、转速调节等功能。
三、实验设备1. 单片机实验平台:包括51单片机、电源、按键、数码管等。
2. 步进电机驱动模块:用于驱动步进电机,包括驱动电路和步进电机本体。
3. 实验指导书。
四、实验步骤1. 搭建实验电路(1)连接单片机实验平台,包括电源、按键、数码管等。
(2)连接步进电机驱动模块,包括电源、控制线、步进电机本体等。
(3)检查电路连接是否正确,确保无误。
2. 编写控制程序(1)初始化单片机相关端口,包括P1口、定时器等。
(2)编写步进电机控制函数,包括正转、反转、停止、转速调节等功能。
(3)编写主函数,根据按键输入实现步进电机的控制。
3. 下载程序(1)将编写好的程序下载到单片机实验平台。
(2)检查程序是否下载成功。
4. 测试实验(1)观察数码管显示的转速挡次和转动方向。
(2)通过按键控制步进电机的正转、反转、停止和转速调节。
(3)观察步进电机的转动情况,验证控制程序的正确性。
五、实验结果与分析1. 实验结果(1)通过按键控制步进电机的正转、反转、停止和转速调节。
(2)数码管显示转速挡次和转动方向。
(3)步进电机按照设定的方向和转速转动。
2. 实验分析(1)通过实验验证了单片机控制步进电机的可行性。
(2)实验结果表明,控制程序能够实现步进电机的正转、反转、停止和转速调节等功能。
(3)实验过程中,需要对步进电机驱动模块进行合理设计,以确保步进电机的稳定运行。
单片机数码管显示+步进电机正反加速转动C语言程序
{
if(jia_key == 0)
{
delay(5);
if(jia_key == 0)
{
num++; //速度标识位
feng_ming_qi();
while(jia_key == 0) ;
for(k=125;k>0;k--);
}
/***************************************************************************************************/
void xianshi ( )//显示程序
{
delay(50);
if(zf_key ==0)
{
flag=~flag;
feng_ming_qi();
while(zf_key == 0);
}
}
if(stop_key == 0)
{
{
uchar j;
uint i;
for(j=0+table_begin;j<4+table_begin;j++)
{
P1 = code_table[j];
for(i=0;i<maichong;i++)
{
xianshi();
}
{
tong = 0xff;
tong = on[0];//位选为0;
liang = table[show_num];
delay(3);
liang = 0xff;
}
/***************************************************************************************************/
单片机控制步进电机系统(C语言源代码)
题目:单片机控制步进电机系统摘要很多工业控制设备对位移和角度的控制精度要求较高, 一般电机很难实现, 而步进电机可精确实现所设定的角度和转数。
本设计主要是运用51 单片机控制六线4相步进电机系统, 由单片机产生驱动脉冲信号, 控制步进电机以一定的转速向某一方向产生一定的转动角度。
同时能够利用单片机实现电机的正、反转及速度控制,并能在数码管上显示出相应的速度。
本文中给出了该系统设计的硬件电路,软件设计,人机交互等。
并对各个功能模块进行了详细的说明。
主要内容包括以下几个方面:单片机控制步进电机的一般原理。
电机驱动及控制的实现。
控制系统整体设计以及模块划分说明。
原理图。
代码。
关键词:单片机;步进电机;系统;驱动AbstractMany Industrial control equipment have a highly requirement in displacement and angle with control accuracy, the most motor can't carry out .but the step motor can carry out the displacement and angle that you enactmented in accuracy. This design mainly used SCM to control step motor system.The step motor is formed six lines and four phasic.Through SCM generate the drive pulse signal.Control stepper motor through a certain speed in a direction to get a certain degree of rotation angle.At the same time, It can use SCM to realization of the motor is , reverse and speed control. and showed the speed in the digital tube.In this paper, given the design of the system hardware circuit,software design, human-computer interaction and so on.and it given the details description of each functional module.the main contents include the following:(1) The general principles of signal_chip controlling step motor.(2) The realization of motor driving and controlling(3) Control system overall design and description module division(4) Schematic Diagram(5) CodeKey Words:SCM; stepper motor; system; drive目录引言41 单片机控制步进电机的一般原理41.1 步进电机41.1.1 步进电机介绍41.1.2 步进电机分类51.1.3 技术指标51.1.4 步进电机工作原理51.2 单片机72 步进电机驱动实现82.1简介82.2驱动选择83 系统硬件设计93. 1 单片机控制电机93.2 键盘93.3 显示部分10程序流程图11总结12致谢13参考文献13附录13C代码13引言目前,在工业控制生产以及仪器上应用十分广泛。
单片机课程设计--单片机控制步进电机
单片机课程设计题目:单片机控制步进电机班级:电信设计任务书摘要:本次课业设计是利用单片机技术知识设计一个步进电机控制系统,本次课业设计用到的关键元器件有STC89C52单片机,ULN2003驱动芯片,五线四相步进电机,由52单片机驱动ULN2003,进而驱动步进电机进行正转反转。
关键词:步进电机;52单片机;ULN2003。
目录一、引言 ............................... 错误!未定义书签。
二、总体方案 (6)三、硬件设计 (7)四、软件设计 (10)五、调试 (13)六、总结 (13)七、参考文献 (13)元件清单 (14)一、引言步进电机是一种进行精确步进运动的机电执行元件,它广泛应用于工业机械的数字控制,为使系统的可靠性、通用性、可维护性以及性价比最优,根据控制系统功能要求及步进电机应用环境,确定了设计系统硬件和软件的功能划分,从而实现了基于8051单片机的四相步进电机的开环控制系统。
控制系统通过单片机存储器、I/O接口、中断、键盘、LED显示器的扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,急停等功能。
为实现单片机控制步进电机系统在数控机床上的应用,系统设计了两个外部中断,以实现步进电机在某段时间内的反复正反转功能,也即数控机床的刀架自动进给运动,随着单片机技术的不断发展,单片机在日用电子产品中的应用越来越广泛,自六十年代初期以来,步进电机的应用得到很大的提高。
人们用它来驱动时钟和其他采用指针的仪器,打印机、绘图仪,磁盘光盘驱动器、各种自动控制阀、各种工具,还有机器人等机械装置。
此外作为执行元件,步进电机是机电一体化的关键产品之一,被广泛应用在各种自动化控制系统中,随着微电子和计算机技术的发展,它的需要量与日俱增,在各个国民经济领域都有应用。
步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用大规模集成电路的发展以及单片机技术的迅速普及,为设计功能强,价格低的步进电机控制驱动器提供了先进的技术和充足的资源。
单片机控制步进电机调速实验
51系列单片机控制步进电机调速实验实验目的及要求:1、熟悉步进电机的工作原理2、熟悉51系列单片机的工作原理及调试方法3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量)4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。
速度设定由键盘设定,步进电机的反馈速度由LED数码管显示。
实验原理:步进电机控制原理一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。
因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。
步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。
由于输入的是脉冲信号,输出的角位移是断续的,所以又称为脉冲电动机。
随着数字控制系统的发展,步进电动机的应用将逐渐扩大。
步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路根据控制信号工作,控制信号可以由单片机产生。
电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开。
0、1/3て、2/3て,(相邻两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐,B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)图1 是反应式步进电动机结构示意图,它的定子具有均匀分布的六个磁极,磁极上绕有绕组。
控制步进电机实验报告(3篇)
第1篇一、实验目的1. 理解步进电机的工作原理及控制方法。
2. 掌握单片机与步进电机驱动模块的接口连接方法。
3. 学习使用C语言编写程序,实现对步进电机的正反转、转速和定位控制。
4. 通过实验,加深对单片机控制系统的理解。
二、实验原理步进电机是一种将电脉冲信号转换为角位移或线位移的电机,其特点是控制精度高、响应速度快、定位准确。
步进电机控制实验主要涉及以下几个方面:1. 步进电机驱动模块:常用的驱动模块有ULN2003、A4988等,它们可以将单片机的数字信号转换为步进电机的控制信号。
2. 单片机:单片机是整个控制系统的核心,负责接收按键输入、处理数据、控制步进电机驱动模块等。
3. 步进电机:步进电机分为单相、双相和三相等类型,本实验使用的是双相四线步进电机。
三、实验设备1. 单片机开发板:例如STC89C52、STM32等。
2. 步进电机驱动模块:例如ULN2003、A4988等。
3. 双相四线步进电机。
4. 按键。
5. 数码管。
6. 电阻、电容等元件。
7. 电源。
四、实验步骤1. 硬件连接(1)将步进电机驱动模块的输入端(IN1、IN2、IN3、IN4)分别连接到单片机的P1.0、P1.1、P1.2、P1.3口。
(2)将按键的输入端连接到单片机的P3.0口。
(3)将数码管的段选端连接到单片机的P2口。
(4)将步进电机驱动模块的电源端连接到电源。
(5)将步进电机连接到驱动模块的输出端。
2. 编写程序(1)初始化单片机I/O端口,设置P1口为输出端口,P3.0口为输入端口,P2口为输出端口。
(2)编写按键扫描函数,用于读取按键状态。
(3)编写步进电机控制函数,实现正反转、转速和定位控制。
(4)编写主函数,实现以下功能:a. 初始化数码管显示;b. 读取按键状态;c. 根据按键状态调用步进电机控制函数;d. 更新数码管显示。
3. 调试程序(1)将程序烧写到单片机中;(2)打开电源,观察数码管显示和步进电机运行状态;(3)根据需要调整程序,实现不同的控制效果。
单片机控制步进电机
单片机控制步进电机一、功能使用80C51单片机控制步进电机,控制步进电机实现正转,反转。
二、功能原理图:三、电路原理图:说明:当按下K1键时,电机正转。
当按下K2键时,电机反转。
四、实验说明:实验中用P0口和P2.6和P2.7接LED数码管,P2.0和P2.1接按钮开关。
P3.0~P3.3接驱动芯片。
UL2003A的输出端分别接电机的A、B、C、D相。
当电机正转是时显示CC,当电机反转是显示AA。
1.步进电机工作原理步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
实验中使用的是一个四相步进电机。
四相步进电机实物图四相步进电机截面图实验中步进电机运用了双四拍运行方式,当电机绕组通电时序为AD-BC-CD-DA时为正转。
当电机绕组通点时序为DA-CD-BC-AB时为反转。
2.驱动芯片UL2003A实验中步进电机的驱动芯片为UL2003A,它是集电极开路输出的功率反相器。
它的功能是放大和倒相80C51输出的脉冲信号,再将放大和倒相和的信号送给步进电机。
五、程序流程图六、实现程序K1 EQU P2.0K2 EQU P2.1ORG 0000HAJMP MAINORG 0030HMAIN: MOV A,#33HSETB P2.6SETB P2.7KEY1: SETB K1 ;JB K1, KEY2 ;判断K1是否按下KEY11: ACALL DELAY_A ;延时,去抖动SETB K1JB K1, KEY11 ;确认键按下ACALL CLOCKWISEKEY2: SETB K2JB K2, KEY1 ;判断K2是否按下KEY21: ACALL DELAY_A ;延时,去抖动SETB K2JB K2, KEY21 ;确认键按下ACALL ANTI_CLOCKWISEAJMP KEY1CLOCKWISE: RL AMOV P3,A ;驱动电机正转MOV P0,#0C6H ;显示CCACALL DELAYRETANTI_CLOCKWISE:RR AMOV P3 , A ;驱动电机反转MOV P0,#88H ;显示AAACALL DELAYRETDELAY: MOV R6 , #20HDELAY22: MOV R7 , #80HDELAY11: DJNZ R7 , DELAY11DJNZ R6 , DELAY22RETDELAY_A: MOV R7,#88HDELAY1: DJNZ R7,DELAY1RETend七、实验思考单片机不仅可以控制步进电机的转向,还可以控制步进电机的速度。
基于C51单片机步进电机综合控制实验
重庆工商大学计算机与信息工程学院学院《单片机原理及应用》课程实验报告实验名称:步进电机综合控制实验实验班级:2010级自动化专业班级:2010级自动化三班指导老师:文远熔组员:陶园2010133330 王路2010133344江洋2010133335陈娅2010133326张琴芳2010133317张丹2010133320(组长)一、摘要:本实验利用8051单片机达到控制步进电机的启动、停止、正转、反转、点动、转过指定角度、状态显示和数据指示的目的,使步进电机控制更加灵活。
步进电机驱动芯片采用ULN2003,ULN2003具有大电流、高电压,外电路简单等优点。
利用ZLG7290模块驱动LED数码管显示速度设定值。
通过这个单片机控制系统的设计来掌握步进电机的工作原理和驱动过程以及LED显示原理和ZLG7290模块的使用方法,用LED数码管显示实验要求的状态结果,设计电路的硬件接线图和实现上述要求的程序。
关键词:51单片机步进电机ZLG7290 ULN2003二、设计内容与要求:1、任务介绍:实现步进电机按规定的速度正转、反转,转过指定的角度,要有点动功能。
所有命令通过键盘输入,步进电机在运行过程中要有状态和数据指示。
2、每套设计文档应包括:系统原理说明、程序框图、电路原理图和程序清单。
三、实验器件介绍及原理:本实验采用单片机来控制步进电机,实现了软件与硬件相结合的控制方法。
在单片机环境下,用ULN2003驱动芯片驱动步进电机,用ZLG7290芯片作用下的按键控制步进电机的运行,从而达到实验要求。
其控制框图(图一)为:图一:控制框图1、系统硬件介绍1.1步进电机1.1.1相关的技术指标:a、相数:指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机,本实验用的是四相步进电机。
电机相数不同,其步距角也不同。
b、步距角:表示控制系统每发一个步进脉冲信号,电机所转动的角度。
本实验程序运行前要先测量步进电机的步距角。
单片机控制步进电机加显示程序
步进电机(键盘控制可调速加显示)#include <reg51.h>#define uchar unsigned charstatic unsigned int count; //计数static int step_index; //步进索引数,值为0-7static bit turn; //步进电机转动方向static bit stop_flag; //步进电机停止标志static int speedlevel; //步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; //步进电机转速参数计数void ddelay(void); //键盘扫描延时函数void delay(unsigned int endcount); //延时函数,延时为endcount*1毫秒void gorun(); //步进电机控制步进函数void Delay400Ms(void);void LCMInit(void); //LCM初始化void WriteCommandLCM(unsigned char WCLCM,BuysC); //BuysC为0时忽略忙检测void DisplayOneChar(uchar X, uchar Y, uchar DData); void DisplayListChar(uchar X, uchar Y,uchar ListLength, uchar *DData,uchar n);sbit P10=P3^0 ; //电机端口定义sbit P11=P3^1 ;sbit P12=P3^2;sbit P13=P3^3 ;uchar code speed[]={ 0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x3 2,0x31,0x30};uchar code stop[] = {"stop"};uchar code go[] = {"go:"};uchar code back[] = {"back:"};uchar code max[] = {"max:8"};void ddelay(void){uchar i;for (i=300;i>0;i--);}uchar keyscan(void){uchar scancode;uchar tmpcode;P1 = 0xf8; // 发全0行扫描码 if ((P1&0xf8)!=0xf8) // 若有键按下{ddelay(); // 延时去抖动if ((P1&0xf8)!=0xf8) // 延时后再判断一次,去除抖动影响{scancode = 0xfe;while((scancode&0x08)!=0) // 逐行扫描{P1 = scancode; // 输出行扫描码if ((P1&0xf8)!=0xf8) // 本行有键按下{tmpcode = (P1&0xf8)|0x07;return((~scancode)+(~tmpcode)); // 返回特征字节码,为1的位即对应于行和列}else scancode = (scancode<<1)|0x01; // 行扫描码左移一位}}}return(0); // 无键按下,返回值为0}void main(void){uchar key;count = 0;step_index = 0;spcount = 0;P10 = 0;P11 = 0;P12 = 0;P13 = 0;EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1ET0 = 1; //定时器0中断允许TH0 = 0xFc;TL0 = 0x18; //设定时每隔1ms中断一次TR0 = 1; //开始计数P0=0XFF;P3 &=0XEF; //573片选LCMInit(); //LCM初始化Delay400Ms();stop_flag = 0;turn=0;speedlevel = 5;DisplayListChar(0,0,3,go,1); //每次扫描键盘显示更新一次uchar code go[]DisplayOneChar(0,1,0x35); //每次扫描键盘显示更新一次while(1){key = keyscan();switch(key){case 0x09: //按键#,正转以speedlevel = 1的速度转1000*0.5MS=0.5Sstop_flag=0;turn = 0;speedlevel =5;gorun();WriteCommandLCM(0x01,1);//显示清屏,DisplayListChar(0,0,3,go,0); //每次扫描键盘显示更新一次uchar code go[]DisplayOneChar(0,1,0x35); //每次扫描键盘显示更新一次delay(1000);break;case 0x0c: //按键*,停止2000*0.5MS=0.5Sstop_flag=1;WriteCommandLCM(0x01,1);//显示清屏,DisplayListChar(0,0,4,stop,0); //每次扫描键盘显示更新一次break;case 0x0a: //按键0,反转以speedlevel = 1的速度转1000*0.5MS=0.5Sstop_flag=0;turn=1;speedlevel =5;gorun();WriteCommandLCM(0x01,1);//显示清屏,DisplayListChar(0,0,5,back,0); //每次扫描键盘显示更新一次DisplayOneChar(0,1,0x35); //每次扫描键盘显示更新一次delay(1000);break;case 0x11: // 按键9,以--speedlevel的加速转1000*0.5MS=0.5Sstop_flag=0;if (speedlevel==2){ speedlevel=2;}else { speedlevel--;}gorun();if(speedlevel==2){ DisplayListChar(0,1,5,max,0);}else {DisplayOneChar(0,1, speed[speedlevel]);} //每次扫描键盘显示更新一次delay(1000);break;case 0x12: // 按键8,以++speedlevel的减速转1000*0.5MS=0.5Sstop_flag=0;speedlevel++;gorun();WriteCommandLCM(0x01,1);//显示清屏,if(turn==0){DisplayListChar(0,0,3,go,0); //每次扫描键盘显示更新一次uchar code go[]DisplayOneChar(0,1, speed[speedlevel]);} //每次扫描键盘显示更新一次else {DisplayListChar(0,0,5,back,0); //每次扫描键盘显示更新一次DisplayOneChar(0,1,speed[speedlevel]);} //每次扫描键盘显示更新一次delay(1000);break;}}}//定时器0中断处理void timeint(void) interrupt 1{TH0=0xFc;TL0=0x18; //设定时每隔1ms中断一次count++;spcount--;if(spcount<=0) //速度调整,SPEEDLEVEL 越大,延时越长(延时约为1MS*SPEEDLEVEL),{ // 频率越小,速度越慢spcount = speedlevel;gorun();}}void delay(unsigned int endcount)//延时函数,延时为endcount*0.5毫秒 {count=0;do{}while(count<endcount); }void gorun(){if (stop_flag==1){P10 = 0;P11 = 0;P12 = 0;P13 = 0;return;}switch(step_index){case 0: //0P10 = 1;P11 = 0;P12 = 0;P13 = 0;break;case 1: //0、1P10 = 1;P11 = 1;P12 = 0;P13 = 0;break;case 2: //1P10 = 0;P11 = 1;P12 = 0;P13 = 0;break;case 3: //1、2P10 = 0;P11 = 1;P12 = 1;P13 = 0;break;case 4: //2P10 = 0;P11 = 0;P12 = 1;P13 = 0;break;case 5: //2、3P10 = 0;P11 = 0;P12 = 1;P13 = 1;break;case 6: //3P10 = 0;P11 = 0;P12 = 0;P13 = 1;break;case 7: //3、0P10 = 1;P11 = 0;P12 = 0;P13 = 1;}if (turn==0) //正转 {step_index++;if (step_index>7)step_index=0; }else{ //反转step_index--;if (step_index<0)step_index=7; }}。
51单片机步进电机+数码管显示程序
#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuinti,j;uchartemp,aa,bai,shi,ge,te;sbitduan=P2^0;sbitwei=P2^1;uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //顺时钟旋转相序表uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void display(ucharbai,ucharshi,ucharge);void delay(uint z);voidinit();void main(){init();//初始化子程序while(1){for(te=0;te<4;te++){while(temp>0){if(aa==20){temp--;aa=0;bai=3-te;shi=temp%100/10;ge=temp%10;}display(bai,shi,ge);}if(temp==0)temp=60;}for(j=0;j<32;j++)for(i=0;i<8;i++){P0=CCW[i];delay(10);}delay(400);for(j=0;j<32;j++)for(i=0;i<8;i++){P0=CW[i];delay(10);}P0=0x00;}}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(ucharbai,ucharshi,ucharge) {duan=1;P1=table[bai];duan=0;P1=0x00;wei=1;P1=0x10 ;wei=0;delay(1);duan=1;P1=0xbf;duan=0;P1=0x00;wei=1;P1=0x20;wei=0;delay(1);duan=1;P1=table[shi];duan=0;P1=0x00;wei=1;P1=0x40;wei=0;delay(1);duan=1;P1=table[ge];duan=0;P1=0x00;wei=1;P1=0x80;wei=0;delay(1);}voidinit(){wei=0;duan=0;P0=0x00;temp=60;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}、、、、、、、、、、、、、、、、、、、、、、#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuinti,j;uchartemp,aa,bai,shi,ge,te;sbitduan=P2^0;sbitwei=P2^1;uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //顺时钟旋转相序表uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//void display(ucharbai,ucharshi,ucharge);void delay(uint z);voidinit();void main(){init();//初始化子程序while(1){for(j=0;j<200;j++)for(i=0;i<8;i++){P0=CCW[i];delay(20);}delay(400);for(j=0;j<200;j++)for(i=0;i<8;i++){P0=CW[i];delay(20);}P0=0x00;}}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }voidinit(){wei=0;duan=0;P0=0x00;temp=60;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}。
51单片机 电机控制 输入速度 七段数码管显示 汇编程序
51单片机电机控制输入速度七段数码管
显示汇编程序
简介
本文档介绍了使用51单片机控制电机的方法,以及如何通过输入设置速度,并使用七段数码管显示相关信息的汇编程序。
电机控制
在使用51单片机控制电机之前,需要连接合适的电机驱动模块,并将其与单片机进行连接。
通过控制电机驱动模块的引脚,可以实现电机的正转、反转、停止等功能。
输入速度
可以通过外部的输入设备(如按键、旋钮等)来设置电机的速度。
通过读取输入设备的状态,可以在程序中动态地调整电机的速度。
七段数码管显示
可以通过七段数码管来显示相关信息,如电机的速度、转速等。
通过控制七段数码管的引脚,可以实现在数码管上显示相应的数字
或字符。
汇编程序
使用51汇编语言编写程序,通过设置相应的控制寄存器和引
脚状态,可以实现电机的控制和数码管的显示。
汇编程序需要包括
以下几个方面的功能:
- 初始化相关引脚和寄存器
- 读取输入设备的状态
- 根据输入设备的状态设置电机的速度
- 控制电机的正转、反转、停止等操作
- 更新七段数码管显示的内容
总结
本文档介绍了51单片机控制电机的方法,以及通过输入设备
设置速度和使用七段数码管显示信息的汇编程序。
通过合理地编写
汇编程序,可以实现电机的精确控制和相关信息的显示。
以上是本文档的大致内容,希望对您有所帮助。
单片机控制步进电机和数码管显示
一、设计任务书设计内容:用80C51单片机设计一个步进电机控制器设计要求:1.用8015设计一个四相步进电机。
2.可控制步进电机的启动与停止,正转与反转。
3.10档速度调节。
4.点动控制。
5.可显示电机运行参数。
二、设计总体方案(一)控制方式的选择控制主要用于电机速度和方向的转换。
控制方式有按键控制和开关控制两种。
按键较开关而言,操作更加简便,故选按键控制。
方案一:独立按键。
独立按键可自由连接,线路简单。
方案二:编码式键盘。
编码式键盘的按键接触点接于74LS148芯片。
当键盘上没有闭合时,所有按键都断开,当某一键闭合时,该键对应的编码由74LS148输出。
本次设计所需按键不多,不需要采用复杂编码,考虑硬件条件、线路连接和经济性等方面,选择方案一。
(二)电机电路设计方案的选择由于条件的限制,对于电机的选择只能是实验台上最小步距角18°的电机,其中已包含了驱动电路。
(三)单片机的选择方案一:A T89C51高性能8位单片机,内部集成CPU、存储器、寄存器、I/O接口,从而构成较为完整的计算机,价格便宜。
方案二:C8051F005单片机,该单片机是完全集成的混合信号系统及芯片,具有8051兼容的微控制器内核,与MCS-51指令集完全兼容。
除了具有标准8052的数字外设部件,片内还继承了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,执行速度快,但价格较贵。
本次课程设计是在仿真环境下进行,没有太过考虑单片机选择的问题,但就设计本身来讲,从物美价廉的角度考虑,选择方案一较合适。
(四)显示方案的选择方案一:采用LED数码管。
LED数码管是轮流现实的,其利用人烟的视觉暂留特性,使人感觉不到数码管闪动,看到每只数码管都常亮。
利用其显示必须不停给数码管数据输入口循环赋值,显示内容较多,编程和接线较为复杂。
方案二:采用LCD1602液晶显示器。
LCD1602具有功率小,效果明显,变成容易等优点,且它最多能显示2×16个字符,可以轻松满足设计要求。
简述单片机控制数码管动态显示的工作原理
简述单片机控制数码管动态显示的工作原理一、概述数码管动态显示是一种常见的技术,它通过单片机控制多个数码管以实现同时显示多路数据。
这种技术广泛应用于各种电子设备中,如数字仪表、电子时钟、智能仪表等。
单片机作为一种低功耗、低成本、高集成度的芯片,成为了实现数码管动态显示的核心器件。
二、工作原理1.硬件连接数码管动态显示通常需要连接多个数码管和单片机。
每个数码管需要一个行驱动器,用于控制数码管的亮灭。
单片机通过串行接口与行驱动器相连,以控制多个数码管的显示。
同时,单片机还需要连接一个时钟电路,以实现定时刷新数码管的数据。
在实际应用中,行驱动器通常采用共阳极接法,而单片机则采用串行数据传输方式与行驱动器进行通信。
此外,为了实现数码管的动态显示,通常还需要连接多个限流电阻和限位电阻等元器件。
2.显示方式数码管动态显示主要有静态显示和动态显示两种方式。
静态显示是指每个数码管轮流显示,实现多路数据的依次显示,但由于需要为每个数码管分配单独的接口,因此适用于数据量较小的场景。
而动态显示则是通过控制数码管的行驱动器轮流导通,实现多个数码管的依次显示,从而适用于数据量较大的场景。
行驱动器通常采用轮流导通的方式控制多个数码管,以达到同时显示多路数据的目的。
3.控制方式单片机通过串行接口向行驱动器发送控制信号,包括数据信号和时钟信号。
数据信号用于传输要显示的数据,时钟信号则用于定时刷新数据。
此外,单片机还可以通过中断控制方式,根据需要实时更新显示内容。
在实际应用中,为了提高刷新速度和显示效果,通常需要优化单片机的处理速度和行驱动器的驱动能力。
此外,单片机还可以通过PWM(脉宽调制)控制行驱动器的电流大小,以实现更好的亮度调节和动态效果。
4.刷新速度数码管动态显示的刷新速度取决于单片机的处理速度和行驱动器的驱动能力。
为了获得更好的显示效果和更长的使用寿命,通常需要较高的刷新速度和适当的行驱动器驱动电流。
此外,可以通过优化软件算法和代码来实现更高的刷新速度和更好的显示效果。
单片机指令的数码管显示学习如何使用单片机指令进行数码管显示
单片机指令的数码管显示学习如何使用单片机指令进行数码管显示在学习如何使用单片机指令进行数码管显示之前,我们首先需要了解什么是单片机和数码管。
一、单片机简介单片机是一种集成电路芯片,具有微处理器、存储器和各种接口电路等功能。
它具有体积小、功耗低、成本低等特点,广泛应用于电子设备、通信设备、汽车电子等领域。
二、数码管简介数码管是一种电子数字显示器件,常用来显示数字信息。
常见的数码管有共阴极数码管和共阳极数码管,其中共阴极数码管的极性是负极大,共阳极数码管的极性是正极大。
接下来,我们将学习如何使用单片机指令控制数码管进行显示。
1. 准备工作首先,我们需要准备以下材料:- 单片机开发板- 数码管(可以根据需要选择共阴极还是共阳极数码管)- 面包板- 连接线2. 硬件连接将数码管的引脚与单片机开发板上的引脚相连接,确保连接稳固。
3. 编写代码使用单片机开发工具(如Keil、Arduino等)编写相应的代码。
下面以Keil例举一个简单的示例。
```#include <reg51.h>sbit digit1 = P2^0;sbit digit2 = P2^1;sbit digit3 = P2^2;sbit digit4 = P2^3;sbit segA = P0^0; // 数码管A段sbit segB = P0^1; // 数码管B段sbit segC = P0^2; // 数码管C段sbit segD = P0^3; // 数码管D段sbit segE = P0^4; // 数码管E段sbit segF = P0^5; // 数码管F段sbit segG = P0^6; // 数码管G段sbit segDP = P0^7; // 数码管小数点段void delay(unsigned int n){unsigned int i, j;for(i = 0; i < n; i++)for(j = 0; j < 120; j++);}void displayDigit(unsigned char digit){switch(digit){case 0:segA = 0; segB = 0; segC = 0; segD = 0; segE = 0; segF = 0; segG = 1; segDP = 1;break;case 1:segA = 1; segB = 0; segC = 0; segD = 1; segE = 1; segF = 1; segG = 1; segDP = 1;break;case 2:segG = 0; segDP = 1;break;case 3:segA = 0; segB = 0; segC = 0; segD = 0; segE = 1; segF = 1; segG = 0; segDP = 1;break;case 4:segA = 1; segB = 0; segC = 0; segD = 1; segE = 1; segF = 0; segG = 0; segDP = 1;break;case 5:segA = 0; segB = 1; segC = 0; segD = 0; segE = 1; segF = 0; segG = 0; segDP = 1;break;case 6:segA = 0; segB = 1; segC = 0; segD = 0; segE = 0; segF = 0; segG = 0; segDP = 1;break;case 7:segG = 1; segDP = 1;break;case 8:segA = 0; segB = 0; segC = 0; segD = 0; segE = 0; segF = 0; segG = 0; segDP = 1;break;case 9:segA = 0; segB = 0; segC = 0; segD = 1; segE = 1; segF = 0; segG = 0; segDP = 1;break;default:break;}}void main(){unsigned char i;while(1){for(i = 0; i < 10; i++){displayDigit(i);delay(1000);}}}```4. 烧写程序将编写好的代码烧写到单片机开发板上。
基于AT89C51单片机的步进电机控制
基于AT89C51单片机的步进电机控制基于AT89C51单片机的步进电机控制摘要:随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。
研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。
步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。
采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。
软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。
本设计是采用AT89C51单片机对步进电机的控制,通过I/O口输出的时序方波作为步进电机的控制信号,信号经过芯片ULN2003驱动步进电机。
实践证明,基于单片机控制的步进电机比传统的步进控制器具有更好的性能,更加简单、方便、可靠。
本设计的主要研究对象就是开环伺服系统中最常用的执行器件——步进电机。
关键词:步进电机,单片机,正反转控制,键盘目录摘要 (1)第一章绪论 (2)1.1 步进电机及其发展 (2)1.2 步进电机在我国的发展应用及前景 (2)1.3 设计研究内容 (3)第二章控制系统硬件分析与设计 (4)2.1 步进电机 (4)2.2 单片机的选择 (6)2.3 步进电机控制系统的组成 (7)第三章控制系统软件分析与设计 (14)3.1 程序流程图 (14)3.2 读键盘子程序流程图 (15)3.3 键盘处理子程序流程图 (15)3.4 电机控制中断程序流程图 (16)第四章调试与改进 (18)4.1 调试与改进 (18)4.2 运行结果 (18)第五章总结 (19)致谢 (20)参考文献 (21)附录 (22)附录一源程序清单 (22)附录二控制原理图 (27)第一章绪论1.1 步进电机及其发展步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。
步进电机的单片机控制
步进电机的单片机控制本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO 口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。
摘要: 本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用 4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。
关键词: 步进电机 单片机 数码管一、 方案论证与比较1、 本设计的重点在于对步进电机的控制和驱动,设计中受控电机为四相六线制的步进电机(内阻33欧,步进1.8度,额定电压12V)方案一:使用多个功率放大器件驱动电机通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。
但是由于使用的是四相的步进电机,就需要对四路信号分别进行放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。
方案二:使用L298N芯片驱动电机L298N芯片可以驱动两个二相电机(如图1-1),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。
图1-1通过比较,使用L298N芯片充分发挥了它的功能,能稳定地驱动步进电机,且价格不高,故选用L298N驱动电机。
而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。
基于单片机控制的步进电机控制器
基于单片机控制的步进电机控制器应教054 丁敬坤摘要:本系统由单片机系统、显示系统、驱动系统和步进电机组成。
通过按键来控制单片机,通过P1口输出的具有时序的方波作为步进电机的控制信号,使步进电机的转向与转速发生变化,达到对电机控制的目的。
该设计具有结构简单、可靠性高、使用方便、可以实现较复杂的控制、具有较大的灵活性和适应性等特点。
关键词:步进电机单片机A T89C511 引言微型计算机的出现给人类生活带来了根本性的变化,使现代科学研究发生了质的飞跃,单片机技术的出现给现代工业测控领域带来了一次新的技术革命。
同时,随着科技技术的快速发展进步,在工业过程控制及某些仪表中,经常会用到步进电机,其精度高,具有快速起/停能力,可对位移量、旋转角和转动速度等进行高精度控制,作为控制执行部件而广泛应用于自动控制领域和精密机械领域,从而实现对生产过程或设备的精确控制。
本设计主要是设计一个由单片机控制的步进电机调速系统,操作者可通过系统的按钮和开关控制步进电机的旋转速度和方向,正反转速度要求变化,同时为了可以直观的看出电机的运行状态,其速度档位和旋转方向可以在数码管上显示出来。
2 总体设计方案2.1、设计思路根据步进电机的工作原理可以知道,如果通过单片机按顺序给绕组施加有序的脉冲电路。
就可以控制电机的转动。
转动的角速度大小与施加的脉冲频率成正比,而转动的方向则与脉冲的顺序有关。
常用的步进电机有三相、四相、五相和六相,相数越多,输出转距就越平稳。
2.2、单片机简介单片计算机即单片微型计算机。
(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。
他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。
而51 单片机是各单片机中最为典型和最有代表性的一种。
2.3、步进电机步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),步进电动机又称为脉冲电机,是工业过程控制和仪表中一种能够快速启动、反转和制动的执行元件,其功用是将电脉冲转换为相应的角位移或直线位移,由于在开环下就能实现精确定位的特点,使其在工业控制领域获得了广泛应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计任务书设计内容:用80C51单片机设计一个步进电机控制器设计要求:1.用8015设计一个四相步进电机。
2.可控制步进电机的启动与停止,正转与反转。
3.10档速度调节。
4.点动控制。
5.可显示电机运行参数。
二、设计总体方案(一)控制方式的选择控制主要用于电机速度和方向的转换。
控制方式有按键控制和开关控制两种。
按键较开关而言,操作更加简便,故选按键控制。
方案一:独立按键。
独立按键可自由连接,线路简单。
方案二:编码式键盘。
编码式键盘的按键接触点接于74LS148芯片。
当键盘上没有闭合时,所有按键都断开,当某一键闭合时,该键对应的编码由74LS148输出。
本次设计所需按键不多,不需要采用复杂编码,考虑硬件条件、线路连接和经济性等方面,选择方案一。
(二)电机电路设计方案的选择由于条件的限制,对于电机的选择只能是实验台上最小步距角18°的电机,其中已包含了驱动电路。
(三)单片机的选择方案一:AT89C51高性能8位单片机,内部集成CPU、存储器、寄存器、I/O接口,从而构成较为完整的计算机,价格便宜。
方案二:C8051F005单片机,该单片机是完全集成的混合信号系统及芯片,具有8051兼容的微控制器内核,与MCS-51指令集完全兼容。
除了具有标准8052的数字外设部件,片内还继承了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,执行速度快,但价格较贵。
本次课程设计是在仿真环境下进行,没有太过考虑单片机选择的问题,但就设计本身来讲,从物美价廉的角度考虑,选择方案一较合适。
(四)显示方案的选择方案一:采用LED数码管。
LED数码管是轮流现实的,其利用人烟的视觉暂留特性,使人感觉不到数码管闪动,看到每只数码管都常亮。
利用其显示必须不停给数码管数据输入口循环赋值,显示内容较多,编程和接线较为复杂。
方案二:采用LCD1602液晶显示器。
LCD1602具有功率小,效果明显,变成容易等优点,且它最多能显示2×16个字符,可以轻松满足设计要求。
由上可知,LCD1602液晶显示器的优点突出,故选择方案二。
(五)软件部分的选择软件部分的选择主要是指编程语言的选择,编译调试工具根据设计平台选择伟福软件。
编程语言主要有以下两种方案。
方案一:采用C语言编程。
C语言是一种结构化的高级语言,编程灵活,可移植性强,但占用资源多,执行效率低。
方案二:采用汇编语言进行编程,。
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言,占用资源少,程序执行效率高,但不易移植。
从一般编程所遵循的规律以及设计条件考虑,综合分析以上两种方案,最终选择方案二。
三、硬件设计该电机控制器采用单片机作为数据处理及控制核心,并上电机的驱动电路,通过单片机的P2口控制开关的操作,P0口来控制电机的脉顺序,P3口来控制LED数码管的显示,总体框图如图1所示。
图1 步进控制器硬件总体框图主要器件及简介如下:单片机AT89C51本次设计采用伟福仿真器模仿AT89C51环境。
由上面介绍可知,AT89C51为一款典型的80C51单片机,具有8位数据总线、16位地址总线、128字节片内RAM和4K 的片内ROM以及4个并行I/O口等单元。
其连接电路如图2所示。
晶振选择为11.0592MHz,以产生精确的时钟频率。
P0和P2口作为16位地址端口,P0口也作为数据端口,P1口用于LCD及按键的控制,P2.7口控制片外RAM。
图2 A T89C51接线图步进电机该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图3是该四相反应式步进电机工作原理示意图。
图3 四相步进电机步进示意图开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图4.a、b、c所示:a. 单四拍b. 双四拍c八拍图4.步进电机工作时序波形图LED数码管显示LED数码管为7段数码管显示模块,具有共阴极和共阳极两种,如图5所示。
数据由单片机P3口给出。
图5 数码管原理线路接线图图6 线路接线图四、软件设计软件流程图如图7图7 软件流程图源程序清单ORG 0000HLJMP MAINORG 0040HMAIN: MOV @R1,#00HJNB P2.2,ZDCHU ;电机电动JNB P2.5,ZHENGC;电机正转JNB P2.6,EE;电机反转JNB P2.7,STOP;电机停止JMP MAINEE: LJMP FANC;电机电动的子程序ZDCHU:MOV R7,#1MOV P3,#0A1HCALL DELAY1DIAN:MOV P0,#09HCALL DELAY1MOV P0,#03HCALL DELAY1MOV P0,#06HCALL DELAY1MOV P0,#0CHCALL DELAY1DJNZ R7,DIANJNB P2.2,$JMP MAIN;电机停止的子程序STOP:MOV P3,#8CHCALL DELAY1MOV P0,#00HJNB P2.2,ZDCHUJNB P2.5,ZHENGJNB P2.6,FANJMP NEXT1NEXT1:LJMP STOP;电机正转的子程序ZHENGC:MOV P0,#00HZHENG:MOV P0,#09HCALL DELAYMOV P0,#03HCALL DELAYMOV P0,#06HCALL DELAYMOV P0,#0CHCALL DELAYJB F0,TIAO ;F0为加的符号位,当加完一次用符号位来判断开关的状态JNB P2.0,JIATIAO:JB P2.0,QINGLNEXT2:JB CY,JTIAOJNB P2.1,JIANJTIAO:JB P2.1,JQINGLNEXT3:JNB P2.6,FANJNB P2.7,STOPFH: JMP ZHENGQINGL:CLR F0 ;符号位清零JMP NEXT2JQINGL:CLR CY l;CY为正转减速符号位JMP NEXT3;反转子程序FANC:MOV P1,#0FEHFAN :MOV P0,#0CHCALL DELAYMOV P0,#06HCALL DELAYMOV P0,#03HCALL DELAYMOV P0,#09HCALL DELAYJB OV,FTIAO;OV为反正加速符号位JNB P2.3,FJIAFTIAO:JB P2.3,FQINGLFJIAN3:JB AC, FJTIAO;AC为反正减速符号位JNB P2.4,FJIANFJTIAO:JB P2.4,FJQINGLFJIAN2:JNB P2.5,ZHENGJNB P2.7,FFFH1:LJMP FANFF:LJMP STOPFQINGL:CLR OVJMP FJIAN3FJQINGL:CLR ACJMP FJIAN2;正转加速子程序JIA: CJNE @R1,#0AH,JIA1 ;控制10档速度JMP ZHENGJIA1: INC @R1 ;控制延时子程序变量自加1 SETB F0JMP FH;反正加速子程序FJIA: CJNE @R1,#0AH,FJIA1JMP FANFJIA1: INC @R1MOV A,@R1SETB OVJMP FH1;正转减速子程序JIAN: CJNE @R1,#01H,JIAN1JMP ZHENGJIAN1:DEC @R1SETB CYJMP FH;反正减速子程序FJIAN: CJNE @R1,#01H,FJIAN1JMP FANFJIAN1:DEC @R1SETB ACJMP FH1DELAY:MOV R4,AMOV DPTR,#TABMOVC A,@A+DPTRMOV R6,A;通过改变延时来改变电机的转速PUSH AMOV A,R4JNB P2.6,AAMOV DPTR,#TAB1BB: MOVC A,@A+DPTRMOV P3,APOP ACALL DELAY1D1: MOV R7,#50DL: NOPNOPDJNZ R7,DLDJNZ R6,D1MOV A,@R1RETAA: MOV DPTR,#TAB2JMP BBDELAY1:MOV R4,#5D1_2: MOV R5,#249DL2: NOPNOPDJNZ R5,DL2DJNZ R4,D1_2RETDELAY2:MOV R6,#255D1_3: MOV R7,#255DL3: NOPNOPDJNZ R7,DL3DJNZ R6,D1_3RETDELAY3:MOV R4,#255D1_4: MOV R5,#249DL4: NOPNOPDJNZ R5,DL4DJNZ R4,D1_4RETTAB:DB 130,130,120,110,100,90,80,70,60,50,40,30,25TAB1:DB 086H,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80HDB 90H,88H,83H,0C6H,0A1H,86H,8EH,8CH,7FH,0FFHTAB2:DB 08EH,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80HDB 90H,88H,83H,0C6H,0A1H,86H,8EH,8CH,7FH,0FFHEND五、调试过程调试过程中,首先遇到的第一难点就是在加速过程中怎样来使每次开关拨一次档位加1,刚开始的时候如果没有设置的话,电机的档位调速会变的很不均匀,呈现一种乱跳乱加减速的现象,观察程序发现,由于主程序每次循环执行,当调用加速子程序的时候,会每次自动加1,所以为了克服这个困难真的是花了很长的时间,后面经过各种调试,发现可以利用符号位来置位从而是下次循环跳出执行加速的子程序语句,这样可以很均匀的发现每拨一次开关就可以换一个档位,直到10档结束,用CJNE语句可以实现。
碰到的第二个问题便是怎样才能将电机的各种参数可以实时显示出来,刚开始由于对LCD液晶的不熟悉所以选择了用LED数码管来显示,但在使用过程中发现,用查询法的方法来写程序,要使同时6个数码管发亮并且显示不同的数字遇到了困难,几经调试还是不成,便改用LCD液晶,对于液晶的显示还是比较容易,但是当发现将液晶和电机程序加减速合并起来的时候遇到了困难,液晶可以显示加减的档位数,但是电机却没有改变转速,经过了很久的怒路,包括设断点,单步执行,自动跟步的方法还是没能调试出来,自己能力也有限,还是得多加努力,最终由于时间的关系,最后还是选择了相对而言较简单的数码管来显示,并且由于自己能力的原因,还是只能用单个数码管显示。