#include "stm32f10x.h"
#include "delay.h"
#define LCD_DATA GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
#define LCD_DATA_PORT GPIOA
#define LCD_CMD GPIO_Pin_8
#define LCD_CMD_PORT GPIOB
#define LCD_RST GPIO_Pin_9
#define LCD_RST_PORT GPIOB
#define LCD_CS GPIO_Pin_12
#define LCD_CS_PORT GPIOB
void lcd_cmd(uint8_t cmd)
{
LCD_CMD_PORT->BRR = LCD_CMD; // 写命令选择
LCD_CS_PORT->BRR = LCD_CS; // 片选使能
LCD_DATA_PORT->ODR = cmd; // 写入命令
Delay_us(10); // 延时10us
LCD_CS_PORT->BSRR = LCD_CS; // 片选禁止
}
void lcd_data(uint8_t data)
{
LCD_CMD_PORT->BSRR = LCD_CMD; // 写数据选择
LCD_CS_PORT->BRR = LCD_CS; // 片选使能
LCD_DATA_PORT->ODR = data; // 写入数据
Delay_us(10); // 延时10us
LCD_CS_PORT->BSRR = LCD_CS; // 片选禁止
}
void lcd_init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
// 配置LCD数据口为推挽输出
GPIO_InitStructure.GPIO_Pin = LCD_DATA;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
// 配置LCD命令口、复位口、片选口为推挽输出
GPIO_InitStructure.GPIO_Pin = LCD_CMD | LCD_RST | LCD_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_CMD_PORT, &GPIO_InitStructure);
GPIO_Init(LCD_RST_PORT, &GPIO_InitStructure);
GPIO_Init(LCD_CS_PORT, &GPIO_InitStructure);
// 复位液晶屏
LCD_RST_PORT->BRR = LCD_RST;
Delay_ms(10);
LCD_RST_PORT->BSRR = LCD_RST;
Delay_ms(10);
// 扩展指令集设置
lcd_cmd(0x34); // 打开扩展指令集
lcd_cmd(0x04); // 打开反白显示
// 显示控制参数设置
lcd_cmd(0x30); // 关闭扩展指令集
lcd_cmd(0x0c); // 显示开,无游标,不闪烁
lcd_cmd(0x01); // 清屏
}
void lcd_putchar(uint8_t ch)
{
lcd_data(ch);
}
void lcd_puts(const char* str)
{
while (*str) {
lcd_data(*str++);
}
}
void lcd_putnum(uint32_t num)
{
uint8_t buf[10];
uint8_t len = 0;
do {
buf[len++] = '0' + num % 10;
num /= 10;
} while (num > 0);
for (int i = len - 1; i >= 0; i--) {
lcd_data(buf[i]);
}
}
int main(void)
{
lcd_init(); // 初始化液晶屏
lcd_puts("Hello, world!"); // 显示字符
while(1);
}
这是一份基础代码示例,你根据自己实际的需求进行适应和调整。 |