⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wlm_n.c

📁 一个有关单片机的小程序
💻 C
字号:
//////////相关内容可查阅计算机硬件技术基础、课件、自动控制理论与单片机等书籍/////////////////

///////////////////////////////////程序基础//////////////////////////////////////////////////
#pragma small
#include<reg51f.h> ////包括51系列单片机的基本定义
#include<intrins.h>////
#include<math.h>
#include<absacc.h> ////扩展板必备
typedef unsigned char uchar;
typedef unsigned int uint;

///////////////////电路设定////////////////////////
#define BASE1 0x8100////扩展片选信号CS1(触动开关扩展)
#define BASE2 0x8200////扩展片选信号CS2(双头检测板1)
#define BASE3 0x8300////扩展片选信号CS3 (双头检测板2)
#define BASE5 0x8500////发光二极管阵列
#define BASE6 0x8600////CS_P0IN0
#define BASE7 0x8700////CS_P0OUT0
#define BASE8 0x8800////CS_P0IN1
#define BASE9 0x8900////CS_P0OUT1

sbit dir1=P1^3; ////鉴向信号,实质为反馈标志
sbit dir2=P1^4;
sbit en=P1^0;   ////电桥使能信号
sbit ddir1=P1^1;////左轮方向标志。
sbit ddir2=P1^2;////右轮方向标志。

//////////////////////基本参数//////////////////////////////
#define PI       3.1415926
#define D        0.122     ////轮子直径
#define DISTANCE 0.43      ////L轮子间距
#define PANE     1000      ////码盘线数
#define PRESPEED 9000      ////原始最高速度(单位:转/分)
#define RESPEED  300       ////减速最高速度(单位:转/分)
#define RATE     30        ////减速比(原始最高速度/减速最高速度)
#define CONST    0.3       ////( 减速最高速度与码盘线数之比(300(转/分)/1000=0.3),可任意)
#define RIGHT    1
#define LEFT     0
#define LINE     156546    ////走1米两个轮子的码盘线数(计算公式:2*(1/(PI*D))*RATE*PANE)
#define TURN     590       ////转1度两个轮子的码盘线数(计算公式:((DISTANCE/D)*RATE*PANE)/180)

/////////////////////////控制用变量//////////////////////////////
struct discount
{
	int uk1;   ////上次输出值
	int videal;////理想速度(单位:转/分)
	int ek;    ////本次误差
	int ek1;   ////上次误差
	int ek2;   ////前次误差
};

/////////////////////////////////////////////////////////////////////////////////////////
data int ukx,uky;              ////实际输出计数值
data struct discount sm2,sm1;  ////左右轮结构体变量
data uchar countl,counth;      ////计数值高低位
data long temp;                ////每次中断时码盘线数(最大值为1500:((PRESPEED/60)*中断周期)/1000)*PANE)
data long temp1=0,temp2=0;     ////左右轮总的码盘线数
data long due;                 ////经PID调节后的偏差 
data int uk;                   ////本次输出值
data int kp1,ki1,kd1;          ////PID参数
data int kp2,ki2,kd2;
data uchar prestate=0x14,state;////巡线状态
data int dv;                   ////速度调节量
data int flag=0;               ////巡线开关
data uchar keystate=0x3f;      ////碰撞开关状态

//////////////////////结构体初始化//////////////////////////
void initstruct(struct discount *p)
{
	p->ek2=0;
	p->ek1=0;
	p->ek=0;
	p->uk1=0;
}	

///////////////////////延时////////////////////////
void delay(uchar i)              ////以0.1秒为基本单位
{
	uchar j,m;
    int l;
	for(j=0;j<i;j++)
	{
		for(l=0;l<100;l++)
		{
			for(m=0;m<250;m++)
			{}
		}
	}
}

///////////////////////电机1速度输出////////////////////
void motor1(int speed1)////PCA模块2
{
	if(speed1>=0)      ////正转
		ddir1=0;
	else
	{
		ddir1=1;       ////反转
		speed1=-speed1;
	}
	CCAP2L=speed1;     ////转速,范围(-128,127)
	CCAP2H=speed1;
	CCAPM2=0x42;       ////8位PWM
}

///////////////////////电机2速度输出////////////////////
void motor2(int speed2)////PCA模块3
{
    if(speed2>=0)
		ddir2=1;       ////正转
	else
	{
		ddir2=0;       ////反转
		speed2=-speed2;
	}
	CCAP3L=speed2;     ////转速,范围(-128,127

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -