久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1881|回復: 0
收起左側

51尋跡小車程序

[復制鏈接]
ID:370502 發表于 2018-7-12 20:54 | 顯示全部樓層 |閱讀模式
#include <reg52.h>
#include "string.h"
#include "intrins.h"
#include "LCD1602.H"
unsigned int exte_count=0,exte_time=0,mil=0;//測速脈沖 //測速計算時間單位 500mS 里程
unsigned char time1s_Flag;
unsigned int count;      //5us次數標識
sbit pwm =P1^0 ;          //PWM信號輸出
unsigned int jd;         //角度標識
#define CAR_SPEED_MAX 10
sbit PWM_R=P1^7;  //PWM輸出
sbit PWM_L=P1^2;
sbit Moto_RA=P1^6;
sbit Moto_RB=P1^5;
sbit Moto_LA=P1^4;
sbit Moto_LB=P1^3;  //左右電機驅動

unsigned char Moto_Speed_R; //速度 0-10
unsigned char Moto_Speed_L; //速度 0-10
unsigned char Moto_Speed_Num; //PWM調速
sbit XJ_R1=P3^4;  //PWM輸出
sbit XJ_R2=P3^5;  //PWM輸出
sbit XJ_L2=P3^6;
sbit XJ_L1=P3^7;
unsigned char Car_Sta; //小車狀態(方向改變時有一小段時間速度為滿速)
unsigned char Recv_Flag=0; //有新的一幀數據
/**藍牙遙控代碼 Begin**/
#define RECV_BUFF_MAX 20
#ifndef BAUDRATE
#define BAUDRATE 11259200
#endif
unsigned char Recv_Buff[RECV_BUFF_MAX];
unsigned char Recv_Point;
unsigned char Recv_Delay;
code unsigned char download[16]={"budiaodianxiazai"};
code char houtui[6]={"houtui"};
//62 75 64 69 61 6F 64 69 61 6E 78 69 61 7A 61 69
#define IAP_ENABLE 0x60      //IAP允許
sfr IAP_CNTR = 0xE7;        //IAP控制寄存器

/*void delay(unsigned int i)//??
{
  unsigned int j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}*/
/***********************************
*函數名稱:void Uart_byte(unsigned char adata)
*函數功能:串口字節發送
*參數說明:adata 要發送的字節
*返回說明:無
*其它說明:無
***********************************/
void Uart_byte(unsigned char adata)
{
TI=0;
SBUF=adata;
while(!TI);
TI=0;
}

/***********************************
*函數名稱:void Uart_init(unsigned int bps)
*函數功能:串口初始化
*參數說明:bps:波特率
*返回說明:無
*其它說明:波特率9600
***********************************/
/*void Uart_Init(unsigned long bps)
{
unsigned char val;
TMOD|=0x20;
val=BAUDRATE/(384*bps);
TH1=256-val;
TL1=256-val;
SCON=0x50;
TR1=1;
REN=1;
ES=1;  
}*/
void UartInit(void)  //9600bps@22.1184MHz
{
SCON = 0x50;  //8???,?????
TMOD &= 0x0F;  //?????1???
TMOD |= 0x20;  //?????1?8???????
TL1 = 0xFA;  //??????
TH1 = 0xFA;  //????????
ET1 = 0;  //禁止定時器1中斷
TR1 = 1;  //?????1
REN=1;
ES=1;
}
/***********************************
*函數名稱:void Uart_send(unsigned char *buf,unsigned char num)
*函數功能:串口發送
*參數說明:buf 要發送的數組  num 要發送的長度
*返回說明:無
*其它說明:無
***********************************/
void Uart_send(unsigned char *buf,unsigned char num)
{
while(num--)
{
  TI=0;
  SBUF=*buf++;
  while(!TI);
  TI=0;
}
}
/***********************************
*函數名稱:void Uart_recv(void)
*函數功能:完成一幀接受
*參數說明:無
*返回說明:無
*其它說明:無
***********************************/
void Uart_recv(void)
{
if (Recv_Point&&(!Recv_Delay))
{
  Recv_Flag=1;
}
}
/***********************************
*函數名稱:unsigned char Uart_string(char* arry)
*函數功能:串口解析【查找特定字符串】
*參數說明:arry 要查找的字符數組
*返回說明:0 沒找到   1 找到
*其它說明:所有查找結束后 必須清空Recv_Buff緩存
***********************************/
unsigned char Uart_string(char* arry)
{
char * p;     //指針變量
p=strstr(Recv_Buff,arry);  //strstr函數  在Recv_Buff中查找特定字符串
if (p)      //如果在Recv_Buff中找到特定字符串 會返回其所在位置  不關心位置在哪 只關心找到了
{
  return 1;
}
return 0;      //沒找到特定字符串  strstr函數會返回NULL[空]給指針p 所以返回0
}

