基于stm32的lcd12864代码和接线图
时间: 2023-10-06 22:07:01 浏览: 85
以下是基于STM32的LCD12864接线图和代码示例。
接线图:
| LCD12864 | STM32 |
| :------: | :---: |
| VSS | GND |
| VDD | 3.3V |
| V0 | 调节 |
| RS | PB11 |
| RW | GND |
| E | PB10 |
| DB0-DB7 | PA0-PA7 |
| CS1 | PA8 |
| CS2 | PA9 |
| RST | PA10 |
代码示例:
```c
#include "stm32f10x.h"
#include "lcd12864.h"
void delay_us(u32 us) {
u32 i = 0;
while (us--) {
i = 10;
while (i--) {}
}
}
void lcd_write_cmd(u8 cmd) {
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9);
GPIO_SetBits(GPIOA, GPIO_Pin_10);
GPIO_ResetBits(GPIOA, GPIO_Pin_10);
GPIOA->ODR = cmd;
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
delay_us(5);
}
void lcd_write_data(u8 data) {
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9);
GPIO_SetBits(GPIOA, GPIO_Pin_10);
GPIO_ResetBits(GPIOA, GPIO_Pin_10);
GPIOA->ODR = data;
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
delay_us(5);
}
void lcd_init(void) {
lcd_write_cmd(0x30); // function set
delay_us(40);
lcd_write_cmd(0x0c); // display on, cursor off, blink off
delay_us(40);
lcd_write_cmd(0x01); // clear display
delay_us(2000);
lcd_write_cmd(0x06); // entry mode set
delay_us(40);
}
void lcd_set_xy(u8 x, u8 y) {
if (y == 0) {
lcd_write_cmd(0x80 + x);
} else if (y == 1) {
lcd_write_cmd(0x80 + x + 0x40);
}
}
void lcd_clear(void) {
lcd_write_cmd(0x01); // clear display
delay_us(2000);
}
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
lcd_init();
lcd_set_xy(0, 0);
lcd_write_data('H');
lcd_write_data('e');
lcd_write_data('l');
lcd_write_data('l');
lcd_write_data('o');
lcd_set_xy(6, 1);
lcd_write_data('W');
lcd_write_data('o');
lcd_write_data('r');
lcd_write_data('l');
lcd_write_data('d');
while(1);
}
```
注意:以上代码仅供参考,具体实现方式可能因芯片型号等原因略有不同。