STM32c8t6单片机中使用12864的串行通讯的例程
时间: 2024-01-21 12:16:54 浏览: 70
以下是使用STM32c8t6单片机和12864液晶屏进行串行通讯的例程:
```c
#include "stm32f10x.h"
#include "delay.h"
#define RS GPIO_Pin_2
#define RW GPIO_Pin_1
#define EN GPIO_Pin_0
#define CS GPIO_Pin_3
void LCD_Write_Command(unsigned char Command)
{
GPIO_ResetBits(GPIOA, CS); // 使能片选
GPIO_ResetBits(GPIOB, RS); // RS = 0,发送命令
GPIO_ResetBits(GPIOB, RW); // RW = 0,写入模式
GPIO_Write(GPIOC, Command); // 传输命令
GPIO_SetBits(GPIOA, EN); // 使能
delay_us(5); // 延时
GPIO_ResetBits(GPIOA, EN); // 关闭使能
GPIO_SetBits(GPIOA, CS); // 禁用片选
}
void LCD_Write_Data(unsigned char Data)
{
GPIO_ResetBits(GPIOA, CS); // 使能片选
GPIO_SetBits(GPIOB, RS); // RS = 1,发送数据
GPIO_ResetBits(GPIOB, RW); // RW = 0,写入模式
GPIO_Write(GPIOC, Data); // 传输数据
GPIO_SetBits(GPIOA, EN); // 使能
delay_us(5); // 延时
GPIO_ResetBits(GPIOA, EN); // 关闭使能
GPIO_SetBits(GPIOA, CS); // 禁用片选
}
void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); // 使能GPIOA、GPIOB、GPIOC时钟
GPIO_InitStructure.GPIO_Pin = EN | CS;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化EN和CS引脚
GPIO_InitStructure.GPIO_Pin = RS | RW;
GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化RS和RW引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化数据引脚
GPIO_SetBits(GPIOA, EN); // 关闭使能
GPIO_SetBits(GPIOA, CS); // 禁用片选
LCD_Write_Command(0x38); // 设置显示模式,16x2,5x8点阵
LCD_Write_Command(0x01); // 清屏
LCD_Write_Command(0x06); // 光标右移,不移动画面
LCD_Write_Command(0x0c); // 开启显示,关闭光标和闪烁
}
int main(void)
{
LCD_Init(); // 初始化液晶屏
while (1)
{
LCD_Write_Command(0x80); // 光标移动到第一行第一列
LCD_Write_Data('H');
LCD_Write_Data('e');
LCD_Write_Data('l');
LCD_Write_Data('l');
LCD_Write_Data('o');
delay_ms(1000);
LCD_Write_Command(0x80); // 光标移动到第一行第一列
LCD_Write_Data('W');
LCD_Write_Data('o');
LCD_Write_Data('r');
LCD_Write_Data('l');
LCD_Write_Data('d');
delay_ms(1000);
LCD_Write_Command(0x01); // 清屏
delay_ms(1000);
}
}
```
在该例程中,我们使用GPIOA控制片选和使能引脚,使用GPIOB控制RS和RW引脚,使用GPIOC控制数据引脚。在初始化函数中,我们设置了液晶屏的显示模式、清屏、光标右移和开启显示等参数。在主函数中,我们通过调用`LCD_Write_Command()`函数和`LCD_Write_Data()`函数来向液晶屏发送命令和数据,从而实现显示内容的更改。注意,在每次调用液晶屏写入函数之前,需要先禁用片选引脚,以防止其他设备干扰通讯。
阅读全文