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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8916|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

有關(guān)智能小車的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:186510 發(fā)表于 2017-4-5 23:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#include <math.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit P10 = P1^0;
sbit P11 = P1^1;   //  1號(hào)電機(jī)  右前輪
sbit P12 = P1^2;       
sbit P13 = P3^2;   //  2號(hào)電機(jī)  左前輪
sbit P14 = P1^4;
sbit P15 = P1^5;   //  3號(hào)電機(jī)  左后輪
sbit P16 = P1^6;
sbit P17 = P1^7;   //  4號(hào)電機(jī)  右后輪

sbit P20=P2^0;
sbit P21=P2^1;    //風(fēng)扇

sbit P26=P2^6;   //噪聲

sbit P35=P3^5;  //光敏

sbit TRIG = P3^6;    //   控制端
sbit ECHO = P3^7;           //   接收端


sbit a = P0^0;    // 避障 前右
sbit b = P0^1;    // 避障 前左                  
sbit c = P0^2;          // 避障 后右
sbit d = P0^3;    // 避障 后左

sbit f = P0^4;    // 循跡 前右
sbit g = P0^5;    // 循跡 前左
sbit h = P0^6;    // 循跡 后右
sbit i = P0^7;    // 循跡 后左

sbit PWM1=P2^2;   
sbit PWM2=P2^3;
sbit PWM3=P2^4;
sbit PWM4=P2^5;  //控制四個(gè)輪速度 需要用到定時(shí)器 在本程序中沒有設(shè)置

sbit Beep=P1^3;  //蜂鳴器

uchar e;
uchar n,angle,count;    //距離標(biāo)志位,0.5ms次數(shù),角度標(biāo)識(shí)
float S;                //距離變量

void delay()                  
{
        uchar a;
        for(a=450;a>0;a--)
        {
                _nop_();
        }
}

void DelayUs2x(uchar t)
{   
        while(--t);
}

void DelayMs(uchar t)
{
        while(t--)
        {
            DelayUs2x(245);
            DelayUs2x(245);
        }
}                  //大致延時(shí)1mS       

void Time(void)
{
    TMOD|=0x21;   /*TMOD有高八位與第八位   GATE=0, C/T=0(定時(shí)器模式),  |=位操作寫法,強(qiáng)制賦值
                          定時(shí)器1工作方式2(8位自動(dòng)重裝定時(shí)器) (藍(lán)牙),
                          定時(shí)器0(16位定時(shí)器)超聲波  */
                TH0=0x00;     //定時(shí)器0  高八位的初值
    TL0=0x00;     //低八位的初值     定時(shí)最大的值65.536ms
    SCON=0x50;   //0101 0000  SM0=0 SM1=1 (10位異步收發(fā)器(8位數(shù)據(jù))) SM2=0(多機(jī)通訊位) REN=1(串行接受允許位)              串口方式1 SM0 SM1 01 允許接收  
    PCON=0x00;   /*PCON沒有位尋址的,不能直接操作  SMOD=0 16分頻 波特率不加倍
                        波特率=(2*SMOD)/32*定時(shí)器1的溢出率
                        定時(shí)器1的溢出率=單片機(jī)內(nèi)的時(shí)鐘頻率/(256-X) X是定時(shí)器的初值   
                        因此 波特率=(2*SMOD)/32*(單片機(jī)內(nèi)部的時(shí)鐘頻率/(256-X))    */
          TH1=0xFd;   
    TL1=0xFd;     /*11.0592晶振   9600波特率
                          在串行通信時(shí),T1定時(shí)器是用作波特率發(fā)生器的,且為方式2,這樣,TL1是作為8位計(jì)數(shù)器的,
                          而TH1是作為時(shí)間常數(shù)的寄存器的,可以實(shí)現(xiàn)TL1計(jì)數(shù)回0時(shí)自動(dòng)重裝時(shí)間常數(shù),即將TH1中的數(shù)自動(dòng)送給TL1,再次計(jì)數(shù)。
                    TH1,TL1是單片機(jī)的16位定時(shí)器T1,只有給TH1,TL1賦值,定時(shí)器就開始計(jì)數(shù),才能控制串行通信的波特率,而這值是根據(jù)需要的波特率計(jì)算出來的。*/
          TR1=1;       //打開定時(shí)器1
          IE=0x92;     //IE中斷允許寄存器  1001 1010 即EA=1(打開總中斷) ES=1(打開串口中斷) ET1=1(打開定時(shí)器1源中斷) ET0=1(打開定時(shí)器0源中斷)

}

