标题:
单片机智能小车程序
[打印本页]
作者:
哦哦可
时间:
2019-1-12 00:46
标题:
单片机智能小车程序
#include<stc12c5a.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit S1=P2^4;
sbit S2=P2^5;
sbit S3=P2^6;
sbit S4=P2^7;
//电机pwm输入接口为P1^3和P1^4 可通过控制2和5控制电机停转
//sbit P13=P1^3;
//sbit P14=P1^4;
//sbit IN1=P1^2;
//sbit IN2=P1^5;
sbit pwm=P3^5;
#define k10 0xe5
#define k20 0xcc
#define k30 0xb3
#define k35 0xa6
#define k40 0x99
#define k45 0x8c
#define k50 0x80
#define k55 0x73
#define k60 0x66
#define k65 0x59
#define k70 0x4d
#define k75 0x40
#define k80 0x33
#define k85 0x26
#define k90 0x1a
#define k95 0x0d
#define k00 0x00 //控制电机转速的几个中断pwm波的占空比
//控制电机转速的几个中断pwm波的占空比
#define mh00 0xf8 //中间角度初值 //打直第一次出现吧
#define ml00 0xee // 1810*1.09=1.9729 10
#define zh01 0xf8 //高位
#define zl20 0x26 //低位 //2010*1.09=2.1708 9
#define zl19 0x30 //低位 //2000*1.09=2.18 9
#define zl18 0x3a //低位 //1990*1.09=2.1691 9
#define zl17 0x44 //低位 //1980*1.09=2.1582 9
#define zl16 0x4e //低位 //1970*1.09=2.1473 9
#define zl15 0x58 //低位 //1960*1.09=2.1364 9
#define zl14 0x62 //低位 //1950*1.09=2.1255 9
#define zl13 0x6c //低位 //1940*1.09=2.1146 9
#define zl12 0x76 //低位 // 1930*1.09=2.1037 9
#define zl11 0x80 //低位 // 1920*1.09=2.0928 10
#define zl10 0x8a //低位 // 1910*1.09=2.0819 10
#define zl09 0x94 //低位 // 1900*1.09=2.071 10
#define zl08 0x9e //低位 // 1890*1.09=2.0601 10
#define zl07 0xa8 //低位 // 1880*1.09=2.0492 10
#define zl06 0xb2 //低位 // 1870*1.09=2.0383 10
#define zl05 0xbc //低位 // 1860*1.09=2.0274 10
#define zl04 0xc6 //低位 // 1850*1.09=2.0165 10
#define zl03 0xd0 //低位 //1840*1.09=2.0056 10
#define zl02 0xda //低位 // 1820*1.09=1.9838 10 //左转角度
#define yh00 0xf8 //高位
#define yl01 0xf8 //低位 // 1800*1.09=1.962 10
#define yh01 0xf9 //高位
#define yl02 0x02 //低位 // 1790*1.09=1.9511 10
#define yl03 0x0c //低位 // 1780*1.09=1.9402 10
#define yl04 0x16 //低位 // 1770*1.09=1.9293 10
#define yl05 0x20 //低位 // 1760*1.09=1.9184 10
#define yl06 0x2a //低位 // 1750*1.09=1.9075 10
#define yl07 0x34 //低位 // 1740*1.09= 1.8966 10
#define yl08 0x3e //低位 // 1730*1.09=1.8857 10
#define yl09 0x48 //低位 // 1720*1.09= 1.8748 10
#define yl10 0x52 //低位 // 1710*1.09=1.8639 10
#define yl11 0x5c //低位 // 1700*1.09=1.853 10
#define yl12 0x66 //低位 // 1690*1.09=1.8421 10
#define yl13 0x70 //低位 //1680*1.09=1.8321 10
#define yl14 0x7a //低位 // 1670*1.09=1.8203 11
#define yl15 0x84 //低位 // 1660*1.09=1.8094 11
#define yl16 0x8e //低位 // 1650*1.09=1.7985 11
#define yl17 0x98 //低位 // 1640*1.09=1.7876 11
#define yl18 0xa2 //低位 // 1630*1.09=1.7767 11
#define yl19 0xac //低位 // 1620*1.09=1.7658 11
#define yl20 0xb6 //低位 // 1610*1.09=1.7549 11
#define yl21 0xc0 //低位 // 1600*1.09= 1.7440 11 //右转角度
uchar h, l;
uchar count2=14, count=0;
uchar loadz,loady, dz,dy,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9;
void pwm_init();
void Time_Init();
void motor();
void delay(uint z);
//*********主函数*****************/
void main ()
{
d2=k45;d3=k50;d5=k60;d7=k70;
P14=0;
delay(10000);
delay(10000);
delay(10000);
Time_Init();
pwm_init() ;
//延时发车
P0=0xff;
P2=0xfa;
h=0xfa;
l=0xe7;
dz=dy=d7; // dz<dy 左转
while(1) //dy大表示右边轮子转的快
{ //左边轮子接P0^3 //右边轮子接P0^4
if(P0==0x80) {h=0xfa;l=0x1F; count2=13;dz=d2;dy=d5; }
//if(P0==0xc0) {h=0xfa;l=0x4d;count2=13;dy=d5;dz=d8;}
if(P0==0x40) {h=0xfa;l=0x7D;count2=13;dy=d3;dz=d5;}
//if(P0==0x60) {h=0xfa;l=0x7f;count2=13;dy=d5;dz=d7;}
if(P0==0x20) {h=0xfa;l=0xBD;count2=14;dy=d3;dz=d5;}
//if(P0==0x30) {h=0xfa;l=0xb1a;count2=14;dy=d6;dz=d7;}
if(P0==0x10) {h=0xfa;l=0xD2;count2=14;dy=d7;dz=d7;}
// if(P0==0x00||0xff) {h=0xfa;l=0xfc;count2=14;dz=d8;dy=d8;} //4度 l改变19
if(P0==0x08) {h=0xfA;l=0xFC;count2=15;dy=d7;dz=d7;}
//if(P0==0x0c) {h=0xfb;l=0x47;count2=15;dy=d7;dz=d6;} //15
if(P0==0x04) {h=0xfb;l=0x11;count2=15;dy=d5;dz=d3;}
//if(P0==0x06) {h=0xfb;l=0x79;count2=15;dy=d7;dz=d5;} //50 左转
if(P0==0x02) {h=0xfb;l=0x51;count2=16;dy=d5;dz=d3;}
//if(P0==0x03) {h=0xfb;l=0xab;count2=16;dy=d8;dz=d5;} /39
if(P0==0x01) {h=0xfb;l=0xAF;count2=16;dy=d5;dz=d2;}
motor();
}
}
/**************定时器初始化数据**********************/
void Time_Init()
{
TMOD = 0x01 ; //定时器0工作方式1,16位定时器
TH0 = h;
TL0 = l;
EA=1;
ET0=1;
TR0 = 1;
}
/***************pwm初始化***********************************
/************************************************************/
void pwm_init()
{
CCON=0; // CR=0;开始不计时,可以省略
CMOD=0X00; //频率选择,选系统时钟/12为PWM输出频率
CH=0; //
CL=0; //PCA计数器的计数值
CCAP0H=k00; //初始PWM占空比100%
CCAP0L=k00; //初始PWM占空比100%
CCAP1H=k00; //初始PWM占空比100%
CCAP1L=k00; //初始PWM占空比100%
PCA_PWM0=0X00; //控制占空比的第九位为0
PCA_PWM1=0X00;
CCAPM0=0X42; //工作方式选择,选择为PWM输出工作方式
CCAPM1=0X42; //工作方式选择,选择为PWM输出工作方式
CR=1; //启动PCA定时器
}
void motor()
{
CCAP0H=dz; //CCAP0L CCAP0H是捕捉/ 比较寄存器, 代表的是调节占空比,CCAP0L= CCAP0H=0x80,占空比输出为50% 。
CCAP0L=dz; //PWM设置占空比
CCAP1H=dy;
CCAP1L=dy; //PWM设置占空比
}
void delay(uint z) //延时 Z 毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*************************定时中断1输出pwm波****************************/
void Time0_Int() interrupt 1
{
TH0=h;
TL0=l;
if(count < 1)
pwm = 1;
else
pwm = 0;
count++;
if(count >= count2)
count = 0;
}
复制代码
作者:
admin
时间:
2019-1-12 02:24
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
gsdaigdhqwjkqwa
时间:
2019-1-14 16:58
以前做的电磁赛道的
小车控制程序(2018).zip
2019-1-14 16:52 上传
点击文件名下载附件
下载积分: 黑币 -5
102.52 KB, 下载次数: 7, 下载积分: 黑币 -5
作者:
celebs0568
时间:
2019-1-14 17:10
看不懂
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1