欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stm32使用寄存器做一個流水燈
[打印本頁]
作者:
yea1
時間:
2021-6-28 11:23
標題:
stm32使用寄存器做一個流水燈
使用寄存器方式,用stm32做一個流水燈。
硬件:stm32f103R6,一個按鍵,5個LED燈。
功能:按鍵可以實現左移、右移、從中間往兩邊移動。
原理圖:
1.png
(70.27 KB, 下載次數: 90)
下載附件
2021-6-28 15:05 上傳
波形仿真:
代碼:
#include "stm32f10x.h"
/**
* @brief 延時函數
* @param time :X ms
* @retval none
*/
void delay_ms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000; //自己定義
while(i--) ;
}
}
/**
* @brief LED初始化
* @param none
* @retval none
*/
void LED_Init(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC時鐘
GPIOC->CRL &= 0xFFF00000;
GPIOC->CRL |= 0x00033333;//PC0-PC4 推挽輸出
GPIOC->ODR |= 0x0000001F; //PC0-PC4 輸出高,燈關閉狀態
}
/**
* @brief 按鍵初始化
* @param none
* @retval none
*/
void KEY_Init(void)
{
RCC->APB2ENR|=1<<3; //使能PORTB時鐘
GPIOB->CRL &= 0xFFFFF000;
GPIOB->CRL |= 0x00000888; //PB0-PB2 上拉輸入
GPIOB->ODR |= 1<<0;
}
/**
* @brief 流水燈左移
* @param none
* @retval none
*/
void LED_MoveLeft(void)
{
GPIOC->ODR |= 0x0000001F; //燈全部關閉
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFEF; //右邊第一個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFF7; //右邊第二個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFB; //右邊第三個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFD; //右邊第四個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFE; //右邊第五個LED亮
delay_ms(10);
}
/**
* @brief 流水燈右移
* @param none
* @retval none
*/
void LED_MoveRight(void)
{
GPIOC->ODR |= 0x0000001F; //燈全部關閉
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFE; //右邊第五個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFD; //右邊第四個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFB; //右邊第三個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFF7; //右邊第二個LED亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFEF; //右邊第一個LED亮
delay_ms(10);
}
/**
* @brief 流水燈從中間往兩邊移動
* @param none
* @retval none
*/
void LED_MoveToSide(void)
{
GPIOC->ODR |= 0x0000001F; //燈全部關閉
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFFB; //中間燈亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFF1; //中間燈亮
delay_ms(10);
GPIOC->ODR &= 0xFFFFFFE0; //最外燈亮
delay_ms(10);
}
/**
* @brief 主函數
* @param none
* @retval none
*/
int main(void)
{
u16 t;
static u8 i=0;
LED_Init(); //LED初始化
KEY_Init(); //按鍵初始化
while(1)
{
t=GPIOB->IDR;
if(!(t & 0x0001))
{
i++;
if(i>3)
i=0;
switch(i)
{
case 1: LED_MoveLeft();//左移
break;
case 2: LED_MoveToSide();//兩邊移
break;
case 3:LED_MoveRight();//右移
break;
default:break;
}
}
//若要使用keil的邏輯示波器,取消延時注釋,更方便觀測波形
//delay_ms(200); //延時200ms
}
}
復制代碼
作者:
heikeji2021
時間:
2021-6-29 12:03
現在主要芯片太貴
作者:
heikeji2021
時間:
2021-6-29 12:04
能不能用8腳芯片做?
作者:
parkine
時間:
2021-6-30 18:10
能不能用8腳芯片做?
作者:
heikeji2021
時間:
2021-6-30 22:23
編譯出錯,不會搞呀
作者:
512-DZ
時間:
2021-7-4 12:16
能不能用8腳芯片做?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1