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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何在超聲波檢測模塊中加入 PWM控制舵機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:549313 發(fā)表于 2019-8-10 00:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 LINSA 于 2019-8-10 00:37 編輯

/******************************************************************************/
/*  Name:  LCD12864(St7920/St7921)+超聲波測距模塊+STC89C52                    */
/*  hy-SRF05 超聲波測距模塊 DEMO 程序                                                                              */
/*  晶振:11.0592M                                                            */
/*  接線:模塊TRIG接 P3.7  ECH0 接P3.6                                                                                  */
/*      RS        接  P24;                                                                                                       */
/*      RW        接  P23;                                                                                              */
/*      E         接  P22;                                                                                                  */
/*      PSB       接  P27;                                                                                              */
/******************************************************************************/
    #include   <REG51.H>
        #include   <intrins.h>        
//引腳定義
    sbit     RX    =  P3^6;
    sbit     TX    =  P3^7;
sbit RS = P2^6;
sbit RW = P2^5;
sbit E  = P2^7;
sbit RES = P2^5;
sbit PSB = P3^2;
sbit PAUSE = P1^6;




#define DataPort P0        //MCU P1<------> LCM
               


//Function Definition 函數(shù)聲明
void delayms(unsigned int ms);


void Delay(int num);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
unsigned int ReadTemperature(void);
void clock_out(unsigned char dd);
unsigned char clock_in(void);
unsigned char read_clock(unsigned char ord);
void write_clock(unsigned char ord, unsigned char dd);
void Disp(void);
void id_case1_key(void);
void id_case2_key(void);
void Set_time(unsigned char sel,bit sel_1);
void Timer0_Init(void);
void Init_1302(void);
void Set_Bell(unsigned char sel, bit sel_1);
void Bell(void);
//12864
void Write_char(bit start, unsigned char ddata);
void Send_byte(unsigned char bbyte);
void Delaynms(unsigned int di);
void Lcd_init(void);
void Disp_img(unsigned char *img);
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_set_xy( unsigned char x, unsigned char y );
unsigned char code num[]={"0123456789 :.-"};
unsigned char code waves[]={"測量值:"};
unsigned char code znwk[] ={"設(shè)置值:"};
unsigned char code CM[] =  {"米"};
unsigned char code DU[] =  {"度"};
unsigned int  time=0;
         long S=0;
         bit  flag =0;
