以HAL库为stm32编写让LCD1602显示数字的代码
时间: 2024-03-25 22:37:36 浏览: 14
好的,以下是使用HAL库为stm32编写让LCD1602显示数字的代码:
```c
#include "main.h"
#include "stdio.h"
#include "string.h"
#define RS_Pin GPIO_PIN_8
#define EN_Pin GPIO_PIN_9
void LCD_Init(void);
void LCD_Cmd(char);
void LCD_Data(char);
void LCD_String(char*);
void delay_ms(int);
int main(void)
{
HAL_Init();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = RS_Pin | EN_Pin | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
LCD_Init();
while (1)
{
int num = 1234;
char str[10];
sprintf(str, "%d", num);
LCD_String(str);
delay_ms(1000);
}
}
void LCD_Init()
{
delay_ms(15);
LCD_Cmd(0x30);
delay_ms(5);
LCD_Cmd(0x30);
delay_ms(1);
LCD_Cmd(0x30);
delay_ms(1);
LCD_Cmd(0x38);
LCD_Cmd(0x06);
LCD_Cmd(0x0C);
LCD_Cmd(0x01);
delay_ms(3);
}
void LCD_Cmd(char cmd)
{
HAL_GPIO_WritePin(GPIOB, RS_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All & (~RS_Pin), cmd << 8);
HAL_GPIO_WritePin(GPIOB, EN_Pin, GPIO_PIN_SET);
delay_ms(1);
HAL_GPIO_WritePin(GPIOB, EN_Pin, GPIO_PIN_RESET);
delay_ms(3);
}
void LCD_Data(char data)
{
HAL_GPIO_WritePin(GPIOB, RS_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All & (~RS_Pin), data << 8);
HAL_GPIO_WritePin(GPIOB, EN_Pin, GPIO_PIN_SET);
delay_ms(1);
HAL_GPIO_WritePin(GPIOB, EN_Pin, GPIO_PIN_RESET);
delay_ms(3);
}
void LCD_String(char* str)
{
while (*str)
{
LCD_Data(*str++);
}
}
void delay_ms(int n)
{
HAL_Delay(n);
}
```
在此代码中,我们使用了HAL库中提供的GPIO头文件和延时函数HAL_Delay。我们将LCD1602连接到stm32f103c8t6的GPIOB引脚,其中RS连接到GPIO_PIN_8,EN连接到GPIO_PIN_9。
在主函数中,将数字1234转换成字符串,再通过LCD_String函数将其显示在LCD1602上。程序中使用了delay_ms函数提供的延时功能,以确保LCD1602的正常显示。