void csb()
{
        TRIG=1;            //觸發(fā)信號(hào)是高電平脈沖,寬度大于10us
    DelayUs2x(10);
    TRIG=0;         
    while(!ECHO);   //等待高電平
    TR0=1;          //T0開始運(yùn)行
    while(ECHO);    //等待低電平
    TR0=0;          //T0關(guān)閉
    S=TH0*256+TL0;  //取出定時(shí)器值高8位和低8位合并
    S=S/58;         //為什么除以58等于厘米,  Y米=(X秒*344)/2
                    // X秒=( 2*Y米)/344 -> X秒=0.0058*Y米 -> 厘米=微秒/58
    if(S>=40)
     {
                   n=1;        //距離大于40cm  標(biāo)記
                 }
    if(S<40)
     {
                    n=0;       //距離小于40   標(biāo)記
                 }

    TH0=0;
    TL0=0;         //清除定時(shí)器0寄存器中的值       
}

void FMQ()
{
                uint n;       
                                        for(n=1;n<20;n++)
                                {
                                                        uint m;
                                        for(m=800;m>0;m--)          
                                        {
                                                Beep=~Beep;       
                                                delay();               
                                        }
                                        for(m=500;m>0;m--)         
                                        {
                                                Beep=~Beep;
                                                delay();
                                                delay();       
                                        }
                                }
}

void fsz()
{
        P20=0;
        P21=1;
}

void fsf()
{
        P20=1;
        P21=0;
}

void fst()
{
        P20=0;
        P21=0;
}
void  run(void)                 // 前進(jìn)
{

  P10 =1;
  P11 =0;

  P12 =1;
  P13 =0;

  P14 =1;
  P15 =0;

  P16 =1;
  P17 =0;
}

void backrun(void)                // 后退
{
  P10 =0;
  P11 =1;

  P12 =0;
  P13 =1;

  P14 =0;                                                         
  P15 =1;

  P16 =0;
  P17 =1;
}

void stop(void)                         // 停止
{
  P10 =0;
  P11 =0;

  P12 =0;
  P13 =0;

  P14 =0;
  P15 =0;

  P16 =0;
  P17 =0;
}

void leftrun(void)           // 左轉(zhuǎn)
{
  P10 =1;
  P11 =0;

  P12 =0;
  P13 =1;

  P14 =0;
  P15 =1;

  P16 =1;
  P17 =0;
}

void rightrun(void)                 // 右轉(zhuǎn)
{
  P10 =0;
  P11 =1;

  P12 =1;
  P13 =0;

  P14 =1;
  P15 =0;

  P16 =0;
  P17 =1;
}


