stm32f103lcd1602代码
时间: 2023-08-01 17:08:23 浏览: 121
stm32f103实现lcd1602显示Proteus仿真+代码
当然,这里是一个基于STM32F103C8T6开发板的示例代码,用于驱动LCD1602显示屏:
```c
#include "stm32f10x.h"
#include "delay.h"
#define LCD_GPIO GPIOA
#define LCD_RS GPIO_Pin_0
#define LCD_RW GPIO_Pin_1
#define LCD_EN GPIO_Pin_2
#define LCD_D4 GPIO_Pin_4
#define LCD_D5 GPIO_Pin_5
#define LCD_D6 GPIO_Pin_6
#define LCD_D7 GPIO_Pin_7
void LCD_Init(void);
void LCD_SendCmd(uint8_t cmd);
void LCD_SendData(uint8_t data);
void LCD_SendString(char* str);
void LCD_SetCursor(uint8_t row, uint8_t col);
void delay_ms(uint32_t time_ms) {
while(time_ms--) {
delay_us(1000);
}
}
void GPIO_Configuration(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LCD_RS | LCD_RW | LCD_EN | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_GPIO, &GPIO_InitStructure);
}
void LCD_Write4Bits(uint8_t data) {
GPIO_WriteBit(LCD_GPIO, LCD_D4, (BitAction)((data >> 0) & 0x01));
GPIO_WriteBit(LCD_GPIO, LCD_D5, (BitAction)((data >> 1) & 0x01));
GPIO_WriteBit(LCD_GPIO, LCD_D6, (BitAction)((data >> 2) & 0x01));
GPIO_WriteBit(LCD_GPIO, LCD_D7, (BitAction)((data >> 3) & 0x01));
}
void LCD_Send(uint8_t data, uint8_t rs) {
GPIO_WriteBit(LCD_GPIO, LCD_RS, (BitAction)rs);
GPIO_WriteBit(LCD_GPIO, LCD_RW, Bit_RESET);
LCD_Write4Bits(data >> 4);
GPIO_SetBits(LCD_GPIO,LCD_EN);
delay_us(1);
GPIO_ResetBits(LCD_GPIO,LCD_EN);
delay_us(1);
LCD_Write4Bits(data & 0x0F);
GPIO_SetBits(LCD_GPIO,LCD_EN);
delay_us(1);
GPIO_ResetBits(LCD_GPIO,LCD_EN);
delay_ms(2);
}
void LCD_Init(void) {
GPIO_Configuration();
delay_ms(100);
LCD_Send(0x03, 0); // Function Set
delay_ms(5);
LCD_Send(0x03, 0); // Function Set
delay_us(100);
LCD_Send(0x03, 0); // Function Set
delay_ms(5);
LCD_Send(0x02, 0); // 4-bit Mode
LCD_SendCmd(0x28); // 2 Lines, 5x8 Font
LCD_SendCmd(0x08); // Display Off
LCD_SendCmd(0x01); // Clear Display
delay_ms(5);
LCD_SendCmd(0x06); // Entry Mode Set
LCD_SendCmd(0x0C); // Display On
}
void LCD_SendCmd(uint8_t cmd) {
LCD_Send(cmd, 0);
}
void LCD_SendData(uint8_t data) {
LCD_Send(data, 1);
}
void LCD_SendString(char* str) {
while (*str) {
LCD_SendData(*str++);
}
}
void LCD_SetCursor(uint8_t row, uint8_t col) {
uint8_t addr = 0x80 + (row * 0x40) + col;
LCD_SendCmd(addr);
}
int main(void) {
LCD_Init();
LCD_SetCursor(0, 0);
LCD_SendString("Hello, World!");
while(1) {
// Your code here
}
}
```
这段代码实现了LCD1602显示屏的基本驱动功能,可以在主函数中使用`LCD_SendString`函数来向显示屏发送字符串。
请注意,这段代码是基于STM32F103C8T6开发板和标准库进行开发的,如果你使用的是其他型号的开发板或不同的开发环境,可能需要进行适当的修改。此外,你还需要提前配置好相关的GPIO引脚和初始化延时函数。
阅读全文