用stm32f103c8t6写16脚LCD1602程序
时间: 2023-09-06 10:12:02 浏览: 73
首先,需要连接STM32F103C8T6的16脚LCD1602的引脚,以下是引脚连接表:
| LCD1602引脚 | STM32F103C8T6引脚 |
| ----------- | ----------------- |
| RS | PB12 |
| RW | PB13 |
| EN | PB14 |
| D4 | PB15 |
| D5 | PB6 |
| D6 | PB7 |
| D7 | PB8 |
接下来,需要编写程序来控制LCD显示。以下是一个简单的程序,可以在16脚LCD1602上显示“Hello, World!”:
```c
#include "stm32f10x.h"
#include "delay.h"
#define RS GPIO_Pin_12
#define RW GPIO_Pin_13
#define EN GPIO_Pin_14
#define D4 GPIO_Pin_15
#define D5 GPIO_Pin_6
#define D6 GPIO_Pin_7
#define D7 GPIO_Pin_8
void LCD_Init(void);
void LCD_WriteCommand(uint8_t command);
void LCD_WriteData(uint8_t data);
void LCD_WriteString(char *string);
void delay_ms(uint16_t ms);
int main(void)
{
LCD_Init();
LCD_WriteString("Hello, World!");
while(1);
return 0;
}
void LCD_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = RS | RW | EN | D4 | D5 | D6 | D7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
delay_ms(20);
LCD_WriteCommand(0x02);
LCD_WriteCommand(0x28);
LCD_WriteCommand(0x0C);
LCD_WriteCommand(0x06);
LCD_WriteCommand(0x01);
delay_ms(2);
}
void LCD_WriteCommand(uint8_t command)
{
GPIO_ResetBits(GPIOB, RS);
GPIO_ResetBits(GPIOB, RW);
GPIO_SetBits(GPIOB, EN);
GPIO_Write(GPIOB, (command << 8) | (GPIO_ReadOutputData(GPIOB) & 0x00FF));
delay_ms(1);
GPIO_ResetBits(GPIOB, EN);
delay_ms(1);
}
void LCD_WriteData(uint8_t data)
{
GPIO_SetBits(GPIOB, RS);
GPIO_ResetBits(GPIOB, RW);
GPIO_SetBits(GPIOB, EN);
GPIO_Write(GPIOB, (data << 8) | (GPIO_ReadOutputData(GPIOB) & 0x00FF));
delay_ms(1);
GPIO_ResetBits(GPIOB, EN);
delay_ms(1);
}
void LCD_WriteString(char *string)
{
while(*string)
{
LCD_WriteData(*string++);
}
}
void delay_ms(uint16_t ms)
{
uint16_t i, j;
for(i = 0; i < ms; i++)
{
for(j = 0; j < 1000; j++);
}
}
```
需要注意的是,以上代码中的`delay.h`是一个延时函数库,需要自行编写或引用其他库。
此外,还需要在工程中添加STM32F10x标准外设库和CMSIS库,并将以上代码编译下载到STM32F103C8T6中。
阅读全文