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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

stm32使用寄存器做一個(gè)流水燈

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
使用寄存器方式,用stm32做一個(gè)流水燈。
硬件:stm32f103R6,一個(gè)按鍵,5個(gè)LED燈。
功能:按鍵可以實(shí)現(xiàn)左移、右移、從中間往兩邊移動(dòng)。

原理圖:


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


  3. /**
  4.   * @brief  延時(shí)函數(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時(shí)鐘                    
  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時(shí)鐘
  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;           //右邊第一個(gè)LED亮
  53.         delay_ms(10);
  54.         
  55.         GPIOC->ODR &= 0xFFFFFFF7;           //右邊第二個(gè)LED亮
  56.         delay_ms(10);
  57.         
  58.         GPIOC->ODR &= 0xFFFFFFFB;           //右邊第三個(gè)LED亮
  59.         delay_ms(10);
  60.         
  61.         GPIOC->ODR &= 0xFFFFFFFD;           //右邊第四個(gè)LED亮
  62.         delay_ms(10);
  63.         
  64.         GPIOC->ODR &= 0xFFFFFFFE;           //右邊第五個(gè)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;           //右邊第五個(gè)LED亮
  78.         delay_ms(10);
  79.         
  80.         GPIOC->ODR &= 0xFFFFFFFD;           //右邊第四個(gè)LED亮
  81.         delay_ms(10);
  82.         
  83.         GPIOC->ODR &= 0xFFFFFFFB;           //右邊第三個(gè)LED亮
  84.         delay_ms(10);
  85.         
  86.         GPIOC->ODR &= 0xFFFFFFF7;           //右邊第二個(gè)LED亮
  87.         delay_ms(10);
  88.         
  89.         GPIOC->ODR &= 0xFFFFFFEF;           //右邊第一個(gè)LED亮
  90.         delay_ms(10);
  91. }

  92. /**
  93.   * @brief  流水燈從中間往兩邊移動(dòng)
  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的邏輯示波器,取消延時(shí)注釋?zhuān)奖阌^測(cè)波形
  143.                 //delay_ms(200);        //延時(shí)200ms
  144.         }
  145. }

復(fù)制代碼


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:927615 發(fā)表于 2021-6-29 12:03 來(lái)自手機(jī) | 只看該作者
現(xiàn)在主要芯片太貴
回復(fù)

使用道具 舉報(bào)

板凳
ID:927615 發(fā)表于 2021-6-29 12:04 來(lái)自手機(jī) | 只看該作者
能不能用8腳芯片做?
回復(fù)

使用道具 舉報(bào)

地板
ID:857869 發(fā)表于 2021-6-30 18:10 | 只看該作者
能不能用8腳芯片做?
回復(fù)

使用道具 舉報(bào)

5#
ID:927615 發(fā)表于 2021-6-30 22:23 來(lái)自手機(jī) | 只看該作者
編譯出錯(cuò),不會(huì)搞呀
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91久久夜色精品国产网站 | 日韩一区二区在线播放 | 操操日 | 91国内精精品久久久久久婷婷 | 国产区视频在线观看 | 国产三级电影网站 | 国产精品福利在线 | 国产伦精品一区二区三区四区视频 | av天天看 | 国产成人午夜精品影院游乐网 | 欧美在线a | 亚洲精品一区二区三区四区高清 | 中国黄色毛片视频 | 成人免费视频网站在线看 | 欧美日韩在线视频一区 | 在线小视频 | 成人精品鲁一区一区二区 | 精品无码久久久久久国产 | 成人av一区二区三区 | 亚洲精品亚洲人成人网 | 日韩不卡三区 | 99热热 | 97在线播放| 亚洲精品视频在线播放 | 欧美精品一二三 | 国产伦精品一区二区三区精品视频 | 有码一区| 久久亚洲一区二区三区四区 | 81精品国产乱码久久久久久 | 精品久久久久久亚洲精品 | 国产福利在线视频 | 免费播放一级片 | 精品视频999| 九九综合| 国产伊人久久久 | 日韩av第一页| 国产女人与拘做受免费视频 | 日韩二区 | 久久精品亚洲欧美日韩久久 | 国产乱一区二区三区视频 | 国产高清精品一区 |