lcd1602代码 STM32F103C8T6
时间: 2023-07-09 17:51:03 浏览: 105
C8T6_LCM1602K_lcd1602_stm32f103c8t6_
以下是使用STM32F103C8T6控制LCD1602显示器的基本代码:
```c
#include "stm32f10x.h"
#define RS GPIO_Pin_0
#define EN GPIO_Pin_1
#define D4 GPIO_Pin_2
#define D5 GPIO_Pin_3
#define D6 GPIO_Pin_4
#define D7 GPIO_Pin_5
void delay(uint32_t ms) {
for (uint32_t i = 0; i < ms*1000; i++);
}
void lcd_send_nibble(uint8_t data, uint8_t rs) {
GPIO_WriteBit(GPIOA, RS, (rs == 0 ? Bit_RESET : Bit_SET));
GPIO_WriteBit(GPIOA, D4, (data & 0x01) == 0 ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, D5, (data & 0x02) == 0 ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, D6, (data & 0x04) == 0 ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, D7, (data & 0x08) == 0 ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, EN, Bit_SET);
delay(1);
GPIO_WriteBit(GPIOA, EN, Bit_RESET);
}
void lcd_send_byte(uint8_t data, uint8_t rs) {
lcd_send_nibble(data >> 4, rs);
lcd_send_nibble(data & 0x0F, rs);
delay(2);
}
void lcd_init() {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = RS | EN | D4 | D5 | D6 | D7;
gpio.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &gpio);
delay(50);
lcd_send_nibble(0x03, 0);
delay(5);
lcd_send_nibble(0x03, 0);
delay(5);
lcd_send_nibble(0x03, 0);
delay(5);
lcd_send_nibble(0x02, 0);
delay(5);
lcd_send_byte(0x28, 0);
lcd_send_byte(0x08, 0);
lcd_send_byte(0x01, 0);
lcd_send_byte(0x06, 0);
lcd_send_byte(0x0C, 0);
}
void lcd_set_cursor(uint8_t x, uint8_t y) {
uint8_t addr = 0x80;
if (y == 1) {
addr += 0x40;
}
addr += x;
lcd_send_byte(addr, 0);
}
void lcd_send_string(char* str) {
while (*str) {
lcd_send_byte(*str++, 1);
}
}
int main() {
lcd_init();
lcd_set_cursor(0, 0);
lcd_send_string("Hello, world!");
while (1);
}
```
在这个代码中,我们使用了GPIOA的6个输出引脚来控制LCD1602显示器。我们首先定义了这6个引脚的编号,并且定义了一个延时函数用来产生适当的时间延迟。然后,我们定义了两个函数`lcd_send_nibble`和`lcd_send_byte`,用于向LCD发送4位和8位数据。`lcd_init`函数用于初始化LCD显示器。在主函数中,我们首先初始化LCD显示器,然后设置光标位置并将字符串发送到显示器上。
阅读全文