標(biāo)題:
單片機(jī)光電智能車(chē)程序
[打印本頁(yè)]
作者:
張zhang
時(shí)間:
2019-1-12 21:15
標(biāo)題:
單片機(jī)光電智能車(chē)程序
此程序?yàn)楣怆娭悄苘?chē)程序
#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;
//電機(jī)pwm輸入接口為P1^3和P1^4 可通過(guò)控制2和5控制電機(jī)停轉(zhuǎn)
//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 //控制電機(jī)轉(zhuǎn)速的幾個(gè)中斷pwm波的占空比
//控制電機(jī)轉(zhuǎn)速的幾個(gè)中斷pwm波的占空比
#define mh00 0xf8 //中間角度初值 //打直第一次出現(xiàn)吧
#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 //左轉(zhuǎn)角度
#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 //右轉(zhuǎn)角度
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);
//*********主函數(shù)*****************/
void main ()
{
d2=k45;d3=k50;d5=k60;d7=k70;
P14=0;
delay(10000);
delay(10000);
delay(10000);
Time_Init();
pwm_init() ;
//延時(shí)發(fā)車(chē)
P0=0xff;
P2=0xfa;
h=0xfa;
l=0xe7;
dz=dy=d7; // dz<dy 左轉(zhuǎn)
while(1) //dy大表示右邊輪子轉(zhuǎn)的快
{ //左邊輪子接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 左轉(zhuǎn)
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();
}
}
/**************定時(shí)器初始化數(shù)據(jù)**********************/
void Time_Init()
{
TMOD = 0x01 ; //定時(shí)器0工作方式1,16位定時(shí)器
TH0 = h;
TL0 = l;
EA=1;
ET0=1;
TR0 = 1;
}
/***************pwm初始化***********************************
/************************************************************/
void pwm_init()
{
CCON=0; // CR=0;開(kāi)始不計(jì)時(shí),可以省略
CMOD=0X00; //頻率選擇,選系統(tǒng)時(shí)鐘/12為PWM輸出頻率
CH=0; //
CL=0; //PCA計(jì)數(shù)器的計(jì)數(shù)值
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; //啟動(dòng)PCA定時(shí)器
}
void motor()
{
CCAP0H=dz; //CCAP0L CCAP0H是捕捉/ 比較寄存器, 代表的是調(diào)節(jié)占空比,CCAP0L= CCAP0H=0x80,占空比輸出為50% 。
CCAP0L=dz; //PWM設(shè)置占空比
CCAP1H=dy;
CCAP1L=dy; //PWM設(shè)置占空比
}
void delay(uint z) //延時(shí) Z 毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*************************定時(shí)中斷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;
}
復(fù)制代碼
全部資料51hei下載地址:
智能車(chē)·程序 - 副本.zip
(195.6 KB, 下載次數(shù): 7)
2019-1-12 21:14 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2019-1-13 02:06
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1