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

標題: 51控制舵機無法實現轉固定角度,為什么,求大神指點? [打印本頁]

作者: 20151470    時間: 2017-2-12 14:44
標題: 51控制舵機無法實現轉固定角度,為什么,求大神指點?
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit KEY1 = P3^2;        //定義調速的按鍵
sbit DC = P1^0;                //定義直流電機的控制端口
uchar CYCLE;                  //定義周期
uchar PWM;                    //定義低電平時間
/*********************************
函數:Delay_1ms()
參數:t
返回:無
功能:延時子程序,延時時間為 1ms * del。
          使用晶振是11.0592M。
**********************************/
void Delay_1ms(uint t)
{
        uint i,j;
        for(i=0;i<t;i++)
        {
                for(j=0;j<=100;j++)
                {
                        _nop_();
                }
        }       
}
/*********************************
函數:Time0Init()
參數:無
返回:無
功能:設置定時器0的工作方式2定時時長為100微秒,
      并打開中斷和啟動定時器。
          該例中使用的單片機晶振為11.0592M。
**********************************/
void Time0Init(void)
{
        TMOD = 0x02;        //設定定時器0工作在方式2模式
        TH0  = 0xA3;    //定時時長為100微秒的初值自動重載
        TL0  = 0xA3;    //定時時長為100微秒的初值
        ET0 = 1;        //打開定時器0中斷
        EA = 1;                    //打開總中斷
        TR0 = 1;            //啟動定時器
}
/*********************************
函數:Time0Int()
參數:無
返回:無
說明:定時器0中斷函數。用于處理PWM的信號。
**********************************/
void Time0Int(void) interrupt 1 using 1
{
        static uchar Count;   //當前處于周期的什么時刻
        if(Count == PWM)    //判斷低電平時間是否結束
        {
                DC = 1;                 //直流電機轉
        }
        Count++;
        if(Count == CYCLE)  //一個周期結束
        {
                Count=0;
                if(PWM != 0)   //如果左右時間是0 保持原來狀態
                {
                        DC = 0;    //直流電機不轉
                }
        }
}
/*********************************
函數:Key()
參數:無
返回:無
功能:判斷KEY1是否按下并讓數碼管顯示和給PWM提供低電平時長。
**********************************/
void Key(void)
{
        static uchar Number = 1;                 //定義檔位,初始化為1檔
        if(KEY1 == 0)   // 判斷是否有按鍵按下
          {
                   Delay_1ms(15);   //延時抗干擾信號
                   if(KEY1 == 0)    //再次判斷是否有按鍵按下
              {
                           Number++;           //按一下P3.2口,就給直流電機換一個檔位
                          if(Number == 6)   //等于6時,給檔位重新賦值1
                        {
                                Number = 1;
               }
                        switch(Number)
                        {
                               case 1:
                                {
                                        P0=0x06;        //數碼管顯示1       
                                        PWM=175;    //高電平2.5毫秒,舵機旋轉到右極限(為+90度)
                                        break;       
                                }
                                   case 2:
                                {
                                        P0=0x5B;        //數碼管顯示2
                                        PWM=180;    //高電平2毫秒,舵機旋轉角度為+45度
                                        break;
                                }
                               case 3:
                                {
                                        P0=0x4F;        //數碼管顯示3
                                        PWM=185;    //高電平1.5毫秒,舵機旋轉角度為0度
                                        break;
                              }
                                case 4:
                                {
                                        P0=0x66;        //數碼管顯示4
                                        PWM=190;    //高電平1毫秒,舵機旋轉角度為-45度
                                        break;
                                }
                                case 5:
                                {
                                        P0=0x6d;        //數碼管顯示5
                                        PWM=195;    //高電平0.5毫秒,舵機旋轉角度為-90度
                                        break;
                               }
                                default:
                                        break;
                           }
                        while(1)    //按鍵釋放
                        {
                                if(KEY1 == 1)   //判斷是否釋放
                                {
                                        break;
                                }
                        }
                  }
        }
}
/*********************************
函數:Main()
參數:無
返回:無
功能:主函數
**********************************/
void main(void)
{
        Time0Init();    //定時器0初始化
        CYCLE = 200;        //定義PWM周期為20毫秒
        P2 = 0xfe;          //數碼管最后一位亮
        while(1)
        {
                Key();       
        }
}






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 午夜一区二区三区在线观看 | 久久精品免费看 | wwwsihu| 国产精品久久久久久一区二区三区 | 免费精品久久久久久中文字幕 | 亚洲午夜精品在线观看 | 欧美精品一区二区三区在线播放 | 蜜桃视频在线观看免费视频网站www | 卡通动漫第一页 | 成人午夜在线 | 精品国产视频 | 国产91网址 | 久久天堂网 | 欧美一区二区在线观看视频 | 91在线精品视频 | av网站免费看 | 久久99久久99精品免视看婷婷 | 不卡的av在线 | 日本精品一区 | 91欧美精品成人综合在线观看 | 在线一区视频 | 成人国产精品 | 超碰最新在线 | 精品一区二区在线视频 | 国产 欧美 日韩 一区 | 久久国产成人 | www.性色 | 成人一区二区在线 | 成人国产精品入口免费视频 | 久久日韩精品一区二区三区 | 国产精品日日摸夜夜添夜夜av | 欧洲一级视频 | 日本一道本视频 | 亚洲入口 | 一级全黄视频 | 久久一区| 三级av免费 | 亚洲精品日韩欧美 | 黄色片免费在线观看 | 欧美日韩在线播放 | 日韩免费高清视频 |