标题:
单片机模仿舵机测试仪 按键控制 源程序
[打印本页]
作者:
davidxu
时间:
2021-8-19 22:49
标题:
单片机模仿舵机测试仪 按键控制 源程序
我想模仿舵机测试仪,但是把旋钮改成按键,用按键控制档位, 空档-1档-2档-3档-空档 循环
现在遇到两个问题,请教高手:
1。按键反应不是很灵敏,有时要按好几次才有用
2。 从空档 - 1档 -2档 -3档 切换正常,但从3档切换到空档时切换不到了,会跳到1档,不知道是什么问题
单片机代码如下:
#include <REG51.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit motor=P3^2; //接舵机
sbit key=P3^4; //用按键控制档位, 空档-1档-2档-3档-空档 循环
sbit led=P3^3; //led闪动几次表明当前档位
uint a; //转动角度
uchar num=1;
uchar dangwei=0; //挡位
int i;
sfr AUXR=0x8E;
void delay(unsigned char z)
{
unsigned char x,y;
for(x=125;x>0;x--)
for(y=z;y>0;y--);
}
//延时1毫秒
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
//延时n毫秒函数
void DelayMs(unsigned int n)
{
do
{
Delay1ms();
}while(n--);
}
void delayms1(void) //延时函数
{
unsigned int i;
i = 1000;
while(i--);
}
//闪灯函数 根据n确定闪烁间隔毫秒
void Flash(unsigned int n)
{
led=1;
DelayMs(n);
led=0;
DelayMs(n);
}
void T0_time() interrupt 1
{
switch(num)
{
case 0:
TH0=(58300-a*120)/256;
TL0=(58300-a*120)%256;
motor=1;
num=1;
break;
case 1:
TH0=(15800+a*121)/256;
TL0=(15800+a*121)%256;
motor=0;
num=2;
break;
case 2:
TH0=0x27;
TL0=0xc4;
motor=0;
num=3;
break;
case 3:
TH0=0x27;
TL0=0xc4;
motor=0;
num=4;
break;
case 4:
TH0=0x27;
TL0=0xc4;
motor=0;
num=0;
break;
}
}
void T0_init()
{
AUXR=0X80;
TMOD|=0x01;
TH0=0x27;
TL0=0xc4;
EA=1;
ET0=1;
TR0=1;
}
void main(void)
{
T0_init();
key=1;
dangwei=0; //默认档位0,空档
a=25; //舵机初始位置
while(1)
{
//a=150; //最高转角,对比舵机测试仪得到
//a=25; //最低转角,对比舵机测试仪得到
if (key==0)
{
DelayMs(3); //按下延时,消抖
if (key==0) {
led = 1;
dangwei = dangwei + 1; //按键增加档位
}
}
if (dangwei > 3) //当前档位是最高档时,转空档
{
led = 1;
dangwei = 0; //空档
a = 25;
}
if (dangwei == 0) { //空档
a=25; led = 1;
} else if (dangwei ==1) { //低速
a = 70; Flash(200); led=1; DelayMs(1000);
} else if (dangwei == 2) { //中速
a =110; Flash(200);Flash(200); led=1; DelayMs(1000);
} else if (dangwei == 3) { //全速
a=150; Flash(200);Flash(200);Flash(200); led=1; DelayMs(1000);
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1