找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

大家好!帮我找一下程序的原因吧?

[复制链接]
admin 发表于 2012-9-2 14:10:35 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
大家帮我看看程序吧。控制两个舵机程序不稳定
控制两个舵机程序!大家帮我看看。程序不稳定控制两个舵机程序!大家帮我看看。程序不稳定。按第一个舵机按键,只能旋转到90度不能旋转到180度,再按的话就控制第二个舵机了。
再帮我一下吧
我的目的是:两个按键控制第一个舵机左右旋转180度
两个按键控制第二个舵机左右旋转180度
互不干扰

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
/*
变量定义
*/
uchar key_stime_counter,hight_votage=15,hight_votage1=15,timeT_counter;
bit key_stime_ok;
/*
引脚定义
*/
sbit control_signal=P2^2;
sbit control_signal1=P2^3;
sbit turn_left=P1^0;
sbit turn_right=P1^1;
sbit turn_up=P1^2;
sbit turn_down=P1^3;
/*****************************************************************
名称:定时器0初始化
功能:20ms定时,11.0592M晶振
初值=65536-11059200*0.02/12=65536-18432=47104=0xB800 20ms
初值=65536-11059200*0.0001/12=65536-92.16=64430=0xFFA3 0.1ms
*****************************************************************/
void TimerInit()
{
control_signal=0;
control_signal1=1;
TMOD=0x01; //设置定时器0为工作方式1
EA=1; //开总中断
ET0=1; //定时器0中断允许
TH0 = 0xFF; //定时器装初值
TL0 = 0xA3;
TR0=1; //启动定时器0
}
/**********************************************
定时器0中断服务函数
***********************************************/
void timer0(void) interrupt 1 using 0
{
TH0=0xFF;
TL0=0xA3; //定时器0重新装入数值
if (++key_stime_counter>=200)
{
key_stime_counter=0;
control_signal=1;
control_signal1=1;
key_stime_ok = 1; // 20ms到
timeT_counter=0;
}
if (key_stime_ok&&(++timeT_counter>=hight_votage))
{
key_stime_ok=0;
timeT_counter=0;
control_signal=0; // hight_votage*0.1ms到

}
if (key_stime_ok&&(++timeT_counter>=hight_votage1))
{
key_stime_ok=0;
timeT_counter=0;
control_signal1=0; // hight_votage1*0.1ms到
}
}
/*********************************************
名称:键盘扫描
功能:在按键稳定期内判断键值,并返回键值
**********************************************/
uchar keyscan(void)
{
static char key_state = 0;
static char key_value = 0;
uchar key_press, key_return = 0;
key_press=turn_up&turn_down&turn_left&turn_right; //读按键I/O电平

switch (key_state)
{
case 0 : // 按键初始态
if (key_press==0) key_state = 1; // 键被按下,但需要确认是否是干扰
break;
case 1 : // 按键确认态
if (key_press==0)//如有键按下则不是干扰,判断键值
{
if(turn_left==0) //判断是哪一个按键被按下
key_value=1; //按键较多时可采用switch选择结构
else if(turn_right==0)
key_value=2;
else if(turn_up==0)
key_value=3;
else if(turn_down==0)
key_value=4;
else
key_value=0;

key_state = 2; // 状态转换到键释放态
}
else
key_state = 0; // 按键已抬起,属于干扰,转换到按键初始态
break;
case 2 :
if (key_press==1)
{
key_return=key_value;//按键释放后再输出键值,如果按下键就输出则可省略key_value
key_value=0;
key_state = 0; //如果按键释放,转换到按键初始态
}
break;
}
return key_return; //返回键值
}
/*********************************************
名称:按键处理
功能:
**********************************************/
void key_operation(void)
{
switch (keyscan()) //根据键值不同,执行不同的内容
{
case 1:
hight_votage-=1;
if(hight_votage<5)
hight_votage=5;
break;
case 2:
hight_votage+=1;
if(hight_votage>25)
hight_votage=25;
break;
case 3:
hight_votage1-=1;
if(hight_votage1<5)
hight_votage1=5;
break;
case 4:
hight_votage1+=1;
if(hight_votage1>25)
hight_votage1=25;
break;
default :
break;
}
}
//LED显示函数
void diplay()
{
if(control_signal==0)
{
if(hight_votage>=5&&hight_votage<=7) P0=0xFD; //1灯亮,舵机接近或到达右转极限位置
if(hight_votage>7&&hight_votage<=10) P0=0xFB; //2灯亮
if(hight_votage>10&&hight_votage<=13) P0=0xF7; //3灯亮
if(hight_votage>13&&hight_votage<=16) P0=0xEF; //4灯亮,舵机到达中间位置
if(hight_votage>16&&hight_votage<=19) P0=0xDF; //5灯亮
if(hight_votage>19&&hight_votage<=22) P0=0xBF; //6灯亮
if(hight_votage>22&&hight_votage<=25) P0=0x7F; //7灯亮,舵机接近或到达左转极限位置
}
if(control_signal1==0)
{
if(hight_votage1>=5&&hight_votage1<=7) P0=0xFD; //1灯亮,舵机接近或到达右转极限位置
if(hight_votage1>7&&hight_votage1<=10) P0=0xFB; //2灯亮
if(hight_votage1>10&&hight_votage1<=13) P0=0xF7; //3灯亮
if(hight_votage1>13&&hight_votage1<=16) P0=0xEF; //4灯亮,舵机到达中间位置
if(hight_votage1>16&&hight_votage1<=19) P0=0xDF; //5灯亮
if(hight_votage1>19&&hight_votage1<=22) P0=0xBF; //6灯亮
if(hight_votage1>22&&hight_votage1<=25) P0=0x7F; //7灯亮,舵机接近或到达左转极限位置
}
}
/*主程序*/
void main(void)
{
TimerInit();
while(1)
{
key_operation();
diplay();
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 02:34 , Processed in 0.061812 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表