.h文件中#ifndef __OLED_H #define __OLED_H #endif 有什么用
时间: 2024-04-19 16:24:00 浏览: 145
这段代码是用于防止重复包含头文件的机制。在编写程序时,我们可能会在多个地方包含同一个头文件,如果没有防止重复包含的机制,就会导致编译错误。通过使用#ifndef、#define和#endif组合,可以确保头文件只被包含一次。
具体来说,当第一次包含该头文件时,条件#ifndef __OLED_H会为真,定义了__OLED_H宏,并且将头文件的内容包含进来。当再次包含该头文件时,条件#ifndef __OLED_H会为假,因此不会再次包含头文件的内容,避免了重复定义错误。
相关问题
基于stm32f103zet6,写一个AD转换程序,要求精度高,结果显示在4脚OLED屏幕上,含有OLED.H库和Delay.h库,分别如下#ifndef __OLED_H #define __OLED_H void OLED_Init(void); //OLED初始化 void OLED_Clear(void); //清屏 void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); //第()行、第()列、显示'()'字符 void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); //第()行、第()列、显示"()"字符串 void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); //第()行、第()列、显示()一串数字、()数字个数 void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);//第()行、第()列、显示()一串有符号的数字、()数字个数 void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//第()行、第()列、显示()16进制数、()数字个数 void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//第()行、第()列、显示()2进制数、()数字个数、、 #endif #ifndef __DELAY_H #define __DELAY_H void Delay_us(uint32_t us); void Delay_ms(uint32_t ms); void Delay_s(uint32_t s); #endif提供完整程序
抱歉,但我无法直接提供完整的程序,因为我只能提供文字回复。不过,我可以给你一个基于STM32F103ZET6的AD转换程序的示例代码,你可以根据你的需求进行修改和适配。
```c
#include "stm32f10x.h"
#include "OLED.h"
#include "Delay.h"
void ADC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 使能ADC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// 配置ADC引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 使用PA0作为ADC输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ADC配置
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 非扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 不使用外部触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; // 转换通道数量为1
ADC_Init(ADC1, &ADC_InitStructure);
// 使能ADC
ADC_Cmd(ADC1, ENABLE);
// ADC校准
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
uint16_t ADC_Read(void)
{
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
// 启动ADC转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// 等待转换完成
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
// 获取转换结果
return ADC_GetConversionValue(ADC1);
}
int main(void)
{
// 初始化OLED屏幕和延时函数
OLED_Init();
Delay_Init();
// 初始化ADC
ADC_Init();
uint16_t adValue;
while (1)
{
adValue = ADC_Read();
// 将AD转换结果显示在OLED屏幕上
OLED_Clear();
OLED_ShowNum(0, 0, adValue, 4); // 显示4位数字
Delay_ms(500);
}
}
```
这段代码假设你已经将OLED和AD连接到了正确的引脚上,并且已经正确配置了相应的引脚和外设时钟。你需要根据你的具体硬件连接和使用的库文件进行适当的修改。
希望这个示例代码能对你有所帮助!如果你有任何其他问题,请随时提问。
分别给出"bsp_led.h"bsp_usart.hbsp_oled.hbsp_wifi.hbsp_hcsr04.h
好的,以下是这些头文件的简单示例代码:
bsp_led.h:
```
#ifndef __BSP_LED_H__
#define __BSP_LED_H__
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED1_GPIO_PORT GPIOB
#define LED1_GPIO_PIN GPIO_Pin_0
#define LED2_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED2_GPIO_PORT GPIOB
#define LED2_GPIO_PIN GPIO_Pin_1
void BSP_LED_Init(void);
void BSP_LED_Toggle(uint16_t led);
#endif /* __BSP_LED_H__ */
```
bsp_usart.h:
```
#ifndef __BSP_USART_H__
#define __BSP_USART_H__
#define USART1_GPIO_CLK RCC_APB2Periph_GPIOA
#define USART1_GPIO_PORT GPIOA
#define USART1_GPIO_TX_PIN GPIO_Pin_9
#define USART1_GPIO_RX_PIN GPIO_Pin_10
#define USART1_CLK RCC_APB2Periph_USART1
#define USART1_BAUDRATE 115200
void BSP_USART_Init(void);
void BSP_USART_SendByte(uint8_t byte);
void BSP_USART_SendString(char* str);
#endif /* __BSP_USART_H__ */
```
bsp_oled.h:
```
#ifndef __BSP_OLED_H__
#define __BSP_OLED_H__
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
void BSP_OLED_Init(void);
void BSP_OLED_ShowString(uint8_t x, uint8_t y, char *str);
#endif /* __BSP_OLED_H__ */
```
bsp_wifi.h:
```
#ifndef __BSP_WIFI_H__
#define __BSP_WIFI_H__
#define WIFI_SSID "your_ssid"
#define WIFI_PASSWD "your_passwd"
void BSP_WIFI_Init(void);
void BSP_WIFI_Connect(void);
#endif /* __BSP_WIFI_H__ */
```
bsp_hcsr04.h:
```
#ifndef __BSP_HC_SR04_H__
#define __BSP_HC_SR04_H__
#define HCSR04_GPIO_CLK RCC_APB2Periph_GPIOB
#define HCSR04_GPIO_PORT GPIOB
#define HCSR04_GPIO_TRIG_PIN GPIO_Pin_0
#define HCSR04_GPIO_ECHO_PIN GPIO_Pin_1
void BSP_HC_SR04_Init(void);
uint32_t BSP_HC_SR04_GetDistance(void);
#endif /* __BSP_HC_SR04_H__ */
```
这些头文件定义了相关的宏定义和函数声明,具体的实现需要根据实际硬件和需求进行编写。
阅读全文