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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1668|回復(fù): 0
收起左側(cè)

51單片機(jī)藍(lán)牙小車程序代碼

[復(fù)制鏈接]
ID:1038063 發(fā)表于 2022-7-2 17:46 | 顯示全部樓層 |閱讀模式
希望能夠幫助到更多剛?cè)腴T學(xué)習(xí)51小車的愛好者

main.c主文件:
#include <car.h>

extern unsigned char Left_Speed_Ratio;
extern unsigned char Right_Speed_Ratio;
unsigned int time=0;
unsigned int HC_SR04_time=0;
extern unsigned char pwm_val_left;
extern unsigned char pwm_val_right;
bit   flag =0;
extern char M_sensor;  
char Work_Mode=0;   //工作模式的選擇  為0時,為手機(jī)或者電腦等上位機(jī)對小車進(jìn)行藍(lán)牙遙控 ,為1時小車自動避障模式
char Work_Mode2=0;
unsigned char receive_data=0;
unsigned char receive_real_data=0;
void delay1s(void)   
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  
}
void delay1ms(void)   
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

void Timer0Init()
{
        TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

        TH0=0XFC;        //給定時器賦初值,定時1ms
        TL0=0X18;       
        ET0=1;//打開定時器0中斷允許
        EA=1;//打開總中斷
        TR0=1;//打開定時器                       
}

void Timer1Init()
{
        TMOD=0X11;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。選擇為定時器0模式,工作方式1,僅用TR1打開啟動
        TH1=0;       
        TL1=0;       
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器                       
}



void Timer1Init2()
{
                SCON=0X50;                        //設(shè)置為工作方式1,8位數(shù)據(jù),可變波特率
          TMOD |=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
          PCON=0X00;                        //波特率不加倍
          TH1=0XFd;                    //計(jì)數(shù)器初始值設(shè)置,9600  @11.0592MHz
          TL1=0XFd;
          TR1=1;                                        //打開計(jì)數(shù)器
          ES = 1;         //開串口中斷
    EA = 1;         //開總中斷
}




void timer0()interrupt 1 using 2
{
TH0=0XFC;        //給定時器賦初值,定時1ms
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
       
HC_SR04_time++;
if(HC_SR04_time>=500)   //500ms 啟動一次超聲波測距
{
        HC_SR04_time=0;
        StartModule();
}
}

void Timer1() interrupt 3
{
        flag=1;    //若定時器1溢出則flag置1
}


void Com_Int(void) interrupt 4
{
    EA = 0;       

  if(RI == 1) //當(dāng)硬件接收到一個數(shù)據(jù)時,RI會置位
        {
           LED=0;
                RI = 0;
                receive_data = SBUF;//接收到的數(shù)據(jù)
                if(receive_data!=0)
                receive_real_data=receive_data;
               
          switch(receive_real_data)
          {
                      case '5': Speed_add(); break;
                case '6': Speed_reduce(); break;
                }
               
                SBUF=receive_real_data;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
          while(!TI);                         //等待發(fā)送數(shù)據(jù)完成
          TI=0;                                                 //清除發(fā)送完成標(biāo)志位
               
               
}
    EA = 1;       
}

void main()
        {
        Timer0Init();
        Timer1Init2();       
        Left_Speed_Ratio=5;   //設(shè)置左電機(jī)車速為最大車速的50%
        Right_Speed_Ratio=5;        ////設(shè)置右電機(jī)車速為最大車速的50%
        while(1)
                {
                  if(Work_Mode==1)
                        {
                                   ES=0;   //關(guān)閉串口中斷
                                  
                                 if(Work_Mode2==0)
                                 {
                                       
                                        Timer1Init();
           Work_Mode2=1;
                                          
                                 }
                                         
                               
                                                if(Echo==1)
                                {
                                TH1=0;       
              TL1=0;
                                TR1=1;                            //開啟計(jì)數(shù)       
                                while(Echo);                        //當(dāng)RX為1計(jì)數(shù)并等待       
                                TR1=0;                                //關(guān)閉計(jì)數(shù)       
                          Conut();                        //計(jì)算               
                        }
                               
                  if(M_sensor==1)
                                {  run(); }
                  else
                          {
                              if(L_sensor==1)
                                       {     left();       }
                       
                              else if(R_sensor==1)
                                       {    right() ;      }
                              else
                                                   {    back();          }
                       
                         }
                                       
                        }
                        else
                               
                        {
                               
                        switch(receive_real_data)
        {

                      case '1': run(); break;
                      case '2': left(); break;
                      case '3': right(); break;
                       case '4': back(); break;
                                  case '7': stop(); break;
                case '8': Work_Mode=1; break;
                }
                       
                               
                    LED=1;
     }       
                }
}
car.h頭文件:
#ifndef __car_H
#define __car_H

#include <reg52.h>
#include <intrins.h>

sbit Left_moto_pwm=P1^6 ;
sbit Right_moto_pwm=P1^7;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit Trig= P1^4; //產(chǎn)生脈沖引腳
sbit Echo= P1^5; //回波引腳
sbit LED=P0^0;
sbit L_sensor=P2^0;
sbit R_sensor=P2^1;
void Left_moto_go() ;
void Left_moto_back() ;
void Left_moto_stp() ;
void Right_moto_go();
void Right_moto_back();
void Right_moto_stp();
void delay(unsigned int k) ;
void delay1s(void) ;
void delay1ms(void);
void pwm_out_left_moto(void) ;
void pwm_out_right_moto(void);
void run(void);
void back(void);
void left(void);
void right(void);
void stop(void);
void rotate(void);
void  StartModule() ;
void Timer1Init();
void Timer0Init();
void Conut(void);
void Timer1Init2();
void  Speed_add() ;
void  Speed_reduce();


#endif


回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 毛片综合 | 久久激情五月丁香伊人 | 99久久婷婷国产综合精品电影 | 久久人人爽人人爽人人片av免费 | 91亚洲精选 | 特级黄一级播放 | 欧美日韩网站 | 羞羞免费网站 | 久久男人天堂 | 国产这里只有精品 | 国产成人免费 | 在线观看中文字幕一区二区 | 九九九视频在线 | 91偷拍精品一区二区三区 | 精品www| 欧美日韩网站 | 天天操网| 男人阁久久 | 日日干天天操 | 日本又色又爽又黄的大片 | 国产一区二区久久 | 国产精品视频网 | 性天堂网 | 精品免费视频 | 九九热在线精品视频 | 久久一区二区视频 | 日本不卡一区 | 精品无码三级在线观看视频 | 一级黄色片网址 | 午夜在线视频 | 国产一区二区不卡 | 久久久蜜桃 | 黄色激情毛片 | 日本一二三区电影 | h片在线观看免费 | 国产欧美日韩视频 | 亚洲成人中文字幕 | 日韩欧美专区 | 久久婷婷色 | 日韩图区 | 亚洲导航深夜福利涩涩屋 |