用89C2051制作轻触式步进调整控制电路
89C2051驱动步进电机的电路和源码

89C2051驱动步进电机的电路和源码时间:2006-10-26 来源: 作者: 点击:1434 字体大小:【大中小】程序stepper.cstepper.hex/** STEPPER.C* sweeping stepper's rotor cw and cww 400 steps* Copyright (c) 1999 by W.Sirichote*/#include c:\mc51\8051io.h /* include i/o header file */#include c:\mc51\8051reg.hregister unsigned char j,flag1,temp;register unsigned int cw_n,ccw_n;unsigned char step[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}#define n 400/* flag1 mask byte0x01 run cw()0x02 run ccw()*/main(){flag1=0;serinit(9600);disable(); /* no need timer interrupt */cw_n = n; /* initial step number for cw */flag1 |=0x01; /* initial enable cw() */while(1){{tick_wait(); /* wait for 10ms elapsed */energize(); /* round-robin execution the following tasks every 10ms */ cw();ccw();}}}cw(){if((flag1&0x01)!=0){cw_n--; /* decrement cw step number */if (cw_n !=0)j++; /* if not zero increment index j */else{flag1&=~0x01; /* disable cw() execution */ccw_n = n; /* reload step number to ccw counter */flag1 |=0x02; /* enable cww() execution */}}}ccw(){if((flag1&0x02)!=0){ccw_n--; /* decremnent ccw step number */if (ccw_n !=0)j--; /* if not zero decrement index j */else{flag1&=~0x02; /* disable ccw() execution */cw_n = n; /* reload step number to cw counter */flag1 |=0x01; /* enable cw() execution */}}}tick_wait(){ /* cputick was replaced by simpler ASM code 10ms wait */asm" JNB TCON.5,*"; /* wait for TF0 set */asm" CLR TCON.5"; /* clear TF0 for further set */asm" ORL TH0,#$DC"; /* reload TH0 with $DC, TL0 = 0 */}energize(){P1 = step[(j&0x07)]; /* only step 0-7 needed */}电路图Tags:步进电机89C2051如何用单片机控制步进电机时间:2006-10-26 来源: 作者: 点击:2106 字体大小:【大中小】步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
89C51单片机对步进电动机的C语言控制程序

89C51单片机对步进电动机的控制程序啊?兄弟做的如何了?我也是不懂啊,真是有点同病相怜了这个程序是课程设计的,现在老师要复杂点的,不让用延时程序了,因为浪费CPU时间,改为定时器扫描防抖,还有显示是用四个数码管,用四个键控制,其中一个起停,一个正反转,两个加减速。
我只能写到这些了,你有何进展,交流一下吧#define uchar unsigned char //定义一下方便使用#define uint unsigned int#define ulong unsigned long#include <reg52.h> //包括一个52标准内核的头文件sbit P10 = P1^0; //头文件中没有定义的IO就要自己来定义了sbit P11 = P1^1;sbit P12 = P1^2;sbit P13 = P1^3;sbit K1 = P3^2;sbit K2 = P3^5;sbit K3 = P3^6;sbit K4 = P3^7;sbit P20=P2^0;sbit P21=P2^1;bit ldelay=0; //长定时溢出标记,预置是0uchar a,m=50;uchar result;uint b,n;uint i,j;char code dx516[3] _at_ 0x003b;//这是为了仿真设置的/*********************************************************************** ***********///电机正转void zheng_z(){ uchar code ledp1[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//预定的写入P1的值正转uchar ledi1; //用来指示正转显示顺序P1=ledp1[ledi1];//读出一个值送到P1口ledi1++;//指向下一个if(ledi1==8)ledi1=0; //到了最后一个灯就换到第一个}//电机反转void fan_z(){ uchar code ledp2[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//预定的写入P1的值反转uchar ledi2; //用来指示反转显示顺序P1=ledp2[ledi2];//读出一个值送到P1口ledi2++; //指向下一个if(ledi2==8)ledi2=0; //到了最后一个灯就换到第一个}//减速void jian_s(){m+=5;if(m>=50)m=50;}//加速void jia_su(){ m-=5;if(m<=10)m=10;}/*******************************************************************/ void delay(uint j){j=100;for(i=0;i<j;i++){;}}void display(uint x){switch(x){case 0: P0=0xC0;break;case 1: P0=0xF9;break;case 2: P0=0xA4;break;case 3: P0=0xB0;break;case 4: P0=0x99;break;case 5: P0=0x92;break;case 6: P0=0x82;break;case 7: P0=0xF8;break;case 8: P0=0x80;break;case 9: P0=0x90;break;}}void sudu(uint c){switch(c){case 50: result=15;break;case 45: result=17;break;case 40: result=19;break;case 35: result=21;break;case 30: result=25;break;case 25: result=30;break;case 20: result=38;break;case 15: result=50;break;case 10: result=75;break;}}/*******************************************************************/ //主程序void main(void){TMOD = 0x01; //设定时器0为16位模式TH0 =0xdb; //赋T0的预置值0xdbTL0 =0xff;TR0=1; //启动定时器ET0=1; //打开定时器0中断EA=1; //打开总中断while(1) //主程扫描各键值{if(ldelay) //发现有时间溢出标记,进入处理{ldelay=0; //清除标记zheng_z();if(!K3)a=1; //如果读到K3为0if(!K4)a=0; //如果读到K4为0if(a==1)zheng_z();elsefan_z();if(!K1) //如果读到K1为0jian_s(); //减速if(!K2) //如果读到K2为0jia_su(); //加速/*********************************************************************** ************/sudu(m);b=result/10;n=result%10;P20=1;P21=0;display(b);delay (2);P20=~P20;P21=~P21;display(n);delay (2);}}}//定时器0中断timer0() interrupt 1{static uchar t;TH0 =0xdb; //赋T0的预置值0xdbTL0 =0xff;//TF0=0;t++;if(t==m){ t=0;ldelay=1;}}//定时器1中断/*timer1() interrupt 3{static uchar t;TF0=0;t++;if(t==20) { t=0; ldelay=1; } }*/。
基于89C2051产生PWM信号来控制直流电机调速程序

