使用c语言实现led灯控制

目录

c语言实现流水灯

led.h 

led.c 

main.c

实验效果


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;
}

实验效果

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值