资源简介
跷跷板程序,学习PId算法的经典例子,希望对大家有帮助;
代码片段和文件信息
#include
sbit p1_0=P1^0;//电机旋转控制
sbit p1_1=P1^1;//电机旋转控制
sbit p1_2=P1^2;//电机使能控制
sbit p1_3=P1^3;//电机旋转控制
sbit p1_4=P1^4;//电机旋转控制
sbit p1_5=P1^5;//电机使能控制
sbit E_CLK=P1^6;//LCD显示。时钟输入
sbit RW_SID=P1^7;//LCD显示。数据输入
sbit p2_0=P2^0;//前进循迹方向信号
sbit p2_1=P2^1;//前进循迹方向信号
sbit p2_2=P2^2;//前进循迹方向信号
sbit p2_3=P2^3;//跷跷板平衡信号
sbit p2_4=P2^4;//跷跷板平衡信号
sbit p2_5=P2^5;//跷跷板平衡信号
sbit p2_6=P2^6;//后退循迹方向信号
sbit p2_7=P2^7;//避障传感器信号
sbit p3_2=P3^2;//温度传感器信号
sbit p3_4=P3^4;//蜂鸣器信号控制
sbit p3_6=P3^6;//状态切换键信号
sbit p3_7=P3^7;//暂停/开始键信号
/****************************************显示用变量*************************************************************/
char sec1=48/*显示,秒十分位*/sec2=48/*显示,秒个位*/sec3=48/*显示,秒十位*/sec4=48/*显示,秒百位*/;
char sd1=48/*显示,速度十分位*/sd2=48/*显示,速度个位*/sd3=48/*显示,速度十位*/sd4=48/*显示,速度百位*/;
char lc1=48/*显示,路程百分位*/lc2=48/*显示,路程十分位*/lc3=48/*显示,路程个位*/lc4=48/*显示,路程十位*/;
int xszt1=0xD1/*显示,状态*/xszt2=0xAD/*显示,状态*/xszt3=0xBC/*显示,状态*/xszt4=0xA3/*显示,状态*/;
/****************************************跷跷板平衡用变量*******************************************************/
long qj=10/*前进参数*/ht=1/*后退参数*/tz=0/*平衡状态参数*/bf=600/*步进*/;
int cs=0/*跷跷板翻的次数*/fdd=6/*防抖动系数*/fx=0/*前一次运动方向,标志*/ph=0/*平衡的持久度*/;
int fy=0/*反应时间*/cf=1/*冲锋标志*/bc=0/*是否补偿标志*/phzt=0/*平衡状态*/dd=0/*等待时间*/;
/****************************************通用变量****************************************************************/
int a/**/b/**/l/**/r/**/i/**/jm=0/**/k/**/zt=1/*循迹、避障、平衡状态标志*/;
int setnumber=8/*PWM占空比调整*/n/*一秒种转了几圈*/t/*计时用,每0.1秒判断标志,及时间传递显示的过度量*/;
int tk/*时间计数*/vt/*速度传递显示的过渡量*/st/*路程传递显示的过渡量*/yx/*小车运行标志*/TC=1/*停车标志*/;
float s/*路程计算量*/c=0.9742647/*轮子1/4圈的长度(cm)*/;
double v/*速度计算量*/;
#define uchar unsigned char
#include
#include
#include
#include
#include
#include
#include
timer0() interrupt 1 using 1
{ TH0=0xFc;
TL0=0x18;
r++;
t++;
if(TC==1)
{ if(b==1)
{
if(m { p1_2=0;
p1_5=0;
}
else
{ p1_2=1;
p1_5=1;
}
if (m>=10)
m=0;
m++;
}
else if(b==0)
{ if(l { p1_2=0;
p1_5=0;
}
else
{ p1_2=1;
}
if (l>setnumber+2)
p1_5=1;
if (l>10)
l=0;
l++;
}
}
if(t==100)
{ if(phzt!=1&&phzt!=3||zt!=3)
tk++;
else //若在状态3(跷跷板平衡状态)的平衡停表情况
dd++; //
if(dd==50) //
{ if(phzt==1) //
phzt=2; //
if(phzt==3) //
phzt=4; //打破平衡准备下跷跷板
tk=0; //重新计时
dd=0;
}
if (tk>=10000) //每
tk=0; //0.1
t=tk; //秒
sec4=(t/1000)+0
- 上一篇:订票系统的测试用例
- 下一篇:毕业设计在线购物系统中期检查表
相关资源
- 模糊控制算法 C程序
- linux c程序获取cpu使用率及内存使用情
- 模拟I2C程序 slave 接收
- NC源码和程序附上目前最详细的使用手
- linux下802.11协议csma/ca 的C程序实现
- 单片机24秒倒计时C程序
- STM32-I2C程序例程
- 立式车床PLC程序程序
- 基于51单片机的八路抢答器C程序
- 基于Linux在ARM开发板上电子相框的c程
- 三菱PLC FX-5U 项目程序
- 用STC12C5A60S2写的超声波C程序
- 基于何泰单片机开发的智能加湿器C程
- AD5422芯片的C程序应用
- 基于PLC的花式喷泉系统设计,花式喷
- 无线充电发射端和接收端C程序
- SHT75 温湿度C程序
- STC单片机触摸C程序
- 购物卡管理系统设计报告+源代码
- PIc程序+HEX文件共16个
- 基于MSP430F149控制LCD12864串口显示C程序
- 脱销系统氨区PLC程序
- 脱销系统SCR区PLC程序
- 布袋除尘器S7-300 PLC程序模板
- 基于51单片机的电器定时开关C程序
- avr IAR 控制步进电机正反快慢转
- 自动灌装机PLC程序
- 单片机课程设计,数字电压表,主要
- 4X4X4灯立方C程序
- 51单片机电子琴设计C程序
评论
共有 条评论