基於89C2051產生PWM信號來控制直流電機調速程式T0產生雙路PWM信號,推動L293D或L298N為直流電機調速,程式已通過調試。
接L298N時相應的管腳上最好接上10K的上拉電阻。
/* 晶振採用11.0592M,產生的PWM的頻率約為91Hz */#include<reg51.h>#include<math.h>#define uchar unsigned char#define uint unsigned intsbit en1=P1^0; /* L298的Enable A */sbit en2=P1^1; /* L298的Enable B */sbit s1=P1^2; /* L298的Input 1 */sbit s2=P1^3; /* L298的Input 2 */sbit s3=P1^4; /* L298的Input 3 */sbit s4=P1^5; /* L298的Input 4 */uchar t=0; /* 中斷計數器*/uchar m1=0; /* 電機1速度值*/uchar m2=0; /* 電機2速度值*/uchar tmp1,tmp2; /* 電機當前速度值*//* 電機控制函數index-電機號(1,2); speed-電機速度(-100—100) */ void motor(uchar index, char speed){if(speed>=-100 && speed<=100){if(index==1) /* 電機1的處理*/{m1=abs(speed); /* 取速度的絕對值*/ if(speed<0) /* 速度值為負則反轉*/ {s1=0;s2=1;}else /* 不為負數則正轉*/{s1=1;s2=0;}}if(index==2) /* 電機2的處理*/{m2=abs(speed); /* 電機2的速度控制*/ if(speed<0) /* 電機2的方向控制*/ {s3=0;s4=1;}else{s3=1;s4=0;}}}}void delay(uint j) /* 簡易延時函數*/{for(j;j>0;j--);}void main(){uchar i;TMOD=0x02; /* 設定T0的工作模式為2 */ TH0=0x9B; /* 裝入定時器的初值*/TL0=0x9B;EA=1; /* 開中斷*/ET0=1; /* 定時器0允許中斷*/ TR0=1; /* 啟動定時器0 */while(1) /* 電機實際控制演示*/ {for(i=0;i<=100;i++) /* 正轉加速*/ {motor(1,i);motor(2,i);delay(5000);}for(i=100;i>0;i--) /* 正轉減速*/ {motor(1,i);motor(2,i);delay(5000);}for(i=0;i<=100;i++) /* 反轉加速*/ {motor(1,-i);motor(2,-i);。
基于AT89C51单片机的步进电动机控制系统设计