/***********************************
*函數名稱:void L298N_Init(void)
*函數功能:初始化
*參數說明:無
*返回說明:無
*其它說明:無
***********************************/
void Uart_Power_Download(void)
{
unsigned int i=20000;
if (Uart_string("budiaodianxiazai"))
{
  P1=0xf0;
  i=60000;
  while(i--);
  
  IAP_CNTR = IAP_ENABLE;  //允許IAP, 也就是直接進入下載程序
}
}

/***********************************
*函數名稱:void Uart_Buff_Clear(void)
*函數功能:清空串口緩存數組
*參數說明:無
*返回說明:無
*其它說明:無
***********************************/
void Uart_Buff_Clear(void)
{
unsigned char i;
Recv_Point=0;
for (i=0;i<RECV_BUFF_MAX;i++)
{
  Recv_Buff[i]=0;
}
}

/***********************************
*函數名稱:void Uart (void) interrupt 4
*函數功能:串口中斷服務程序
*參數說明:無
*返回說明:無
*其它說明:無
***********************************/
void Uart (void) interrupt 4
{
if (RI)
{
  RI=0;
  Recv_Buff[Recv_Point++]=SBUF;
  if (Recv_Point>=RECV_BUFF_MAX)
  {
   Recv_Point=0;
  }
  Recv_Delay=19;
}
}

/**藍牙遙控代碼 End**/

/****** PWM調速代碼 begin ******/
/***********************************
*函數名稱:void PWM_Init(void)
*函數功能:PWM初始化
*參數說明:無
*返回說明:無
*其它說明:配置定時器0  設置初始速度值
***********************************/
void Timer0Init(void)  //125微妙@22.1184MHz
{
TMOD &= 0xF0;  //???????
TMOD |= 0x01;  //???????
TL0 = 0x28;  //??????
TH0 = 0xFF;  //??????
TF0 = 0;  //??TF0??
ET0=1;//開定時器中斷
TR0 = 1;  //???0????
EA=1;
PWM_R=1;
PWM_L=1;
}
/***********************************
*函數名稱:void Time0_isr (void) interrupt 1
*函數功能:定時器0中斷服務程序
*參數說明:無
*返回說明:無
*其它說明:無
***********************************/
void Time0_Int() interrupt 1 //中斷程序
{
TL0 = 0x30;  //??????
TH0 = 0xFF;  //??????
if(count< jd)              //判斷0.125ms次數是否小于角度標識
  pwm=1;                  //確實小于,PWM輸出高電平
else
  pwm=0;                  //大于則輸出低電平
count=(count+1);          //次數始終保持為40 即保持周期為20ms
if(count>=160)//實測 20mm
{
  count=0;
  exte_time++;
  if(exte_time>=50)//到1S
  {
   exte_time=0;
   time1s_Flag=1;
  }
}
if (Moto_Speed_Num<CAR_SPEED_MAX) //記數 一個周期的時間
{
  Moto_Speed_Num++;
}   
else
{
  Moto_Speed_Num=0;
}
if (Moto_Speed_Num<Moto_Speed_R) //占空比  高電平持續時間
{
  PWM_R=1;
}
else
{
  PWM_R=0;
}
if (Moto_Speed_Num<Moto_Speed_L)   //占空比  高電平持續時間
{
  PWM_L=1;
}
else
{
  PWM_L=0;
}
if (Recv_Delay)//接收超時
{
  Recv_Delay--;
}
}
/***********************************
*函數名稱:void Car_Run(unsigned char dire)
*函數功能:行進方向控制
*參數說明:dire 方向 0:停止   1:前   2:后   3:左   4:右
*返回說明:無
*其它說明:左右方向為原地轉彎 【若想前進中和后退中轉彎 需要與調速函數配合 使兩個車輪轉速不同】
***********************************/
void Car_Run(unsigned char dire)
{
unsigned int i=1500;
switch (dire)
{
  case 0://停止
  {
   Moto_RA=0;
   Moto_RB=0;
   Moto_LA=0;
   Moto_LB=0;  
  }break;
  case 1://前
  {
   Moto_RA=1;
   Moto_RB=0;
   Moto_LA=1;
   Moto_LB=0;  
  }break;
  case 2://后
  {
   Moto_RA=0;
   Moto_RB=1;
   Moto_LA=0;
   Moto_LB=1;  
  }break;
  default:break;
}
if (Car_Sta!=dire)   //轉換方向時 一小段時間加速 為了低速可以啟動
{
  Car_Sta=dire;
  while(i--);  
}
}
/***********************************
*函數名稱:void Sys_Init(void)
*函數功能:初始化
*參數說明:無
*返回說明:無
*其它說明:上電初始化
***********************************/
void Sys_Init(void)
{
//UartInit(); //9600bps@22.1184MHz
Timer0Init();//125微妙@22.1184MHz
}
void Extern1_Init(void)
{
  IT1 = 1;                        //set INT1 int type (1:Falling only 0:Low level)
    EX1 = 1;
}
void exint1() interrupt 2           //(location at 0013H)
{
  exte_count++;
mil++;
}
/**輪子直徑6.5CM 轉一圈大概走20cm,碼盤是20柵格,轉一圈是20個脈沖,一個脈沖對應1cm**/
void Seepd_display(void)
{
L1602_char(1,10,exte_count/100+0X30);
L1602_char(1,11,exte_count%100/10+0X30);
L1602_char(1,12,exte_count%10+0X30);
exte_count=0;
L1602_char(2,9,mil/100000+0x30);
L1602_char(2,10,mil%100000/10000+0x30);
L1602_char(2,11,mil%100000%10000/1000+0x30);
L1602_char(2,12,mil%100000%10000%1000/100+0x30);
L1602_char(2,13,mil%100000%10000%1000%100/10+0x30);
L1602_char(2,14,mil%10+0x30);
//L1602_string(2,15,"cm");
}
/***********************************
*函數名稱:void main(void)
*函數功能:主函數
*參數說明:無
*返回說明:無
*其它說明:程序入口
***********************************/
unsigned int i;
unsigned int j;
unsigned int x;

