學習單片機都要學習流水燈,因爲流水燈比較簡單,易於實現,效果也比較好呈現。
這裏我用的單片機型號爲STM32F103VET
8個LED燈接在了PA口的低八位。
代碼實現如下:
(注: 對於新手來說,暫時先不要分文件寫代碼,我們將功能都寫在了main函數中,便於大家理解,後期要將程序模塊化)
/*
作者:XiaoCaiDaYong
時間:2019.9.26
功能:流水燈
接線:PA0-PA7接在LED1-LED8上
實現步驟:
1.開啓GPIOA時鐘
2.設置GPIOA指定口的工作模式(推輓輸出,速度爲50MHz)
3.數據的輸出
*/
#include "stm32f10x.h" // Device header
unsigned char led[]={0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01};
void delay(void); // 函數的聲明
int main(void)
{
int n;
unsigned char temp = 0X01;
RCC_DeInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); // 開啓時鐘
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_DeInit(GPIOA); // 將外設GPIOA 寄存器重設置爲缺省值
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All; // 選中所有管腳,其實只用了低八位管腳
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 推輓輸出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
while(1)
{
temp = 0X01;
for(n=0;n<8;n++)
{
GPIOA->ODR = temp; // 寄存器實現,也可以用 GPIO_Write()函數實現
temp = temp<<1;
delay();
}
}
}
void delay(void)
{
int i,j;
for(i=0;i<400;i++)
{
for(j=0;j<400;j++);
}
}
效果如下: