思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看你接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;
PS:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned char k=0 //k表示正反转次数
sbit X0=P3^2//调节按钮
sbit X1=P1^1//上限位接近开关信号
sbit X2=P1^2//下限位接近开关信号
sbit Y1=P0^0//电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit Y2=P0^1//电机下降
void delay50ms(unsigned int i)
{
unsigned int j
for (ii>0i--)
for(j=46078j>0j--)
}
main()
{
IT0=1 //下降沿触发
EX0=1 //开P3.2外部中断
EA=1 //总中断开
while(1)
while(k)
{
Y1=0 //正转
while(X1==1) //等待正转接近开关反应
Y1=1 //正转停
delay50ms(1)//停止时间50ms
Y2=0//反转
while(X2==1)//等待反转接近开关反应
Y2=1 //反转停
k--//圈数减一
}
}
void counter0(void) interrupt 0
{
k++//外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
楼主您好。
L298一般配合单片机使用。
简单的说,L298有四个输出,O1,O2,O3,O4.一般可以接两个电机,可以分别控制正反转和PWM调速。它有四个输入,IN1~4,可以分别控制相当的四个输出电平的高低。ENA,ENB当它们为高电平的时候,正常输出,否则不输出电压。这两个引脚一般用PWM调速用。如果不需要,可以接入高电平。
如图为一简单应用。
附一段89c52的PWM调速程序:
#include <reg52.h>
unsigned char key
sbit LED0=P1^4
sbit LED1=P1^5
sbit LED2=P1^6
sbit LED3=P1^7
sbit ENA=P2^4
void delay(unsigned int loop)
{
while(loop--)
}
void chSpeed() interrupt 0
{
EX0=0
delay(500)//delay 2.5ms.
key++
if(key==0)
P1=0x10
else if(key==1)
P1=0x20
else if(key==2)
P1=0x40
else if(key==3)
P1=0x80
else if(key>3)
{
key=0
P1=0x10
}
EX0=1
}
void timer0() interrupt 1
{
TH0=(65535-1000)/256
TL0=(65535-1000)%256
if(key==0)
{
ENA=1
}
else if(key==1)
{
TH1=(65535-750)/256
TL1=(65535-750)%256
}
else if(key==2)
{
TH1=(65535-500)/256
TL1=(65535-500)%256
}
else if(key==3)
{
TH1=(65535-250)/256
TL1=(65535-250)%256
}
TR1=1
ENA=1
}
void timer1() interrupt 3
{
ENA=0
TR1=0
}
void main()
{
void delay(unsigned int)
ET0=1
ET1=1
TMOD=0x11
TH0=(65535-1000)/256
TL0=(65535-1000)%256
TH1=(65535-750)/256
TL1=(65535-750)%256
TR0=1
EX0=1
IT0=1
TR1=1
EX1=1
IT1=1
EA=1
P0=0xFF
P1=0x10
P2=0XFF
P3=0XFF
while(1)
{
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)