void Delay_xms( x)
{
for(i=0;i<x;i++)
  for(j=0;j<100;j++);
}
void zhixin()
{
jd=12;
delay(5);
}
void zuozhuan1()
{
jd=7;
delay(5);
}
void zuozhuan2()  
{
jd=7;
delay(5);
}
void youzhuan1()   
{
jd=17;
delay(5);
}
void youzhuan2()   
{
jd=17;
delay(5);
}
void main(void)
{
jd=12;//1.5mS//3001mS
count=0;
Sys_Init();
lcd_init();
L1602_string(1,1,table);
L1602_string(2,1,table1);
L1602_string(1,13,"cm/S");
L1602_string(2,15,"cm");
Car_Run(1);//
Extern1_Init();
Moto_Speed_R=5;
Moto_Speed_L=5;
while(1)
{
  
if((XJ_L1==1)&&(XJ_L2==0)) {jd=17; Delay_xms( 580) ; }  
   
if((XJ_L1==0)&&(XJ_L2==1)) {jd=13; Delay_xms( 230) ; }   
     
if((XJ_R1==0)&&(XJ_R2==1)) {jd=11; Delay_xms( 230) ; }     
     
if((XJ_R1==1)&&(XJ_R2==0)) {jd=7; Delay_xms( 580) ; }      
            
  jd=12;
  }
}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区免费视频 | 国产欧美精品区一区二区三区 | 久久中文字幕一区 | 亚洲欧洲中文日韩 | 欧美精品一区久久 | 日韩快播电影网 | 黄色一级大片在线免费看产 | 一区二区三区四区在线 | 国产精品久久久久久吹潮 | 一区视频 | 国产一区二区免费 | 国产精品久久久久久久久大全 | 国产高清不卡 | 亚洲精品美女视频 | 精品久久视频 | 密桃av | 国产成人精品免费视频大全最热 | 国产精品一区二区久久 | 超碰精品在线观看 | 一级a爱片性色毛片免费 | 国产精品1区 | 亚洲精品aⅴ | 国产综合精品一区二区三区 | 91视视频在线观看入口直接观看 | 黄色在线观看网址 | 国产高清视频一区 | 国产精品色av | 看a网站| 午夜久久久 | 天天操天天射天天 | 亚洲精彩免费视频 | 日韩区 | 四虎影院一区二区 | 国产精品自拍一区 | 国产激情一区二区三区 | 久久久久一区 | 成人午夜网站 | 国产精品69久久久久水密桃 | 中文字幕亚洲欧美 | 美国一级片在线观看 | 久久99久久99 |