标题:
直流电机为什么不能测速 求大神 解决
[打印本页]
作者:
landsen
时间:
2018-6-11 10:26
标题:
直流电机为什么不能测速 求大神 解决
#include<reg51.h>
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
sbit motor1=P1^1;
unsigned int speed;
unsigned int value;
unsigned int T;
unsigned char code ZF[]=" Speed= "; //8个字符
void INIT();
void INIT0();
void INIT1();
void Timer();
void Timer0();
void delay(unsigned t);
void init_lcd(void);
void writecom(unsigned char com);
void writedate(unsigned char date);
void motor(int speed);
main()
{
int i;
T=0;
speed=0;
INIT();
Timer();
init_lcd();
for(i=0;i<8;i++)
{
writedate(ZF[i]);
}
while(1)
{
if(k1==0)
{
delay(10);
if(k1==0)
{ int a;
motor1=0;
while((a<50)&&k1==0)
{
delay(10);
a++;
}
a=0;
}
motor(speed);
writecom(0x88);
writedate('1');
}
else
{
if(k2==0)
{
delay(10);
if(k2==0)
{ int b;
motor1=1;
while((b<50)&&k2==0)
{
delay(10);
b++;
}
b=0;
}
}
motor(speed);
writecom(0x88);
writedate('4');
}
}
}
void INIT() //k2,k3外部中断初始化
{
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=0;
}
void INIT0()interrupt 0 //外部中断0服务函数
{
delay(10);
if(k3==0)
{
speed++;
}
}
void INIT1()interrupt 2//外部中断1服务函数
{
delay(10);
if(k4==0)
{
if(speed>0)
{
speed--;
}
else
speed=0;
}
}
void Timer() //定时器初始化
{
TMOD=0x01;
TH0=0xfc; //初值fc18---1ms
TL0=0x18;
EA=1;
ET0=1;
TR0=1;
}
void Timer0()interrupt 1 //定时器服务函数
{
TH0=0xfc;
TL0=0x18;
T++;
}
void delay(unsigned t) //延时函数精确到ms
{
if(T=t)
{
while(--t);
}
T=0;
}
作者:
lzts88
时间:
2018-6-11 11:41
没原理图, 程序也没点注释, 看不懂呀.
作者:
zhanghyg
时间:
2018-6-11 12:39
可以测速,不过要加个传感器
作者:
zsyzdx
时间:
2018-6-11 13:01
有霍尔或者红外对管吗,都是可以检测速度的传感器!!!!!!!!!!
作者:
yrbneumann5288
时间:
2018-6-11 13:47
确实可以的
作者:
刀刀见红
时间:
2019-1-31 19:01
能测啊,要不别人那些转速值是哪儿来的?不仅能测,还能调
作者:
学就学,玩就玩
时间:
2019-11-30 15:58
刀刀见红 发表于 2019-1-31 19:01
能测啊,要不别人那些转速值是哪儿来的?不仅能测,还能调
代码y有一丢丢问题,能帮忙改下吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1