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

標題: 基于89c52單片機的藍牙遙控小車程序 [打印本頁]

作者: 黑子Abner    時間: 2019-9-7 11:01
標題: 基于89c52單片機的藍牙遙控小車程序
通過設計進一步掌握51單片機的應用,特別是在嵌入式系統(tǒng)中的應用。進一步學習51單片機在系統(tǒng)中的控制功能,能夠合理設計單片機的外圍電路,并使之與單片機構(gòu)成整個系統(tǒng)。
制作方案
該小車采用藍牙模塊對單片機進行控制,單片機根據(jù)采集到的信號的不同狀態(tài)判斷小車當前狀態(tài),通過電機驅(qū)動芯片L298N發(fā)出控制命令,控制電機的工作狀態(tài)以實現(xiàn)對小車姿態(tài)片機的外圍電路,并使之與單片機構(gòu)成整個系統(tǒng)的控制。本次設計的藍牙小車可實現(xiàn)9種狀態(tài):前進、后退、左轉(zhuǎn)、右轉(zhuǎn)、加速、減速、左漂、右漂、停止。設計構(gòu)思結(jié)構(gòu)如圖下所示。



單片機源程序如下:
/*****************************************************/
/********版權(quán)所有:電子科技協(xié)會--嵐           **********/
/********** 藍牙遙控變速小車  ************************/

//    接口連接:

//    電機接口(4電機兩兩相連  并為兩組)
//    P0.2和P0.3-----右電機
//    P0.0和P0.1-----左電機
//    P0.4-----------通道使能A
//    P0.5-----------通道使能B
/*****************************************************/
#include <reg52.h>                     //調(diào)用reg52頭文件
//宏定義
#define uchar unsigned char      /*宏定義將unsigned char 用uchar代替,表示無符號字節(jié)型,char類型變量的大小通常為1個字節(jié)*/
#define uint unsigned int        /*宏定義將unsigned int用uint代替,表示無符號整型,int類型變量的大小通常為4個字節(jié)*/
/////////////////////////////////////
uchar n='0',num0=0,num1=0;      /*給n,num0,num1賦予初始值0*/
char zuo_pwm = 40,you_pwm = 40;     /*使單片機的定時器功能來產(chǎn)生穩(wěn)定的PWM(40Hz)脈沖波*/
/*定義P0.1,2,3,4口為控制驅(qū)動信號的I/O口*/
sbit zuo1=P0^0;                        
sbit zuo2=P0^1;                     
sbit you1=P0^2;            
sbit you2=P0^3;
//定義P0.4,5口為通道使能A,B分別控制左右各兩輪的速度
sbit ENA=P0^4;        
sbit ENB=P0^5;

sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;

sbit x1=P1^7;
sbit dd=P1^6;

/* 函數(shù)功能:設置串口*/
void init()                            //單片機串口初始化函數(shù)
{
    d1=1;d2=1;d3=1;d4=1;x1=0;dd=1;

        TMOD=0x21;                     //定時器1工作模式
        SCON=0x50;                     
                                       //設置串口方式1且允許串口接收。
        TMOD &= 0xF0;                  //設置定時器模式
        TMOD |= 0x01;                  //設置定時器模式

        TL0 = 0x91;                    //設置定時初值
        TH0 = 0xFF;                    //設置定時初值

        TH1=0xfd;                      //設置初值為0xfd,波特率是9600bps     
        TL1=0xfd;

        EA=1;                          //打開總中斷
        ET0=1;                         //打開定時器0中斷允許
        TR1=1;                         //定時器1開始計時
        TR0=1;                         //定時器0開始計時
        ES=1;                          //打開接收中斷
}