void main(void)
{
                     
    Time();             //初始化定時(shí)器
        while(1)
        {
                         if(e=='2')
                         {
                                        run();
                                                                while((a==1)&&(b==0))     //前左側(cè)遇到障礙物右拐
                                                                {
                                                                        rightrun();
                                                                        DelayMs(200);
                                                                }
                                                                while((a==0)&&(b==1))     //前右側(cè)遇到障礙物左拐
                                                                {
                                                                        leftrun();
                                                                        DelayMs(200);
                                                                }
                                                                while((a==0)&&(b==0))     //兩邊同時(shí)遇到障礙物左拐
                                                                {
                                                                        stop();
                                                                        DelayMs(5000);
                                                               
                                                                }
                                                                while((c==1)&&(d==0))      //后右側(cè)遇到障礙物右拐
                                                                {
                                                                        rightrun();
                                                                        DelayMs(200);
                                                                }
                                                                while((c==0)&&(d==1))     //后右側(cè)遇到障礙物左拐
                                                                {
                                                                        leftrun();
                                                                        DelayMs(200);
                                                                }
                                                                while((f==1)&&(g==0))     //左邊遇到白右轉(zhuǎn) 1黑0白
                                                                {
                                                                        rightrun();
                                                                        DelayMs(170);       
                                                                }
                                                                while((f==0)&&(g==1))     //右邊遇到白左轉(zhuǎn)
                                                                {
                                                                        leftrun();
                                                                        DelayMs(170);
                                                                }
                                                                while((h==0)&&(i==1))    //右邊遇到白左轉(zhuǎn)
                                                                {
                                                                        leftrun();
                                                                        DelayMs(170);
                                                                }
                                                                while((h==1)&&(i==0))    //左邊遇到白右轉(zhuǎn)
                                                                {
                                                                        rightrun();
                                                                        DelayMs(170);
                                                                }
                                                         }                               //按鍵2 前進(jìn)(帶避障)
                                                         
                                                                else if(e=='4') leftrun();     //按鍵4 向左轉(zhuǎn)
                                                         
                                                                else if(e=='6')  rightrun();   //按鍵6 向右轉(zhuǎn)
                                                         
                                                                else if(e=='8')
                                                                {
                                                                                        backrun();
                                                                                        while((a==1)&&(b==0))     //前左側(cè)遇到障礙物右拐
                                                                                        {
                                                                                                rightrun();
                                                                                                DelayMs(200);
                                                                                        }
                                                                                 while((a==0)&&(b==1))     //前右側(cè)遇到障礙物左拐
                                                                                        {
                                                                                                leftrun();
                                                                                                DelayMs(200);
                                                                                        }
                                                                                 while((a==0)&&(b==0))     //兩邊同時(shí)遇到障礙物左拐
                                                                                        {
                                                                                                stop();
                                                                                                DelayMs(5000);
                                                                                        }
                                                                                 while((c==1)&&(d==0))      //后右側(cè)遇到障礙物右拐
                                                                                        {
                                                                                                rightrun();
                                                                                                DelayMs(200);
                                                                                        }
                                                                                 while((c==0)&&(d==1))      //后右側(cè)遇到障礙物左拐
                                                                                        {
                                                                                                leftrun();
                                                                                                DelayMs(200);
                                                                                        }
                                }                                      //按鍵8 后退(帶避障)
                               
                                else if(e=='1')
                                {
                                        FMQ();
                                        DelayMs(100);                         //按鍵1 蜂鳴器
                                }
                               
                                else if(e=='A') run();                //向上箭頭 僅前進(jìn)
                                       
                                else if(e=='B') backrun();            //向下箭頭 僅后退
                               
                                else if(e=='C') leftrun();            //向左箭頭 僅左轉(zhuǎn)
                               
                                else if(e=='D') rightrun();           //向右箭頭 僅右轉(zhuǎn)
                               
                                else if(e=='7') fsz();
                               
                                else if(e=='9') fsf();
                               
                                else if(e=='5') fst();
                       
                                else stop();
                               
                                if(P26==0) FMQ();
                               
                                else Beep=0;
                               
         }
}

void serial() interrupt 4
{
        RI=0;                              //接受中斷位 必須由軟件置0  硬件置1
        e=SBUF;                            //接受緩沖器SBUF賦值給e
}

void Time0_0(void) interrupt 1      //定時(shí)器中斷   (void)是必須的
{
        ECHO=0;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:440298 發(fā)表于 2018-12-5 18:37 | 只看該作者
感謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:357019 發(fā)表于 2018-12-9 09:38 | 只看該作者
程序很到位,謝謝樓主,第一次接觸這類的東西。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频一区二区三区四区 | 影音先锋久久 | 亚洲精品乱码久久久久久蜜桃 | 免费久久久久久 | 久久久久一区二区三区 | 欧美在线综合 | 少妇特黄a一区二区三区88av | 国产精品国产自产拍高清 | 91影院 | 免费a在线 | 日韩喷潮 | h视频在线免费 | 国产精品久久久久久久久免费 | 免费观看www | 成人在线 | 福利片在线| 亚洲精品在线国产 | 亚洲精品视频在线 | 国产99视频精品免费播放照片 | 日韩毛片视频 | 亚州综合一区 | 国产伊人精品 | 日本黄色短片 | 中文在线视频 | 免费国产精品久久久久久 | 自拍中文字幕 | 国产一区二区三区视频 | 中文字幕97 | 尤物在线精品视频 | 欧美精品一区二区三区在线四季 | 国产在线视频一区二区董小宛性色 | 日韩在线高清 | 99riav3国产精品视频 | 毛片久久久 | 可以在线看的黄色网址 | 国产精品久久久久一区二区三区 | a在线视频观看 | 看av片网站 | 欧洲一区在线观看 | 日韩在线国产 | 日本午夜精品 |