stm32f106c6t6 LCD1602驱动程序及解释
时间: 2023-12-16 18:02:48 浏览: 111
LCD1602驱动STM32程序.doc
首先,stm32f106c6t6是一款基于ARM Cortex-M3内核的微控制器,而LCD1602是一款常用的字符型液晶显示器。下面是一个简单的LCD1602驱动程序及解释:
```c
#include "stm32f10x.h" //stm32f106c6t6的头文件
#include "delay.h" //延时函数头文件
#define RS GPIO_Pin_0 //定义LCD1602的RS引脚所对应的GPIO引脚
#define RW GPIO_Pin_1 //定义LCD1602的RW引脚所对应的GPIO引脚
#define EN GPIO_Pin_2 //定义LCD1602的EN引脚所对应的GPIO引脚
#define LCD_PORT GPIOC //定义LCD1602所连接的GPIO端口
void LCD_Init() //LCD1602初始化函数
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC时钟
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
GPIO_InitStructure.GPIO_Pin = RS | RW | EN; //设置RS、RW、EN引脚为输出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速率为50MHz
GPIO_Init(LCD_PORT, &GPIO_InitStructure); //将上述配置应用到LCD_PORT端口上
GPIO_SetBits(LCD_PORT, RS | RW | EN); //将RS、RW、EN引脚输出高电平
LCD_Write_Cmd(0x38); //设置8位数据总线、2行显示、5x8点阵
LCD_Write_Cmd(0x0c); //设置光标不显示、光标不闪烁、显示器不闪烁
LCD_Write_Cmd(0x06); //设置光标自动加1、文字不移动
LCD_Write_Cmd(0x01); //清屏
}
void LCD_Write_Cmd(uint8_t cmd) //向LCD1602写入指令
{
GPIO_ResetBits(LCD_PORT, RS); //RS引脚输出低电平,选择指令模式
GPIO_ResetBits(LCD_PORT, RW); //RW引脚输出低电平,选择写入模式
GPIO_SetBits(LCD_PORT, EN); //EN引脚输出高电平
GPIO_Write(LCD_PORT, cmd); //将指令写入数据总线
delay_ms(1); //延时1ms
GPIO_ResetBits(LCD_PORT, EN); //EN引脚输出低电平
}
void LCD_Write_Data(uint8_t data) //向LCD1602写入数据
{
GPIO_SetBits(LCD_PORT, RS); //RS引脚输出高电平,选择数据模式
GPIO_ResetBits(LCD_PORT, RW); //RW引脚输出低电平,选择写入模式
GPIO_SetBits(LCD_PORT, EN); //EN引脚输出高电平
GPIO_Write(LCD_PORT, data); //将数据写入数据总线
delay_ms(1); //延时1ms
GPIO_ResetBits(LCD_PORT, EN); //EN引脚输出低电平
}
void LCD_Display_String(uint8_t x, uint8_t y, uint8_t *str) //在指定位置显示字符串
{
uint8_t addr;
if(y == 0)
{
addr = 0x80 + x;
}
else
{
addr = 0xc0 + x;
}
LCD_Write_Cmd(addr); //设置显示位置
while(*str)
{
LCD_Write_Data(*str++); //逐个显示字符
}
}
void LCD_Display_Num(uint8_t x, uint8_t y, uint16_t num) //在指定位置显示数字
{
uint8_t str[16];
sprintf(str, "%d", num); //将数字转换为字符串
LCD_Display_String(x, y, str); //在指定位置显示字符串
}
```
上述代码中,LCD_Init()函数用于初始化LCD1602的GPIO引脚和一些基本参数,LCD_Write_Cmd()函数用于向LCD1602写入指令,LCD_Write_Data()函数用于向LCD1602写入数据,LCD_Display_String()函数用于在LCD1602上指定位置显示字符串,LCD_Display_Num()函数用于在LCD1602上指定位置显示数字。
需要注意的是,上述代码中使用了一个自定义的延时函数delay_ms(),如果没有该函数需要自行实现。此外,还需要在程序中包含delay.h头文件,该头文件中包含了delay_ms()函数的定义。
阅读全文