/*********小車狀態(tài)函數(shù)**********/
/********************************************************************
* 名稱 : qianjin()
* 功能 : 左右電機啟動,都是前進,整車表現(xiàn)為前進。
***********************************************************************/
void qian ()
{
        zuo_pwm=20; //左輪調(diào)速為全速的50%
        you_pwm=20; //右輪調(diào)速為全速的50%
        zuo1=1;
        zuo2=0;
        you1=1;
        you2=0;

}
/********************************************************************
* 名稱 :jiansu ()   
* 功能 : 左右電機啟動,都是前進,整車表現(xiàn)為低速前進。
***********************************************************************/
void jiansu ()                                 
{
        zuo_pwm=10; //左輪調(diào)速為全速的20%
        you_pwm=10; //左輪調(diào)速為全速的20%
        zuo1=1;
        zuo2=0;
        you1=1;
        you2=0;
}
/********************************************************************
* 名稱 :jiasu ()
* 功能 : 左右電機啟動,都是前進,整車表現(xiàn)為全速前進。
***********************************************************************/
void jiasu ()
{
        zuo_pwm=40;//左輪調(diào)速為全速的100%
        you_pwm=40;//左輪調(diào)速為全速的100%
        zuo1=1;
        zuo2=0;
        you1=1;
        you2=0;
}
/********************************************************************
* 名稱 :hou ()  
* 功能 : 左右電機啟動,都是后退,整車表現(xiàn)為后退。
***********************************************************************/
void hou ()                        
{

        zuo_pwm=30;//左輪調(diào)速為全速的75%
        you_pwm=30;//左輪調(diào)速為全速的75%
        zuo1=0;
        zuo2=1;
        you1=0;
        you2=1;
}
/********************************************************************
* 名稱 :zuozhuan()
* 功能 : 左右電機啟動,左輪后退,右輪前進,整車表現(xiàn)為低速左轉(zhuǎn)。
***********************************************************************/
void zuozhuan()                             
{
        zuo_pwm = 13;//左輪調(diào)速為全速的20%
        you_pwm = 13;//左輪調(diào)速為全速的32.5%
        zuo1=0;
        zuo2=1;
        you1=1;
        you2=0;
}
/********************************************************************
* 名稱 :youzhuan()
* 功能 : 左右電機啟動,左輪前進,右輪后退,整車表現(xiàn)為低速右轉(zhuǎn)。
***********************************************************************/
void youzhuan()
{
        zuo_pwm = 13;//左輪調(diào)速為全速的32.5%
        you_pwm = 13;//右輪調(diào)速為全速的20%
        zuo1=1;
        zuo2=0;
        you1=0;
        you2=1;        
}
/********************************************************************
* 名稱 :youpiao()
* 功能 : 只有右電機啟動,右輪后退,左輪不轉(zhuǎn),整車表現(xiàn)為右漂(由于速度慢表現(xiàn)不明顯)。
***********************************************************************/
void youpiao()
{
    zuo_pwm=35;//左輪調(diào)速為全速的87.5%
    you_pwm=35;//左輪調(diào)速為全速的87.5%
    zuo1=0;
    zuo2=0;
    you1=0;
    you2=1;

}
/********************************************************************
* 名稱 :zuopiao()
* 功能 : 只有左電機啟動,右輪不轉(zhuǎn),左輪后退,整車表現(xiàn)為左漂(由于速度慢表現(xiàn)不明顯)。
***********************************************************************/
void zuopiao()
{
    zuo_pwm=35; //左輪調(diào)速為全速的87.5%
    you_pwm=35; //左輪調(diào)速為全速的87.5%
    zuo1=0;
    zuo2=1;
    you1=0;
    you2=0;

}
/********************************************************************
* 名稱 :stop ()
* 功能 : 左右電機都不啟動,左右輪都不轉(zhuǎn),整車表現(xiàn)為停止。
***********************************************************************/
void stop ()
{
        zuo1=0;
        zuo2=0;
        you1=0;
        you2=0;
}
/*主函數(shù)*/
void main ()
{      
        init ();           //初始化
        while (1)          //循環(huán)函數(shù)
        {
            switch (n)     //藍牙控制,switch(表達式),case(常量表達式 )
            {
                case '2':qian ();d1=0;d2=0;d3=1;d4=1;    break;//接收手機串口發(fā)送的指令2 執(zhí)行前進函數(shù) 控制小車前進 執(zhí)行后退出switch
                case '3':jiansu ();d1=0;d2=0;d3=0;d4=0;  break;//接收手機串口發(fā)送的指令3 執(zhí)行減速函數(shù) 控制小車低速 執(zhí)行后退出switch
                case '4':jiasu ();d1=0;d2=0;d3=1;d4=1;   break;//接收手機串口發(fā)送的指令4 執(zhí)行加速函數(shù) 控制小車全速 執(zhí)行后退出switch
                case '5':hou ();d1=1;d2=1;d3=0;d4=0;     break;//接收手機串口發(fā)送的指令5 執(zhí)行后退函數(shù) 控制小車后退 執(zhí)行后退出switch
                case '6':zuozhuan ();d1=1;d2=0;d3=1;d4=0;break;//接收手機串口發(fā)送的指令6 執(zhí)行左轉(zhuǎn)函數(shù) 控制小車左轉(zhuǎn) 執(zhí)行后退出switch
                case '7':youzhuan ();d1=0;d2=1;d3=0;d4=1;break;//接收手機串口發(fā)送的指令7 執(zhí)行右轉(zhuǎn)函數(shù) 控制小車右轉(zhuǎn) 執(zhí)行后退出switch
                case '8':zuopiao();d1=0;d2=0;d3=0;d4=0;  break;//接收手機串口發(fā)送的指令8 執(zhí)行左漂函數(shù) 控制小車左漂 執(zhí)行后退出switch
                case '9':youpiao();d1=0;d2=0;d3=0;d4=0;  break;//接收手機串口發(fā)送的指令9 執(zhí)行右漂函數(shù) 控制小車右漂 執(zhí)行后退出switch
                case '0':stop();d1=0;d2=0;d3=0;d4=0;x1=0;break;//接收手機串口發(fā)送的指令0 執(zhí)行停止函數(shù) 控制小車停止 執(zhí)行后退出switch
                case '1':x1=1;d1=1;d2=1;d3=0;d4=0;       break;
                case 'A':x1=0;d1=1;d2=1;d3=1;d4=1;       break;
                case 'B':dd=0;d1=0;d2=0;d3=0;d4=0;       break;
                case 'C':dd=1;d1=1;d2=1;d3=1;d4=1;       break;
                default:break;             //未接收到指令直接退出switch
            }               
        }               
}
/* 函數(shù)功能:設置串口*/
void UART_SER()interrupt 4 //串行口中斷函數(shù)
{
        if (RI)//判斷是接收中斷產(chǎn)生
        {
            RI=0;  //讀標志位清零
            n=SBUF;//讀入緩沖區(qū)的值
            TI=1; //TI=1時,執(zhí)行下面的程序
            SBUF=n;//將內(nèi)容返回到手機端,可在手機查看發(fā)送的內(nèi)容
        }
        if (TI)    //如果是發(fā)送標志位,寫標志位清零
        TI=0;
}
//定時器0中斷函數(shù)
void Timer1Interrupt(void) interrupt 1 //指明是定時器中斷0        
{

        TL0 = 0x91;                //設置定時初值
        TH0 = 0xFF;                //設置定時初值

        num0++;                    //PWM調(diào)占空比
        num1++;  
        if(num0 <= zuo_pwm)         //判num0是否小于等于zuo_pwm,
        { ENA=1; }                  //若是通道使能A打開
        else ENA = 0;               //若否通道使能B關(guān)閉
        if(num0 == 40)              //判斷num0是否達到40
        {
         ENA = ~ENA;                //若是通道使能A狀態(tài)取反
         num0 = 0;                  //將num0的值歸為0
        }  
        if(num1 <= you_pwm)         //判num1是否小于等于you_pwm,
        {
         ENB = 1;                   //若是通道使能B打開
        }
        else ENB = 0;               //若否通道使能B關(guān)閉
        if(num1 == 40)              //判斷num1是否達到40
        {
        ENB = ~ENB;                 //若是通道使能B狀態(tài)取反
        num1 = 0;                   //將num1的值歸為0
        }
      }   

