欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32使用寄存器做一個流水燈

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:945385 發(fā)表于 2021-6-28 11:23 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
使用寄存器方式,用stm32做一個流水燈。
硬件:stm32f103R6,一個按鍵,5個LED燈。
功能:按鍵可以實現(xiàn)左移、右移、從中間往兩邊移動。

原理圖:


波形仿真:
  1. 代碼:
  2. #include "stm32f10x.h"


  3. /**
  4.   * @brief  延時函數(shù)
  5.   * @param  time :X ms
  6.   * @retval none
  7.   */
  8. void delay_ms(u16 time)
  9. {   
  10.    u16 i=0;  
  11.    while(time--)
  12.    {
  13.       i=12000;  //自己定義
  14.       while(i--) ;   
  15.    }
  16. }

  17. /**
  18.   * @brief  LED初始化
  19.   * @param  none
  20.   * @retval none
  21.   */
  22. void LED_Init(void)
  23. {
  24.         RCC->APB2ENR|=1<<4;    //使能PORTC時鐘                    
  25.         GPIOC->CRL &= 0xFFF00000;
  26.         GPIOC->CRL |= 0x00033333;//PC0-PC4 推挽輸出
  27.         
  28.     GPIOC->ODR |= 0x0000001F;      //PC0-PC4 輸出高,燈關(guān)閉狀態(tài)                                                                          
  29. }

  30. /**
  31.   * @brief  按鍵初始化
  32.   * @param  none
  33.   * @retval none
  34.   */
  35. void KEY_Init(void)
  36. {
  37.         RCC->APB2ENR|=1<<3;                    //使能PORTB時鐘
  38.         GPIOB->CRL &= 0xFFFFF000;
  39.         GPIOB->CRL |= 0x00000888;        //PB0-PB2 上拉輸入
  40.         GPIOB->ODR |= 1<<0;
  41. }

  42. /**
  43.   * @brief  流水燈左移
  44.   * @param  none
  45.   * @retval none
  46.   */
  47. void LED_MoveLeft(void)
  48. {
  49.         GPIOC->ODR |= 0x0000001F;      //燈全部關(guān)閉
  50.         delay_ms(10);
  51.         
  52.         GPIOC->ODR &= 0xFFFFFFEF;           //右邊第一個LED亮
  53.         delay_ms(10);
  54.         
  55.         GPIOC->ODR &= 0xFFFFFFF7;           //右邊第二個LED亮
  56.         delay_ms(10);
  57.         
  58.         GPIOC->ODR &= 0xFFFFFFFB;           //右邊第三個LED亮
  59.         delay_ms(10);
  60.         
  61.         GPIOC->ODR &= 0xFFFFFFFD;           //右邊第四個LED亮
  62.         delay_ms(10);
  63.         
  64.         GPIOC->ODR &= 0xFFFFFFFE;           //右邊第五個LED亮
  65.         delay_ms(10);
  66. }

  67. /**
  68.   * @brief  流水燈右移
  69.   * @param  none
  70.   * @retval none
  71.   */
  72. void LED_MoveRight(void)
  73. {
  74.         GPIOC->ODR |= 0x0000001F;      //燈全部關(guān)閉
  75.         delay_ms(10);
  76.         
  77.         GPIOC->ODR &= 0xFFFFFFFE;           //右邊第五個LED亮
  78.         delay_ms(10);
  79.         
  80.         GPIOC->ODR &= 0xFFFFFFFD;           //右邊第四個LED亮
  81.         delay_ms(10);
  82.         
  83.         GPIOC->ODR &= 0xFFFFFFFB;           //右邊第三個LED亮
  84.         delay_ms(10);
  85.         
  86.         GPIOC->ODR &= 0xFFFFFFF7;           //右邊第二個LED亮
  87.         delay_ms(10);
  88.         
  89.         GPIOC->ODR &= 0xFFFFFFEF;           //右邊第一個LED亮
  90.         delay_ms(10);
  91. }

  92. /**
  93.   * @brief  流水燈從中間往兩邊移動
  94.   * @param  none
  95.   * @retval none
  96.   */
  97. void LED_MoveToSide(void)
  98. {
  99.         GPIOC->ODR |= 0x0000001F;      //燈全部關(guān)閉
  100.         delay_ms(10);
  101.         
  102.         GPIOC->ODR &= 0xFFFFFFFB;           //中間燈亮
  103.         delay_ms(10);
  104.         
  105.         GPIOC->ODR &= 0xFFFFFFF1;           //中間燈亮
  106.         delay_ms(10);
  107.         
  108.         GPIOC->ODR &= 0xFFFFFFE0;           //最外燈亮   
  109.         delay_ms(10);        
  110. }

  111. /**
  112.   * @brief  主函數(shù)
  113.   * @param  none
  114.   * @retval none
  115.   */
  116. int main(void)
  117. {        
  118.         u16 t;
  119.         static u8 i=0;
  120.         LED_Init();                //LED初始化
  121.         KEY_Init();                //按鍵初始化
  122.         
  123.         while(1)
  124.         {
  125.                 t=GPIOB->IDR;
  126.                 if(!(t & 0x0001))
  127.                 {
  128.                         i++;
  129.                         if(i>3)
  130.                                 i=0;
  131.                         switch(i)
  132.                         {
  133.                                 case 1: LED_MoveLeft();//左移
  134.                                         break;
  135.                                 case 2:        LED_MoveToSide();//兩邊移
  136.                                         break;
  137.                                 case 3:LED_MoveRight();//右移
  138.                                         break;
  139.                                 default:break;
  140.                         }
  141.                 }
  142.                 //若要使用keil的邏輯示波器,取消延時注釋,更方便觀測波形
  143.                 //delay_ms(200);        //延時200ms
  144.         }
  145. }

復(fù)制代碼


評分

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

查看全部評分

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

使用道具 舉報

8#
ID:766282 發(fā)表于 2021-7-4 12:16 | 只看該作者
能不能用8腳芯片做?
回復(fù)

使用道具 舉報

7#
ID:927615 發(fā)表于 2021-6-30 22:23 來自觸屏版 | 只看該作者
編譯出錯,不會搞呀
回復(fù)

使用道具 舉報

6#
無效樓層,該帖已經(jīng)被刪除
5#
ID:857869 發(fā)表于 2021-6-30 18:10 | 只看該作者
能不能用8腳芯片做?
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
板凳
ID:927615 發(fā)表于 2021-6-29 12:04 來自觸屏版 | 只看該作者
能不能用8腳芯片做?
回復(fù)

使用道具 舉報

沙發(fā)
ID:927615 發(fā)表于 2021-6-29 12:03 來自觸屏版 | 只看該作者
現(xiàn)在主要芯片太貴
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表