基于AT89C51单片机的步进电动机控制系统设计步进电动机是一种运动精度高、控制方便的电动机。
在很多应用中,需要使用步进电动机进行精确的位置控制,因此设计一个基于AT89C51单片机的步进电动机控制系统非常有意义。
本文将设计一个基于AT89C51单片机的步进电动机控制系统的原理、硬件电路和软件设计方案,并进行详细的说明。
1.原理步进电动机通过依次在不同的相上加电来实现精确的旋转运动。
控制步进电动机的主要原理是通过改变控制相的顺序和频率来控制电动机的转向和运动速度。
在本设计中,我们将使用四相步进电动机,即控制电动机旋转需要改变四个相的状态。
2.硬件电路设计硬件电路主要包括:电源电路、单片机模块、驱动模块和步进电动机模块。
(1)电源电路:为步进电动机和单片机提供适当的电源电压和电流。
(2)单片机模块:使用AT89C51单片机作为主控制器,通过引脚控制驱动模块的工作状态。
(3)驱动模块:用于驱动步进电动机,可选择使用L298N或ULN2003驱动芯片。
(4)步进电动机模块:包括四相步进电动机和相应的接线。
3.软件设计方案(1)初始化:设置单片机工作模式、引脚方向和初始状态。
(2)编写驱动程序:根据步进电动机的相序进行编写,并通过控制相的芯片来控制电机的转向和运动速度。
(3)编写控制程序:通过按键或外部信号触发,调用相应的驱动程序来实现步进电动机的控制。
(4)编写显示程序:通过液晶显示屏或LED灯等方式显示步进电动机的状态,方便用户了解电动机的运行情况。
4.系统功能和特点本控制系统具有以下功能和特点:(1)精确控制:通过改变相序和频率控制电动机的转向和运动速度,实现步进电动机的精确控制。
(2)高效稳定:采用AT89C51单片机作为主控制器,具有高效、稳定的运行特性。
(3)灵活可扩展:可以根据实际需求添加外部输入或输出模块,实现更多功能的扩展。
(4)易操作性:可以通过按键或外部信号触发,方便用户进行操作和控制。
89c2051构造框图及引脚阐明

89c2051构造框图及引脚阐明AT89C2051是ATMEL公司出产的带2K字节闪速可编程可擦除只读存储器(EEPROM)的8位单片机,它具有如下首要特性:middot;和MCS-51商品的兼容middot;2K字节可重编程闪速存储器middot;耐久性:1,000写/擦除周期middot;2.7V~6V的操作计划middot;全静态操作:0Hz~24MHzmiddot;两级加密程序存储器middot;128;x;8位内部RAMmiddot;15根可编程I/O引线middot;两个16位守时器/计数器middot;六个接连源middot;可编程串行UART通道middot;直接LED驱动输出middot;片内仿照比照器middot;低功耗空载和掉电办法图10.1AT89C2051的构造框图10.1.2AT89C2051的构造框图AT89C2051是一带有2K字节闪速可编程可擦除只读存储体(EEPROM)的低电压,高功用8位CMOS微型核算机。
如图10.2所示。
它选用ATMEL的高密非易失存储技能制作并和工业规范MCS一;51指令集和引脚构造兼容。
经过在单块芯片上组合通用的CPL1和闪速存储器,ATMELAT89C2051是一弱小的微型核算机,它对很多嵌入式操控运用供给一高度活络和本钱低的处理办法。
图10.2AT89C2051内部构造图此外,从AT89C2051内部构造图也可看出,其内部构造与8051内部构造底子一同(除仿照比照器外),引脚RST、XTAL1、XTAL2的特性和外部联接电路也彻底与51系列单片机相应引脚一同,但P1口、P3口有其一同的本地。
10.1.3AT89C2051的引脚阐明AT89C2051是一个有20个引脚的芯片,引脚如图10.1所示,与8051内部构造进行比照可发现,AT89C2051削减了两个对外端口(即P0、P2口),使它最大或许地削减了对外引脚,因而芯片规范有所削减。
基于89C2051单片机控制的可控硅调速电路设计