unsigned char disbuff[4]           ={ 0,0,0,0,};
unsigned char code logo[]={  
/*--  調(diào)入了一幅圖像:logo.bmp  -- */
/*--  寬度x高度=128x64 歡迎使用本產(chǎn)品LOGO --*/
/*--  調(diào)入了一幅圖像:C:\Documents and Settings\lwd\桌面\新建文件夾\X.bmp  --*/
/*--  寬度x高度=128x64  --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xEF,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xEF,0x99,0xFF,0x9F,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x9F,0xFF,0xEF,0xF9,0xFF,
0xFF,0xEF,0x99,0xFF,0x9F,0xFF,0xFF,0x7F,0xFE,0xFF,0xFF,0x1F,0xFF,0xEF,0xF9,0xFF,
0xFF,0xFF,0x19,0xFE,0x9F,0xF7,0xFE,0xFF,0xFF,0xFF,0xFF,0x99,0xFF,0xEF,0xF9,0xFF,
0xFF,0x6F,0x00,0xFF,0x9F,0xEE,0xFE,0xFF,0xFF,0xFF,0xFF,0x99,0xFF,0xEF,0x79,0xFF,
0xFF,0xEF,0xF9,0xFF,0x9F,0xE8,0xFE,0xFF,0x8F,0xFF,0x0F,0x9F,0xFF,0x6F,0x09,0xFF,
0xFF,0x0F,0x7F,0xFF,0x1F,0xEE,0xFF,0x07,0x80,0xFF,0xE9,0x0F,0xF8,0x6F,0x70,0xFF,
0xFF,0xE1,0x00,0xFF,0x87,0x6E,0xFF,0x07,0xEF,0xFF,0x6F,0x80,0xFF,0x69,0x7E,0xFF,
0xFF,0xEF,0x7F,0xFF,0x9F,0x7E,0xFF,0xF7,0xEF,0xFF,0xEF,0x99,0xFF,0x89,0x6E,0xFF,
0xFF,0x8F,0x07,0xFF,0x1F,0x7E,0xFF,0xF7,0xE9,0xFF,0xF7,0x99,0xFF,0x6F,0x60,0xFF,
0xFF,0x67,0x71,0xFF,0x9F,0x7E,0xFF,0x07,0xE0,0xFF,0x97,0x91,0xFF,0x67,0x6E,0xFF,
0xFF,0xE7,0x1F,0xFF,0x8F,0x6E,0xFF,0xF7,0xEF,0xFF,0x87,0xF7,0xFF,0xEF,0x6E,0xFF,
0xFF,0xE9,0xF0,0xFF,0x91,0xEE,0xFF,0xF7,0xEF,0xFF,0x91,0x66,0xFF,0xEF,0x00,0xFF,
0xFF,0xE9,0xF7,0xFF,0x9F,0x96,0xFF,0xF7,0xE7,0xFF,0x91,0x68,0xFF,0x8F,0x98,0xFF,
0xFF,0xEF,0x07,0xF8,0x9F,0x96,0xFF,0x07,0xF8,0xFF,0x97,0x08,0xFF,0x9F,0x9E,0xFF,
0xFF,0x6F,0xE0,0xFF,0x9F,0x08,0xFF,0xF7,0xFF,0xFF,0x97,0xF9,0xFF,0x77,0x8E,0xFF,
0xFF,0xEF,0xF7,0xFF,0x9F,0xE8,0xFE,0xF7,0xFF,0xFF,0x87,0x9F,0xFF,0x77,0x9E,0xFF,
0xFF,0xEF,0x99,0xFF,0x9F,0xEE,0xFE,0xFF,0xFF,0xFF,0xF7,0x96,0xFE,0xF7,0xFE,0xFF,
0xFF,0xEF,0x79,0xFF,0x9F,0xF7,0xF9,0xFF,0xFF,0xFF,0x77,0x60,0xFE,0xF9,0xF8,0xFE,
0xFF,0xEF,0x7E,0xFE,0x8F,0xF9,0xF9,0xFF,0x00,0xFE,0x7F,0x86,0xFE,0xF9,0x01,0xF8,
0xFF,0x6F,0xFF,0xF8,0x9F,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};






/******************************************************************************/
void Lcd_init(void)        //初始化LCD
{
   delayms(40);           //大于40MS的延時(shí)程序
   PSB=1;                 //設(shè)置為8BIT并口工作模式
   delayms(1);            //延時(shí)
   RES=0;                 //復(fù)位
   delayms(1);            //延時(shí)
   RES=1;                 //復(fù)位置高
   delayms(1);
   Write_char(0,0x30);       //選擇基本指令集
   delayms(1);         //延時(shí)大于100us
   Write_char(0,0x30);       //選擇8bit數(shù)據(jù)流
   delayms(1);         //延時(shí)大于37us
   Write_char(0,0x0c);       //開顯示(無游標(biāo)、不反白)
   delayms(1);         //延時(shí)大于100us
   Write_char(0,0x01);       //清除顯示,并且設(shè)定地址指針為00H
   delayms(1);           //延時(shí)大于10ms
   Write_char(0,0x06);       //指定在資料的讀取及寫入時(shí),設(shè)定游標(biāo)的移動方向及指定顯示的移位,光標(biāo)從右向左加1位移動
   delayms(1);         //延時(shí)大于100us
}


/******************************************************************************/
/*------------------------------------------------
                    檢測忙位
------------------------------------------------*/
void Check_Busy()
{  
    RS=0;
    RW=1;
    E=1;
    DataPort=0xff;
    while((DataPort&0x80)==0x80);//忙則等待
    E=0;
}




void Write_char(bit start, unsigned char ddata) //寫指令或數(shù)據(jù)
{
//        unsigned char start_data,Hdata,Ldata;
          if(start==0)
{        Check_Busy();
        RS=0;
        RW=0;
        E=1;
        DataPort=ddata;
//        delayms(5);
        E=0;
//        delayms(5);        
}
    else   
{        Check_Busy();
        RS=1;
        RW=0;
        E=1;
        DataPort=ddata;
//        delayms(5);
        E=0;
//        delayms(5);  
}
}




/******************************************************************************/
void Delaynms(unsigned int di) //延時(shí)
{
        unsigned int da,db;
         for(da=0;da<di;da++)
                   for(db=0;db<10;db++);
}


/******************************************************************************/
void Disp_img(unsigned char  *img)        //圖形方式12864顯示字模221 橫向取膜
{
        unsigned char i,j;
        unsigned int k = 0;


        Write_char(0,0x36); //圖形方式
        for(i=0;i<32;i++)
          {
                Write_char(0,0x80+i);
                Write_char(0,0x80);
            for(j=0;j<16;j++)
                {
                        Write_char(1,img[k++]);
                }
          }


         for(i=0;i<32;i++)
          {
                Write_char(0,0x80+i);
                Write_char(0,0x88);
            for(j=0;j<16;j++)
                {
                        Write_char(1,img[k++]);
                  }
        }
}
        
/******************************************************************************/
void Clr_Scr(void)//清屏函數(shù)
{
        Write_char(0,0x01);
}


/******************************************************************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{        //設(shè)置LCD顯示的起始位置,X為行,Y為列
    unsigned char address;
        switch(x)
        {
                case 0: address = 0x80 + y; break;   
            case 1: address = 0x80 + y; break;
                case 2: address = 0x90 + y; break;
                    case 3: address = 0x88 + y; break;
                case 4: address = 0x98 + y; break;
                default:address = 0x80 + y; break;
        }
    Write_char(0, address);
}


/******************************************************************************/
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
{        //        中英文字符串顯示函數(shù)
        LCD_set_xy( X, Y );
   
    while (*s)
    {
                Write_char( 1, *s );
            s ++;
                Delaynms(1);
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:549313 發(fā)表于 2019-8-10 00:37 | 只看該作者
/******************************************************************************/
void LCD_Write_number(unsigned char s)//        數(shù)字顯示函數(shù)
{        
        Write_char(1,num);
        Delaynms(1);
}
/******************************************************************************/
void Lcd_Mark2(void)
{
        Clr_Scr();//清屏
        LCD_Write_string(1,0,znwk);//
        LCD_Write_string(3,0,waves);//        
        LCD_Write_string(3,7,CM);//        
    LCD_Write_string(1,7,CM);//        
    LCD_Write_string(2,7,DU);//        
    LCD_Write_string(4,7,DU);//        
}


/********************************************************/
    void Conut(void)
        {
           time=TH0*256+TL0;
           TH0=0;
           TL0=0;
         S=(time*1.8)/10;     //算出來是mM
         if((S>=7000)||flag==1) //超出測量范圍顯示“-”
         {         
          flag=0;
           LCD_set_xy( 3, 4 );
           LCD_Write_number(13);
           LCD_Write_number(12);
           LCD_set_xy( 3, 5 );
           LCD_Write_number(13);
           LCD_Write_number(13);
           LCD_Write_number(13);
         
           }
         else
          {
          disbuff[0]=S/1000;
          disbuff[1]=S/100%10;
          disbuff[2]=S/10%10;
          disbuff[3]=S%10;
           LCD_set_xy( 3, 4 );
           LCD_Write_number(disbuff[0]);
           LCD_Write_number(12);
           LCD_set_xy( 3, 5 );
           LCD_Write_number(disbuff[1]);
           LCD_Write_number(disbuff[2]);
           LCD_Write_number(disbuff[3]);
          }
        }
/********************************************************/
void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
/********************************************************/
     void zd0() interrupt 1                  //T0中斷用來計(jì)數(shù)器溢出,超過測距范圍
  {
    flag=1;                                                         //中斷溢出標(biāo)志
        RX=0;
  }
void Timer_Count(void)
{
                 TR0=1;                            //開啟計(jì)數(shù)
             while(RX);                        //當(dāng)RX為1計(jì)數(shù)并等待
             TR0=0;                                //關(guān)閉計(jì)數(shù)
         Conut();                        //計(jì)算


}


/********************************************************/
   void  StartModule()                          //T1中斷用來掃描數(shù)碼管和計(jì)800MS啟動模塊
  {
          TX=1;                                         //800MS  啟動一次模塊
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          TX=0;
  }


/********************************************************/
void main(void)
{  
    unsigned int valA;


        Lcd_init();       //設(shè)置液晶顯示器
        Clr_Scr();        //清屏        
        Disp_img(logo);          //顯示歡迎使用本產(chǎn)品LOGO
        delayms(80);
        Lcd_init();       //從圖形顯示狀態(tài)下返回
    Lcd_Mark2();
         TMOD=0x01;                   //設(shè)T0為方式1,GATE=1;
         TH0=0;
         TL0=0;         
         ET0=1;             //允許T0中斷
         EA=1;                           //開啟總中斷                        


        while(1)
          {
               
                delayms(60);
                RX=1;
            StartModule();
        for(valA=7510;valA>0;valA--)
            {
                  
               if(RX==1)
                   {
           Timer_Count();
                   }
             }
          }
}              




*******PWM******


//#include <STC15.h>
//#include"STC89C5xRC.H"



#include "reg51.h"


#define uint8        unsigned char   
#define uint16        unsigned short int
#define uint32        unsigned long


sbit SERVO0=P0^0;                        //控制舵機(jī)的PWM輸出口


uint16 Servo0PwmDuty=1500;        //PWM脈沖寬度


/***********************************************************
* 名    稱: DelayMs(uint16 ms)
* 功    能: 延時(shí)ms毫秒
* 入口參數(shù): ms        毫秒
* 出口參數(shù): 無
* 說    明:                                          
/**********************************************************/
void DelayMs(uint16 ms)
{
        uint16 i,j;
        for(i=0;i<85;i++)                //89單片機(jī)用85,12系列單片機(jī)用800
                for(j=0;j<ms;j++);
}
/***********************************************************
* 名    稱:InitTimer0()
* 功    能:時(shí)鐘0初始化
* 入口參數(shù):無
* 出口參數(shù):無
* 說    明:12M晶振,12分頻,所以計(jì)數(shù)器每遞增一個(gè)數(shù)就是1微秒,完全滿足舵機(jī)控制的精度要求
                        因?yàn)槎〞r(shí)器是TH0,TL0都要全部計(jì)數(shù)到0xFF后在計(jì)1個(gè)數(shù)就會產(chǎn)生中斷,所以要想產(chǎn)生
                        x毫秒的中斷,那么TH0,TL0就應(yīng)該賦值(0xFFFF-x)        從這個(gè)值開始計(jì)數(shù)產(chǎn)生定時(shí)中斷                                         
/**********************************************************/
void InitTimer0(void)
{
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0x00;                        //設(shè)置定時(shí)初值
        TH0 = 0x00;                        //設(shè)置定時(shí)初值
        TF0 = 0;                        //清除TF0標(biāo)志
        TR0 = 1;                        //定時(shí)器0開始計(jì)時(shí)
        ET0 = 1;                        //開定時(shí)器0中斷
}
/***********************************************************
* 名    稱:Timer0Value(uint16 pwm)  
* 功    能:給定時(shí)器0計(jì)數(shù)器賦值產(chǎn)生定時(shí)中斷
* 入口參數(shù):pwm                控制舵機(jī)的PWM脈沖寬度值(范圍:500~2500)
* 出口參數(shù):無
* 說    明:12M晶振,12分頻,所以計(jì)數(shù)器每遞增一個(gè)數(shù)就是1微秒,完全滿足舵機(jī)控制的精度要求
                        因?yàn)槎〞r(shí)器是TH0,TL0都要全部計(jì)數(shù)到0xFF后在計(jì)1個(gè)數(shù)就會產(chǎn)生中斷,所以要想產(chǎn)生
                        pwm毫秒的中斷,那么TH0,TL0就應(yīng)該賦值(0xFFFF-pwm)        從這個(gè)值開始計(jì)數(shù)產(chǎn)生定時(shí)中斷                                          
/**********************************************************/
void Timer0Value(uint16 pwm)
{
        uint16 value;
        value=0xffff-pwm;        
        TR0 = 0;
        TL0=value;                        //16位數(shù)據(jù)給8位數(shù)據(jù)賦值默認(rèn)將16位數(shù)據(jù)的低八位直接賦給八位數(shù)據(jù)
    TH0=value>>8;                //將16位數(shù)據(jù)右移8位,也就是將高8位移到低八位,再賦值給8位數(shù)據(jù)        
        TR0 = 1;
}
/***********************************************************
* 名    稱: main()
* 功    能: 入口函數(shù)
* 入口參數(shù): 無
* 出口參數(shù): 無
* 說    明:                                          
/**********************************************************/
void main(void)
{


        InitTimer0();        //定時(shí)器0初始化
        EA = 1;                        //開總中斷
        while(1)                //大循環(huán)
        {        
                Servo0PwmDuty = 500;                //脈沖寬度在500微秒,對應(yīng)-90°
                DelayMs(1000);                //延時(shí)1秒
                Servo0PwmDuty = 1000;        //脈沖寬度在1000微秒,對應(yīng)-45°
                DelayMs(1000);
                Servo0PwmDuty = 1500;
                DelayMs(1000);
                Servo0PwmDuty = 2000;
                DelayMs(1000);
                Servo0PwmDuty = 2500;
                DelayMs(1000);
                Servo0PwmDuty = 2000;
                DelayMs(1000);
                Servo0PwmDuty = 1500;
                DelayMs(1000);
                Servo0PwmDuty = 1000;
                DelayMs(1000);
        }
}


/***********************************************************
* 名    稱: Timer0_isr() interrupt 1 using 1
* 功    能: 時(shí)鐘0中斷處理
* 入口參數(shù): 無
* 出口參數(shù): 無
* 說    明:                                          
/**********************************************************/
void Timer0_isr(void) interrupt 1 using 1
{
        static uint16 i = 1;        //靜態(tài)變量:每次調(diào)用函數(shù)時(shí)保持上一次所賦的值,
                                                        //跟全局變量類似,不同是它只能用于此函數(shù)內(nèi)部
        switch(i)
        {
                case 1:
                        SERVO0 = 1;        //PWM控制腳高電平
                        //給定時(shí)器0賦值,計(jì)數(shù)Pwm0Duty個(gè)脈沖后產(chǎn)生中斷,下次中斷會進(jìn)入下一個(gè)case語句
                        Timer0Value(Servo0PwmDuty);        
                        break;
                case 2:
                        SERVO0 = 0;        //PWM控制腳低電平
                        //高脈沖結(jié)束后剩下的時(shí)間(20000-Pwm0Duty)全是低電平了,Pwm0Duty + (20000-Pwm0Duty) = 20000個(gè)脈沖正好為一個(gè)周期20毫秒
                        Timer0Value(20000-Servo0PwmDuty);
                        i = 0;        
                        break;         
        }
        i++;
}




回復(fù)

使用道具 舉報(bào)

板凳
ID:549313 發(fā)表于 2019-8-10 01:48 | 只看該作者
怎么把PWM控制舵機(jī)寫入超聲波中,測超聲波時(shí) 舵機(jī)也能轉(zhuǎn)動
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品一区二区三区在线播放 | 老头搡老女人毛片视频在线看 | 北条麻妃一区二区三区在线视频 | 欧美日韩一区二区三区视频 | 一区二区三区中文字幕 | 中文字幕精品一区二区三区精品 | 国产精品久久久久久久一区探花 | 亚洲精品中文字幕在线观看 | 黄色在线观看 | 男女羞羞视频网站 | 婷婷五月色综合 | 精品一区二区三区四区外站 | 国产黄色在线观看 | 日韩三级在线 | 久久久国产一区二区三区 | 国产一区 | 九九热国产精品视频 | 国产情侣激情 | 精品1区 | 久久青| 黄网站在线观看 | 久久久久久久久久久久亚洲 | 午夜视频免费在线 | 亚洲欧美一区二区三区国产精品 | 国产区在线免费观看 | 91免费在线视频 | 伊人超碰在线 | 国产在线视频一区二区 | 亚州综合在线 | 成人欧美一区二区三区在线观看 | 久久午夜国产精品www忘忧草 | 国产免费观看一级国产 | 免费毛片网站 | 久久久久香蕉视频 | 5060网一级毛片 | 欧美老少妇一级特黄一片 | 91人人澡人人爽 | 国产在线一区二区三区 | 亚洲精品2 | 91精品无人区卡一卡二卡三 | 国产精品精品久久久 |