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

2022-9-13 C语言电灯实验,第1张

首先是头文件部分代码 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;

}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2889336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-14
下一篇 2022-09-14

发表评论

登录后才能评论

评论列表(0条)

保存