发新帖我要提问
12
返回列表
打印
[其他ST产品]

STM32——库函数版——12864点阵显示屏驱动

[复制链接]
楼主: hehhehee
手机看帖
扫描二维码
随时随地手机跟帖
21
hehhehee|  楼主 | 2023-9-29 19:11 | 只看该作者 回帖奖励 |倒序浏览

//写命令
void Lcd_WriteCmd(u8 Cmd )
{
     delay_ms(1);         //由于我们没有写LCD正忙的检测,所以直接延时1ms,使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测
     SendByte(WRITE_CMD);  //11111,RW(0),RS(0),0   
     SendByte(0xf0&Cmd);   //高四位
     SendByte(Cmd<<4);     //低四位(先执行<<)
}

//写数据
void Lcd_WriteData(u8 Dat )
{
     delay_ms(1);             //由于我们没有写LCD正忙的检测,所以直接延时1ms,使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测
     SendByte(WRITE_DAT);      //11111,RW(0),RS(1),0
     SendByte(0xf0&Dat);       //高四位
     SendByte(Dat<<4);         //低四位(先执行<<)
}

//清屏

使用特权

评论回复
22
hehhehee|  楼主 | 2023-9-29 19:11 | 只看该作者
void LCD_Clear(void)
{
        Lcd_WriteCmd(0x01);        //清屏指令
        delay_ms(2);                                //延时以待液晶稳定【至少1.6ms】
}
       
/***********************************************************
*  函数功能 :  显示字符或汉字
*  参数     : x: row(0~3)
*              y: line(0~7)
*                     str: 要显示的字符或汉字
***********************************************************/
void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t*str)
{
        Lcd_WriteCmd(LCD_addr[x][y]); //写初始光标位置
        while(*str>0)
    {
      Lcd_WriteData(*str);      //写数据
      str++;     
    }
}
/*
* led12864串行初始化
*/

使用特权

评论回复
23
hehhehee|  楼主 | 2023-9-29 19:11 | 只看该作者
void Lcd_Init(void)
{
        GPIO_WriteBit(GPIOA,RST,Bit_SET);    //复位置高
        delay_ms(10);       
        GPIO_WriteBit(GPIOA,RST,Bit_RESET);  //复位
        delay_ms(10);       
        GPIO_WriteBit(GPIOA,RST,Bit_SET);    //复位结束
        delay_ms(10);
   
        delay_ms(50);           //等待液晶自检(延时>40ms)
        Lcd_WriteCmd(0x30);        //功能设定:选择基本指令集  ,选择8bit数据流
  delay_ms(1);//延时>137us
  Lcd_WriteCmd(0x0c);        //开显示
  delay_ms(1);        //延时>100us
  Lcd_WriteCmd(0x01);        //清除显示,并且设定地址指针为00H
  delay_ms(30);        //延时>10ms
        Lcd_WriteCmd(0x06);        //每次地址自动+1,初始化完成
        LCD_Clear();
        delay_ms(30);        //延时>10ms
}

使用特权

评论回复
24
hehhehee|  楼主 | 2023-9-29 19:11 | 只看该作者
led12864.h

#include "sys.h"

/*----------------------------------12864并行发送----------------------------------------------------*/
#define RS GPIO_Pin_0   //数据/命令选择
#define RW GPIO_Pin_1   //读/写选择
#define E GPIO_Pin_2    //使能信号
#define RST GPIO_Pin_3    //复位引脚

#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 uchar unsigned char
       
//引脚初始化
void lcd12864_Pin_Init(void);
//DB7引脚  忙信号检测
void LCD_ReadyWait(void);
//向LCD12864写入命令
void LCD_Write_com(uchar com);
//向LCD12864写入数据
void LCD_Write_data(uchar data);
//清屏
void LCD_clear(void);
//led12864并初始化
void LED_Init(void);

//任意位置显示字符串(写DDRAM中的数据)
void display_DDRAM(uchar x,uchar y,uchar *s);
//任意位置显示自定义字符串(写CGRAM中的数据)
void display_CGRAM(uchar y,uchar x,uchar addr,uchar *s);

/*----------------------------------12864串行发送----------------------------------------------------*/

#define WRITE_CMD        0xF8//写命令  
#define WRITE_DAT        0xFA//写数据

/*
* PSB引脚接低,串行模式
* RS引脚,拉高数据才能发送
*/
//RW引脚为PA1,E引脚为PA2

//清屏

使用特权

评论回复
25
hehhehee|  楼主 | 2023-9-29 19:12 | 只看该作者
void LCD_Clear(void);
//led串行发送一个字节
void SendByte(u8 byte);
//写命令
void Lcd_WriteCmd(u8 Cmd );
//写数据
void Lcd_WriteData(u8 Dat );
//显示字符或汉字
void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t*str);
//led12864串行初始化
void Lcd_Init(void);

使用特权

评论回复
26
lilipo| | 2024-3-6 23:57 | 只看该作者
你不如把工程放上来,你这样一段一段放上去,根本不会有人看的,太烦了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则