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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32f103單片機按鍵控制sg90舵機代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:853162 發(fā)表于 2021-4-24 10:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近學(xué)習(xí)了stm32,就想用它來控制舵機,然后寫下這篇文章分享給大家,如果有理解不到位的地方歡迎大家指正。(我使用的是stm32f103rc型號的開發(fā)板,其實也可以用在stm32f103c8上面)
按鍵控制舵機主要就是通過按鍵中斷來進(jìn)行pwm舵機函數(shù)從而進(jìn)行控制舵機

單片機源程序如下:
  1. #include "key.h"
  2. #include "delay.h"

  3. void KEY_Init(void)
  4. {
  5.         
  6.         GPIO_InitTypeDef GPIO_InitStructure;

  7.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC時鐘

  8.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//關(guān)閉jtag,使能SWD,可以用SWD模式調(diào)試
  9.         
  10.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;//PA15
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置成上拉輸入
  12.          GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA15
  13.         
  14.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13;//PC5
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置成上拉輸入
  16.          GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5

  17.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0設(shè)置成輸入,默認(rèn)下拉         
  19.         GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
  20.         
  21. }
  22. //按鍵處理函數(shù)
  23. //返回按鍵值
  24. //mode:0,不支持連續(xù)按;1,支持連續(xù)按;
  25. //返回值:
  26. //0,沒有任何按鍵按下
  27. //KEY0_PRES,KEY0按下
  28. //KEY1_PRES,KEY1按下
  29. //WKUP_PRES,WK_UP按下
  30. //注意此函數(shù)有響應(yīng)優(yōu)先級,KEY0>KEY1>WK_UP!!
  31. u8 KEY_Scan(u8 mode)
  32. {         
  33.         static u8 key_up=1;//按鍵按松開標(biāo)志
  34.         if(mode)key_up=1;  //支持連按                  
  35.         if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
  36.         {
  37.                 delay_ms(10);//去抖動
  38.                 key_up=0;
  39.                 if(KEY0==0)return KEY0_PRES;
  40.                 else if(KEY1==0)return KEY1_PRES;
  41.                 else if(WK_UP==1)return WKUP_PRES;
  42.         }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;              
  43.         return 0;// 無按鍵按下
  44. }
復(fù)制代碼
這里因為喔只有一個sg90所以我只在WK_UP按鍵的中斷函數(shù)中加入了pwm舵機函數(shù),其它的按鍵大家可以加入其它的外設(shè)來達(dá)到按鍵控制外設(shè)的目的。
  1. #include "exti.h"
  2. #include "led.h"
  3. #include "key.h"
  4. #include "delay.h"
  5. #include "usart.h"
  6. #include "pwm.h"

  7.          


  8. //外部中斷初始化函數(shù)
  9. void EXTIX_Init(void)
  10. {

  11.            EXTI_InitTypeDef EXTI_InitStructure;
  12.            NVIC_InitTypeDef NVIC_InitStructure;

  13.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中斷,需要使能AFIO時鐘

  14.           KEY_Init();//初始化按鍵對應(yīng)io模式
  15.           PWM_Init();

  16.     //GPIOC.1 中斷線以及中斷初始化配置
  17.           GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource1);

  18.           EXTI_InitStructure.EXTI_Line=EXTI_Line1;
  19.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
  20.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿觸發(fā)
  21.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  22.           EXTI_Init(&EXTI_InitStructure);                 //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器

  23.     //GPIOC.13          中斷線以及中斷初始化配置
  24.           GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13);

  25.           EXTI_InitStructure.EXTI_Line=EXTI_Line13;
  26.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
  27.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  28.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  29.           EXTI_Init(&EXTI_InitStructure);                  //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器

  30.     //GPIOA.0          中斷線以及中斷初始化配置
  31.           GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

  32.            EXTI_InitStructure.EXTI_Line=EXTI_Line0;
  33.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
  34.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  35.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  36.           EXTI_Init(&EXTI_InitStructure);                //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器



  37.           NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                        //使能按鍵所在的外部中斷通道
  38.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //搶占優(yōu)先級2
  39.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                                        //子優(yōu)先級1
  40.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中斷通道
  41.           NVIC_Init(&NVIC_InitStructure);            //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
  42.                
  43.                 NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                        //使能按鍵所在的外部中斷通道
  44.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //搶占優(yōu)先級2,
  45.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;                                        //子優(yōu)先級1
  46.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中斷通道
  47.           NVIC_Init(&NVIC_InitStructure);


  48.            NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                        //使能按鍵所在的外部中斷通道
  49.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //搶占優(yōu)先級2,
  50.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;                                        //子優(yōu)先級1
  51.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中斷通道
  52.           NVIC_Init(&NVIC_InitStructure);

  53. }


  54. void EXTI0_IRQHandler(void)
  55. {
  56.   delay_ms(10);    //消抖
  57.         if(WK_UP==1)
  58.         {         
  59.                 LED0=!LED0;
  60.                 LED1=!LED1;        
  61.                 pwm();
  62.         }
  63.         EXTI_ClearITPendingBit(EXTI_Line0);  //清除EXTI0線路掛起位
  64. }
  65. void EXTI1_IRQHandler(void)
  66. {                        
  67.         delay_ms(10);   //消抖                        
  68.         if(KEY0==0)        {
  69.                 LED0=!LED0;
  70.         }
  71.           EXTI_ClearITPendingBit(EXTI_Line1);    //清除LINE5上的中斷標(biāo)志位  
  72. }


  73. void EXTI15_10_IRQHandler(void)
  74. {
  75.   delay_ms(10);    //消抖                        
  76.   if(KEY1==0)        {
  77.                 LED1=!LED1;
  78.         }
  79.          EXTI_ClearITPendingBit(EXTI_Line13);  //清除LINE15線路掛起位
  80. }
復(fù)制代碼
因為篇幅的限制,大家可以自行下載源碼查看。
51黑下載: 按鍵控制舵機.7z (186.19 KB, 下載次數(shù): 109)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:953725 發(fā)表于 2021-7-16 10:20 | 只看該作者
舵機自增的程序呢?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本不卡免费新一二三区 | 亚洲精品一区在线观看 | 韩日一区二区 | 91 久久 | 国产真实乱对白精彩久久小说 | 久久爱黑人激情av摘花 | 欧美国产中文 | 欧美日韩在线精品 | 夜夜骑首页 | 自拍偷拍亚洲一区 | 亚洲成人网在线 | 国产玖玖 | 9999国产精品欧美久久久久久 | 久久青视频| 成人国产在线视频 | 91免费在线播放 | 乱码av午夜噜噜噜噜动漫 | 日韩在线一区二区 | 亚洲国产成人精品在线 | 国产精品一区一区 | 欧美网址在线观看 | 天堂色网 | www97影院| 精品国产一区二区国模嫣然 | 欧美在线视频一区二区 | 国产精品欧美日韩 | 成人免费在线观看视频 | 日韩精品免费 | 欧美在线观看一区 | 中文精品视频 | 蜜桃视频在线观看免费视频网站www | 国产精品中文字幕在线 | 免费看片在线播放 | 91久久久久 | 黑人巨大精品欧美一区二区免费 | 99精品国产一区二区青青牛奶 | 国产精品一区二区在线 | 日本精品久久久久久久 | 国产精品视频一二三区 | 99精品一区二区 | 久久33|