基于89C2051单片机控制的可控硅调速电路设计本文主要介绍一种基于89C2051单片机控制的可控硅调速电路设计。
一、可控硅调速电路的基本原理可控硅调速电路是利用可控硅在导通状态时的阻值很小的特性,通过控制相位来控制电路中的电流大小,从而实现电机的调速。
其电路结构简单,成本低廉,广泛应用于工业控制中。
二、89C2051单片机的介绍89C2051单片机是一种高性能、低功耗的8位单片机,具有片内Flash存储器、片内RAM、定时/计数器、串行通信口等多种功能。
其特点是:易学易用,具有较高的可编程性和可扩展性。
三、可控硅调速电路设计步骤1.设计原理图可控硅调速电路的原理图分为两部分,分别是控制单元和功率单元。
其中,控制单元采用89C2051单片机,通过调节单片机端口的高低电平,控制可控硅的触发,从而控制电路中的电流大小。
功率单元包括变压器、可控硅和电机,其中变压器将交流电压转换成适合电机工作的交流低压,可控硅则控制交流电压的大小,从而实现电机的调速。
2.电路元件选型电路中各元件的选型需要根据具体的需求进行选择。
变压器需要选择符合电机工作电压和功率的产品;可控硅则需要根据具体的负载电流进行选择;电机也需要根据工作条件和负载要求进行选择。
3.编写程序编写程序需要根据具体的需求进行设计。
首先需要进行可控硅触发角度的计算,确定电路中可控硅的触发时机。
然后通过编写程序,控制单片机端口的高低电平,实现对可控硅的触发控制,从而控制电路中的电流大小,实现电机的调速。
四、可控硅调速电路设计注意事项1.元件选型时需要注意每个元件的参数和相互匹配的要求,以确保电路的稳定性和可靠性。
2.编写程序时需要注意程序的正确性和有效性,以确保控制的准确性和效率。
3.在搭建电路时需要注意电路的安全性和可靠性,以避免电路故障和安全事故的发生。
以上就是基于89C2051单片机控制的可控硅调速电路设计的相关介绍。
通过合理的电路设计和程序编写,可以实现电机的调速,并在工业生产和控制中得到广泛应用。
运用AT89C205l智能检测控制电路设计
运用AT89C205l智能检测控制电路设计 采用AT89C205l单片计算机芯片设计制作了一个用于该开水器的智能检测控制电路,可实时监控水箱水位和各组电热管的工作状态,一旦水箱水位异常或电热管发生故障,均可自动完成保护动作并给出相应的声、光报警信号,提示维修管理人员及时进行检修。
该电路具有结构简单、制作容易、使用方便等优点。
AT89C205l单片机芯片IC1做为本电路的核心,C3和R3构成了简易的上电自动复位电路。
JT、C1、C2与IC1的相关引脚构成了单片机的时钟电路。
IC1的15个I/0口中仅使用了13个,其中,P1.1一P1.6作为控制面板各指示灯的输出控制口,分别通过一只限流电阻,接至一只LED发光二极管的负极上,低电平有效,直接驱动LED显示。
P1.7为负载(电热管)控制口,通过一只限流电阻接至光电耦合器GO1的2脚,其1脚接至+5V,当P1.7为高电位时,GO1和三相固态继电器均截止,各电热管不加电工作。
当P1.7为低电位时,GO1和三相固态继电器导通,各电热管均加电工作。
P1.0为报警信号控制输出口,接至IC2的15脚。
IC2的10-14脚与外圈元件接成了一个可控式音频振荡器,其15脚为控制端(高电平有效1,9脚为输出端,输出信号经IC3组成的音频小功率放大器放大后驱动扬声器发音。
平时单片机的P1,0在软件控制下输出为低电平,则可控式音频振荡器处于停振状态,故扬声器中无声。
当电路需要发出音频报警信号时,通过软件控制,使单片机的P1.0断续输出高电平信号,则可控式音频振荡器就会断续工作,使扬声器发出嘀、嘀、喃的报警声响。
IC2的1-7脚组成了电热管工作状态监控信号电平转换电路。
电热管工作状态传感器采用TAl420型,这是一种立式、穿芯、并可在印刷线路板上直接焊接安装的小型精密交流电流互感器(HGQ1~HGQ3),具有全封闭,机械和耐环境性能好,电压隔离能力强,外形美观,精度高,采样范围宽,应。
基于89C2051的步进电机驱动系统设计
基于89C2051的步进电机驱动系统设计作者:北京信息工程学院高晶敏时间:2007-10-06 来源:电子产品世界摘要:设计了一种基于89C2051单片机的步进电机驱动系统。
该系统优化了电机在不同工作频率下的能量供给,取得了高频力矩提升、低频功耗下降的优良效果。
关键词:电源">可控电源; 步进电机;89C2051引言步进电动机驱动方式主要分为恒压驱动、恒流驱动、细分驱动等,其中恒压驱动是成本最低、最简单的解决方案,但是它的显著缺点是:高频力矩下降较快,无法满足某些应用场合的要求。
另外,目前市场上几乎所有的步进电机驱动器都存在着低频热耗散大的缺点。
在成本压力较大、对功耗和高低频力矩都有较高要求的情况下,如何取舍是一件很难抉择的事情。
本设计通过一个低成本电源">可控电源,针对控制频率的全程范围,相应输出若干段电压,低频低压、高频高压。
同时,在同一频率下采用高低压驱动法,在电机启动时刻提供高电压,力矩保持阶段提供低电压,从而实现了低成本下的高频力矩提升、低频功耗下降的优良效果。
硬件设计系统硬件电路主要由单片机电路、电源">可控电源电路和步进电机驱动电路构成。
单片机采用ATMEL公司的89C2051。
实际应用中,用其P1口低4 位输出控制信号给电源">可控电源电路,使电源">可控电源输出不同梯次的驱动电压,当控制信号为“0000”时输出电压最低,控制信号为“1111”时输出电压最高,P1口高4 位用于输出相序控制信号给四相步进电机驱动电路,单片机根据控制策略决定驱动电压的高低和相序的变化。
电源">可控电源电源">可控电源部分主要由LM2576-ADJ、缓冲器、电阻、二极管组成,电路如图1所示。
图中LM2576-ADJ是一个降压型开关稳压源,其输出电压为:图1 电源">可控电源电路其中VH 为缓冲器输出的高电平电压,VD 为二极管结压降,VREF 为参考电压,Di 为单片机I/O口数字量输出。
基于89C51的步进电机控制系统设计
基于89C51的步进电机控制系统设计步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用。
随着大规模集成电路的发展以及单片机技术的迅速普及,为设计功能强,价格低的步进电机控制驱动器提供了先进的技术和充足的资源。
本文利用51单片机,达到控制步进电机的启动、停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。
一、步进电机原理及控制技术图1是一种四相可变磁阻型的步进电机结构示意图。
这种电机定子上有八个凸齿,每一个齿上有一个线圈。
线圈绕组的连接方式,是对称齿上的两个线圈进行反相连接,如图中所示。
八个齿构成四对,所以称为四相步进电机。
(a)(b)(c)图1 步进电机结构示意图它的工作过程是这样的:当有一相绕组被激励时,磁通从正相齿,经过软铁芯的转子,并以最短的路径流向负相齿,而其他六个凸齿并无磁通。
为使磁通路径最短,在磁场力的作用下,转子被强迫移动,使最近的一对齿与被激励的一相对准。
在图1(a)中A相是被激励,转子上大箭头所指向的那个齿,与正向的A齿对准。
从这个位置再对B相进行激励,如图1中的(b),转子向反时针转过15°。
若是D相被激励,如图1中的(c),则转子为顺时针转过15°。
下一步是C相被激励。
因为C相有两种可能性:A—B—C—D或A—D—C—B。
一种为反时针转动;另一种为顺时针转动。
但每步都使转子转动15°。
步进电机的控制主要包括:换相顺序的控制、步进电机的换向控制、步进电机的速度控制、步进电机的起停控制、步进电机的加减速控制等控制二、控制电路设计思想步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。
即步进电机是将电脉冲信号转换为机械角位移的执行元件。
步进电机的控制可以用硬件,也可以用软件通过单片机实现。
硬件方法是采用脉冲分配器芯片进行通用换相控制;而软件方法是用单片机产生控制脉冲来控制步进电机的运行状态,这种方法可简化电路,降低成本。
用89C2051实现的带有防火 报警和闹钟功能的控制器
用89C2051实现的带有防火报警和闹钟功能的控制器火灾和有毒气体给人类造成的损失是不可估量的,防火和防毒预警装置在人们生活中显得越来越重要。
本文介绍一种用89C2051实现的防火防毒报警和闹钟功能的控制器,它集防火、防毒、走时和闹钟功能为一体,无火灾和毒气情况时可以用作电子闹钟使用,一旦发生火灾或毒气泄露它就能发挥报警器的作用,立即自动拨打主人的手机进行报警。
使用者可通过键盘来设置或更改自动拨打的电话号码。
该装置经济,可靠,它可以适用于机关、学校、企、事业单位及家庭。
一、系统硬件设计图1为系统电路框图,图2、图3为电路原理图。
本控制器以89C2051为核心控制部件。
显示电路由两个双数码管(共阳)5261、LD1、LD2、R7、R1~R6,T1~T4、D3、D4等组成,并按几何空间排列成电子钟形状,完成显示时钟及电话号码功能。
电话拨控制电路由T5、R10、J 、D2、R8、R9、D5~D8等组成,完成拨号驱动控制功能,存贮器(24C02)是在线固化存贮器,可永久保存电话号码(也可改写)。
按键输入电路由K1~K7组成,完成原始数据输入及时钟校准等功能。
烟气传感电路由NE555、HQ-2等组成(如图3),做成外接的探头,用于检测火灾引起的烟雾(或有毒气体)信号。
备用电源电路由一个容量为1F 的大电容C3构成,交流断电后能持续走时2小时以上。
图-1图2二、主要工作原理1、正常时钟状态:系统在软件控制下,由U5显示小时数字,U4显示分钟数字,LD1、LD2发光管每秒闪亮一次指示时钟的走时状态,同时具有闹钟功能。
2、报警器状态:当火灾引起的烟雾或有害气体通过烟雾探头HQ —2时,图3中的A、B两点的电阻变小,使得A点电位下降,因此,引起由NE555组成的单稳触发电路改变状态,由NE555的3脚输出高电平,使蜂鸣器Y2鸣响,同时D1上的1端为低电平,送入主机电路2051的6脚。
使得主机终止时钟状态进入报警状态,使2051的11脚输出高电平,继电器J得电,使得J—1常开触点闭合,接通电话线,然后由2051的3脚控制电话拨号控制电路,向电话线发号,拨打两部手机号码向主人报警,在拨号同时,蜂鸣器y1现场鸣响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用89C2051制作轻触式步进调整控制电路采用普通集成电路制作轻触式步进调整控制电路时,外围电路相对较复杂;本文介绍用单片机AT89C2051来编程制作轻触式步进调整控制电路,则外围电路较简单,微型继电器的驱动电路容易制作,实际运行效果也不错。
适合初学者仿制。
一、电路结构
轻触式步进调整控制电路主要由A T89C2051与微型继电器构成,电路如图二所示。
P3.0和P3.1作输入端口,分别接上拉电阻R1、R2和轻触开关S1、S2,S1做步进调整开关,S2做退步调整开关。
P1.7~P1.0和P3.2~P3.7共13个口作输出端口,每一个端口用一颗发光二极管与PNP型三极管基极相连接,输出信号经过三极管放大后驱动微型继电器工作,发光二极管起到连接输出信号和显示输出信号的作用。
微型继电器的常开或常闭触点与外围电路联接,通过控制微型继电器的触点闭合或断开来达到控制外围电路作步进调整工作。
二、工作原理
接通电源后,A T89C2051内部程序首先将P1.7~P1.0和P3.2~P3.7输出端口置成高电位,使联接在每个输出端口上的微型继电器驱动电路均停止工作,其次将P3.0和P3.1输入端口也置成高电位,使输入端口处于准备接收信号的状态。
然后程序开始单独循环检测P3.0端口是否为低电位,即检测轻触开关S1是否被按下,如果S1是第一次被按下,则P1.7端口由高电位变为低电位,LED1导通,使微型继电器J1触点闭合,LED1对应发光显示该端有信号输出;此后,程序除了循环检测接在P3.0端口的轻触开关S1是否被按下以外,还要增加循环检测接在P3.1端口的轻触开关S2是否被按下;如果S1是连续第二次被按下,则P1.6端口由高电位变为低电位,LED2导通,使微型继电器J2触点闭合,LED2对应发光显示该端有信号输出,同时P1.7端口从低电位变为高电位,LED1熄灭,微型继电器J1触点断开。
依此原理,每按下一次S1时,J1~J13触点顺序步进闭合,LED随步进对应发光显示该端有信号输出,外围电路也随之作步进调整工作;反之,每按下一次S2时,J1~J13触点顺序退步闭合,LED随退步发光显示该端有信号输出,外围电路同样也随之作退步调整工作。
图三是该电路的一个应用实例。
适当剪短程序,用其中五个输出端口可轻触式步进调整控制直流稳压输出电压,控制J1~J5的触点闭合或断开,就能分别为LM317的调整端接入不同阻值的电阻,使LM317输出大小不同的电压。
电阻R*8~R*12的值可以根据需要输出电压大小不同通过实验测得。
在LM317输入为18V时,分别测得电阻值为2K、1.4K、865Ω、704Ω、和327Ω,可对应输出12V、9V、6V、5V和3V五组常用直流稳压电压。
N
四、轻触式步进控制电路的源程序
ORG 0000H
MOV P1,#0FFH
MOV P3,#0FFH
L0:JB P3.0,L0;按键1是否被按下,不是转L0
L1:JNB P3.0,L1;按键1是否被抬起,不是转L1 CLR P1.7;开第1个端口
Q0:JB P3.1,L2;按键2是否被按下,不是转Q0 Q1:JNB P3.1,Q1;按键2是否被抬起,不是转Q1 SETB P1.7;关第1个端口
LJMP L0;转L0
L2:JB P3.0,Q0;按键1是否被按下,不是转Q0 L3:JNB P3.0,L3;按键1是否被抬起,不是转L3 SETB P1.7;关第1个端口
CLR P1.6;开第2个端口
Q2:JB P3.1,L4
Q3:JNB P3.1,Q3
SETB P1.6
CLR P1.7
LJMP L2
L4:JB P3.0,Q2;
L5:JNB P3.0,L5
SETB P1.6;关第2个端口
CLR P1.5;开第3个端口
Q4:JB P3.1,L6
Q5:JNB P3.1,Q5
SETB P1.5
CLR P1.6
LJMP L4
L6:JB P3.0,Q4
L7:JNB P3.0,L7
SETB P1.5;关第3个端口
CLR P1.4;开第4个端口
Q6:JB P3.1,L8
Q7:JNB P3.1,Q7
SETB P1.4
CLR P1.5
LJMP L6
L8:JB P3.0,Q6
L9:JNB P3.0,L9
SETB P1.4;关第4个端口
CLR P1.3;开第5个端口
Q8:JB P3.1,L10
Q9:JNB P3.1,Q9
SETB P1.3
CLR P1.4
LJMP L8
L10:JB P3.0,Q8
L11:JNB P3.0,L11
SETB P1.3;关第5个端口
CLR P1.2;开第6个端口Q10:JB P3.1,L12
Q11:JNB P3.1,Q11
SETB P1.2
CLR P1.3
LJMP L10
L12:JB P3.0,Q10
L13:JNB P3.0,L13
SETB P1.2;关第6个端口
CLR P1.1;开第7个端口Q12:JB P3.1,L14
Q13:JNB P3.1,Q13
SETB P1.1
CLR P1.2
LJMP L12
L14:JB P3.0,Q12
L15:JNB P3.0,L15
SETB P1.1;关第7个端口
CLR P1.0;开第8个端口Q14:JB P3.1,L16
Q15:JNB P3.1,Q15
SETB P1.0
CLR P1.1
LJMP L14
L16:JB P3.0,Q14
L17:JNB P3.0,L17
SETB P1.0;关第8个端口
CLR P3.2;开第9个端口Q16:JB P3.1,L18
Q17:JNB P3.1,Q17
SETB P3.2
CLR P1.0
LJMP L16
L18:JB P3.0,Q16
L19:JNB P3.0,L19
SETB P3.2;关第9个端口
CLR P3.3;开第10个端口Q18:JB P3.1,L20
Q19:JNB P3.1,Q19
SETB P3.3
CLR P3.2
LJMP L18
L20:JB P3.0,Q18
L21:JNB P3.0,L21
SETB P3.3;关第10个端口
CLR P3.4;开第11个端口Q20:JB P3.1,L22
Q21:JNB P3.1,Q21
SETB P3.4
CLR P3.3
LJMP L20
L22:JB P3.0,Q20
L23:JNB P3.0,L23
SETB P3.4;关第11个端口
CLR P3.5;开第12个端口Q22:JB P3.1,L24
Q23:JNB P3.1,Q23
SETB P3.5
CLR P3.4
LJMP L22
L24:JB P3.0,Q22
L25:JNB P3.0,L25
SETB P3.5;关第12个端口
CLR P3.7;开第13个端口Q24:JB P3.1,L26
Q25:JNB P3.1,Q25
SETB P3.7
CLR P3.5
LJMP L24
L26:JB P3.0,Q24
L27:JNB P3.0,L27
SETB P3.7;关第13个端口LJMP L0;转L0
END。