2022-9-13 C语言电灯实验

首先是头文件部分代码 include/gpio.h

#ifndef __GPIO_H__
#define __GPIO_H__

//1.RCC寄存器封装,用宏定义进行封装

#define   RCC_AHB4ENSTER    *(volatile unsigned int *)0x50000A28
//2.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;

}gpio_t;
#define GPIOE  ((gpio_t *)0x50006000)
#define GPIOF  ((gpio_t *)0x50007000)

/*typedef struct
{
	LED1 =1;
	LED2 =1;
	LED3 =1;

}leds_t;*/


//3.LED1灯初始化

void hal_led1_init();
//4.LED1灯点亮

void hal_led1_on();
//5.LED1灯熄灭

void hal_led1_off();


//3.LED2灯初始化

void hal_led2_init();
//4.LED2灯点亮

void hal_led2_on();
//5.LED2灯熄灭

void hal_led2_off();


//3.LED3灯初始化
void hal_led3_init();
//4.LED3灯点亮

void hal_led3_on();
//5.LED3灯熄灭

void hal_led3_off();



#endif

然后是功能代码部分 src/gpio.c

#include"gpio.h"
//LED1
void hal_led1_init()
{
	RCC_AHB4ENSTER |= (0x1 << 4);
	GPIOE->MODER &=~(0x3 << 20);
	GPIOE->MODER |=(0X1 << 20);
	GPIOE->OTYPER &=~(0X1 << 10);
	GPIOE->OSPEEDR &=~(0x3 << 20);
	GPIOE->PUPDR &=~(0x3 << 20);

}

//LED1亮
void hal_led1_on()
{
	
	GPIOE->ODR |=(0x1 << 10);

}
//LED1灭
void hal_led1_off()
{

	GPIOE->ODR &=~(0x1 << 10);

}

//LED2
 void hal_led2_init()                  
 {                                         
     RCC_AHB4ENSTER |= (0x1 << 5);                   
     GPIOF->MODER &=~(0x3 << 20);           
     GPIOF->MODER |=(0X1 << 20);            
     GPIOF->OTYPER &=~(0X1 << 10);          
     GPIOF->OSPEEDR &=~(0x3 << 20);         
     GPIOF->PUPDR &=~(0x3 << 20);           
                                           
 }                                         
                                           
 //LED2亮                                      
 void hal_led2_on()             
 {                                         
                                           
     GPIOF->ODR |=(0x1 << 10);               
                                           
 }                                         
 //LED2灭                                      
 void hal_led2_off()            
 {                                         
                                           
     GPIOF->ODR &=~(0x1 << 10);             
                                           
 }                                         


//LED3
 void hal_led3_init()
 {
     RCC_AHB4ENSTER |= (0x1 << 4);
     GPIOE->MODER &=~(0x3 << 16);
     GPIOE->MODER |=(0X1 << 16);
     GPIOE->OTYPER &=~(0X1 << 8);
     GPIOE->OSPEEDR &=~(0x3 << 16);
     GPIOE->PUPDR &=~(0x3 << 16);

 }

 //LED3亮
 void hal_led3_on()
 {

     GPIOE->ODR |=(0x1 << 8);

 }
 //LED3灭
 void hal_led3_off()
 {

     GPIOE->ODR &=~(0x1 << 8);
 }

最后是主函数调用部分main.c

#include "gpio.h"

extern void printf(const char *fmt, ...);

void delay_ms(int ms)

{

	int i,j;

	for(i = 0; i < ms;i++)

		for (j = 0; j < 1800; j++);

}





int main()

{

	hal_led1_init(); // LED灯初始化

	hal_led2_init();

	hal_led3_init();

	while(1)

	{

		hal_led1_on();

		hal_led2_on();

		hal_led3_on();

		delay_ms(500);

		hal_led1_off();

		hal_led2_off();

		hal_led3_off();

		delay_ms(500);

	}

	return 0;

}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值