完整的Word格式文檔51黑下載地址:
藍牙遙控小車.docx (1.16 MB, 下載次數(shù): 42)



作者: ttaniscy    時間: 2019-9-15 11:00
太好的資料了,謝謝LZ
作者: 黑子Abner    時間: 2019-9-25 21:31
ttaniscy 發(fā)表于 2019-9-15 11:00
太好的資料了,謝謝LZ

共同進步




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲a视 | 亚洲精品乱码久久久久久9色 | 国产视频一区在线 | 国产1区2区| 久久久久久成人 | av网址在线播放 | 一级做受毛片免费大片 | 亚洲精品v日韩精品 | 欧美亚洲在线 | 久久成 | 91精品国产91久久久久久密臀 | 亚洲精品一区二区三区中文字幕 | 国产一二三区在线 | 国产91精品久久久久久久网曝门 | 精品在线看 | 国产激情免费视频 | 欧美黄在线观看 | 91精品国产99久久 | 亚洲免费在线观看av | 一级a爱片性色毛片免费 | www久久久 | 91麻豆产精品久久久久久夏晴子 | 祝你幸福电影在线观看 | 在线一区视频 | 精品国产一级片 | 国产电影一区二区在线观看 | 日韩毛片在线视频 | 国产高清视频一区 | 精品免费国产一区二区三区 | 91 视频网站| 91麻豆精品国产91久久久久久久久 | 久久久久久亚洲精品 | 中文字幕一区二区三区四区 | 中国一级特黄毛片大片 | 亚洲一区av| 欧美操操操 | 成人欧美一区二区 | 婷婷色国产偷v国产偷v小说 | 国产一区二区三区视频免费观看 | www成人免费视频 | 日韩精品四区 |