目录
c语言实现流水灯
led.h
#ifndef __LED_H__
#define __LED_H__
//gpio寄存器
typedef struct{
volatile unsigned int MODER;
volatile unsigned int OTYPER;
volatile unsigned int OSPEEDR;
volatile unsigned int PUPDR;
volatile unsigned int IDR;
volatile unsigned int ODR;
volatile unsigned int BSRR;
}gpio_t;
//GPIOE和GPIOF寄存器宏定义
#define GPIOE (*(gpio_t *)0x50006000)
#define GPIOF (*(gpio_t *)0x50007000)
//led灯1初始化
void led1_init();
//led灯2初始化
void led2_init();
//led灯3初始化
void led3_init();
//led灯1控制
void led1_ctl(int flag);
//led灯2控制
void led2_ctl(int flag);
//led灯3控制
void led3_ctl(int flag);
#endif
led.c
#include "led.h"
//led灯1初始化
void led1_init(){
//配置为输出模式
GPIOE.MODER &= (~(0x3<<20));
GPIOE.MODER |= (0x1<<20);
//配置为推挽输出
GPIOE.OTYPER &= (~(0x1<<10));
//配置低速输出
GPIOE.OSPEEDR &= (~(0x3<<20));
//配置为无上拉下拉电阻
GPIOE.PUPDR &= (~(0x3<<20));
}
//led灯2初始化
void led2_init(){
//配置为输出模式
GPIOF.MODER &= (~(0x3<<20));
GPIOF.MODER |= (0x1<<20);
//配置为推挽输出
GPIOF.OTYPER &= (~(0x1<<10));
//配置低速输出
GPIOF.OSPEEDR &= (~(0x3<<20));
//配置为无上拉下拉电阻
GPIOF.PUPDR &= (~(0x3<<20));
}
//led灯3初始化
void led3_init(){
//配置为输出模式
GPIOE.MODER &= (~(0x3<<16));
GPIOE.MODER |= (0x1<<16);
//配置为推挽输出
GPIOE.OTYPER &= (~(0x1<<8));
//配置低速输出
GPIOE.OSPEEDR &= (~(0x3<<16));
//配置为无上拉下拉电阻
GPIOE.PUPDR &= (~(0x3<<16));
}
//led灯1控制
void led1_ctl(int flag){
if(flag==1){
GPIOE.ODR |= (0x1<<10);
}else if(flag==0){
GPIOE.ODR &= (~(0x1<<10));
}
}
//led灯2控制
void led2_ctl(int flag){
if(flag==1){
GPIOF.ODR |= (0x1<<10);
}else if(flag==0){
GPIOF.ODR &= (~(0x1<<10));
}
}
//led灯3控制
void led3_ctl(int flag){
if(flag==1){
GPIOE.ODR |= (0x1<<8);
}else if(flag==0){
GPIOE.ODR &= (~(0x1<<8));
}
}
main.c
#include "gpio.h"
#include "led.h"
//延时函数
void delay(){
for(int i=0;i<500;i++){
for(int j=0;j<2000;j++){
}
}
}
int main()
{
//使能PE、PF时钟
*((unsigned int *)0x50000A28) |= (0x3<<4);
led1_init();
led2_init();
led3_init();
//配置寄存器
while(1){
//led1亮
led1_ctl(1);
led2_ctl(0);
led3_ctl(0);
delay();
//led2亮
led1_ctl(0);
led2_ctl(1);
led3_ctl(0);
delay();
//led3亮
led1_ctl(0);
led2_ctl(0);
led3_ctl(1);
delay();
}
return 0;
}