一、 概述

LCD12864属于点阵图形液晶显示模块,能够显示字符、汉字以及图形,分为带汉字字库的不带汉汉字库两种。本例程是基于不带汉字字库的12864液晶显示模块,通信方式为8080并行通信,该液晶模块使用ST7565P芯片驱动。

二、实验材料

1、STM32F103C8T6最小系统。
2、LCD12864液晶屏。
3、杜邦线若干。

三、硬件连接

四、程序代码

1、GPIO初始化

void Lcd_Pin_Init(void)
{GPIO_InitTypeDef GPIO_InitStrcurt;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);//PA8 PA11GPIO_InitStrcurt.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStrcurt.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 ; GPIO_InitStrcurt.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStrcurt);//PB0 PB1 PB2GPIO_InitStrcurt.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStrcurt.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStrcurt.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStrcurt); //数据引脚GPIO_InitStrcurt.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStrcurt.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStrcurt.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStrcurt);
}

2、检测忙碌状态

void Lcd_CheckBusy(void)
{u8 signal;LCD_RS = 0;LCD_WR = 1;do{LCD_RD = 0;delay_us(2);//读BF状态signal = BUSYIN;//PB15delay_us(2);LCD_RD = 1;}while(signal);
}

3、写数据

void Lcd_Send_Data(int data)
{Lcd_CheckBusy();//状态判断LCD_RS = 1;LCD_CS = 0;LCD_RD = 1;LCD_WR = 0;delay_us(5);//数据data=data<<8;GPIOB->ODR=((GPIOB->ODR & 0x00FF)|(data&0xFF00));//PB15-8是数据位,PB0-7的数据不能变delay_us(5);LCD_WR = 1;
}

4、写命令

void Lcd_Send_Cmd(int cmd)
{Lcd_CheckBusy();//状态检测LCD_RS = 0;LCD_CS = 0;LCD_RD = 1;LCD_WR = 0;delay_us(5);//数据cmd=cmd<<8;GPIOB->ODR=((GPIOB->ODR & 0x00FF)|(cmd&0xFF00));//PB15-8是数据位,PB0-7的数据不能变delay_us(5);LCD_WR = 1;
}

5、清屏

void Lcd_Clear(int clear_data)
{u8 i = 0, j = 0;for(i = 0; i < 8; i++){Lcd_Send_Cmd(0xB0 + i);//页地址Lcd_Send_Cmd(0x10);    //列高地址  Lcd_Send_Cmd(0x00);    //列低地址for(j = 0; j < 132; j++){Lcd_Send_Data(clear_data);//清屏数据}}
}

6、驱动程序

void Lcd_Init(void)
{Lcd_Pin_Init();LCD_RESE = 0;delay_ms(2);LCD_CS = 0;LCD_RESE = 1;Lcd_Send_Cmd(0XE2);//软件初始化Lcd_Send_Cmd(0XA0);//段方向选择0XA0:正常方向(左右) 0XA1:反方向Lcd_Send_Cmd(0XC8);//0XC8:普通(上下)方向  0XC0:正常方向Lcd_Send_Cmd(0XA6);//0XA6:字体黑色,背景为白色  0XA7:字体白色,背景黑色Lcd_Send_Cmd(0XA4);//0XA4:像素正常显示  0XA5:像素全开Lcd_Send_Cmd(0XA2);//0XA2:偏压1/7  0XA3:偏压1/9Lcd_Send_Cmd(0XF8);//双字节命令 0XF8 00选择增压4x Lcd_Send_Cmd(0X01);//0XF8 01选择增压5x Lcd_Send_Cmd(0X81);//双字节命令Lcd_Send_Cmd(0X23);//设置背景光对比度  0x00到0x3fLcd_Send_Cmd(0X25);//选择调节电阻率Lcd_Send_Cmd(0X2F);//电源设置Lcd_Send_Cmd(0X40);//设置显示开始位置Lcd_Send_Cmd(0XAF);Lcd_Clear(0x00);//清屏
}

7、设置显示位置

//page:页 col:列
void Lcd_Set_Add(int page, int col)
{Lcd_Send_Cmd(0XB0 + page); Lcd_Send_Cmd(0X10 + ((col & 0XF0) >> 4));//列高地址Lcd_Send_Cmd(0X00+ (col & 0X0F));//列低地址
}

8、字符显示

//page:页 col:列 ch:字符
void Lcd_Display_Char(int page,int col,u8 ch)
{int str = 0;int i = 0;str = ch - ' ';//ch在字符集中的位置Lcd_Set_Add(page,col);//上半部分for(i = 0; i < 8; i++){Lcd_Send_Data(Aciss_8X16[str * 16 + i]);}Lcd_Set_Add(page + 1,col);for(i = 0; i < 8; i++){Lcd_Send_Data(Aciss_8X16[str * 16 + 8 + i]);}
}

9、字符串显示

//page:页 col:列 *str:字符串数组首地址
void Lcd_Display_String(int page, int col,u8 *str)
{while(*str != '\0'){Lcd_Display_Char(page,col,*str);col += 8;str++;}
}

10、单个汉字或图片显示

//page:页 col:列 width:宽度  high:高度 *Chinese:单个汉字数组首地址
void Lcd_Display_Chinese(int page, int col,int width,int high,u8 *Chinese)
{u8 i = 0, j = 0;//单个显示for(i = 0; i < high / 8; i++)//页{ Lcd_Set_Add(page + i,col);for(j = 0; j < width; j++)//列{Lcd_Send_Data(Chinese[width * i + j]);}}
}

11、多个汉字显示

//page:页 col:列   width:宽度  high:高度 num:汉字个数 *Chinese:汉字数组首地址
void Lcd_Display_ChinStr(int page, int col, int width, int high, int num, u8 *Chinese)
{   u8 i = 0, j = 0,k = 0;int temp = 0;for(k = 0; k < num; k++){for(i = 0; i < high / 8; i++){ Lcd_Set_Add(page + i,col);for(j = 0; j < width; j++){Lcd_Send_Data(Chinese[temp + j]);}temp += width;//记录显示位置}col += width;//列地址加一个字宽度}
}

12、主程序

int main(void)
{u8 buf[] = {"2021/2/4"};Sys_Delay_Init();Lcd_Init();while(1){//显示字符串Lcd_Display_String(6, 48,buf);//显示单个中文Lcd_Display_Chinese(6,112,16,16,Chinese16X16);//显示多个中文Lcd_Display_ChinStr(2,0,24,24,5,Chinese24X24);      }
}

四、实验效果


完整程序及ST7565P资料:
链接:https://pan.baidu.com/s/1Jk2jZoc63668NLPsqvZM4Q
提取码:cjx6

如有错误还望指出,谢谢!

LCD12864(ST7565P)字符汉字显示(STM32F103)相关推荐

  1. STM32——汉字显示

    一.常用汉字编码 1.GB2312 2.GB13000 3.GBK 4.BIG5(繁体) 二.汉字显示原理 汉字在液晶上的显示其实就是一些点的显示与不显示,这就相当于我们的笔一样,有笔经过的地方就画出 ...

  2. 基于STM32F103的超声波测距+屏幕显示功能(汉字显示)

    关于单片机,我用的是STM32F103精英版,(系统板也可以). 超声波就是常用的HC-SR04.原理简单的说一下 基本工作原理: (1)采用IO口TRIG触发测距,给至少10us的高电平信号; (2 ...

  3. STM32 OLED显示字符汉字

    本文代码使用 HAL 库. 文章目录 前言 一. OLED 接线: 二.点阵: 三.写数据,命令函数 四.显示字符,字符串: 总结 前言 OLED 屏幕是一种高对比度.高亮度.低功耗.灵活可弯曲的显示 ...

  4. keil for 51 汉字显示问题

    最近用STC8 单片机做一个电子锁相关的项目,用到OLED显示一些汉字,本来没什么问题的,很简单,但是在做指纹录入删除时,OLED显示删除总是不对,甚至影响其他部分显示,检查文件编码方式GB2312没 ...

  5. pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  6. mysql unicode转汉字_任意汉字显示,给你的嵌入式系统(含MCU)装上字库

    0 引言 还记得通常在MCU驱动LCD,OLED是怎样显示汉字的吗?采用取字模工具,生成字模数组,然后要显示某个字符,直接索引这个字符的数组,然后对这个数组数据进行显示就行了,就像这样: 最近有开发一 ...

  7. 点阵字体显示系列补记2:关于24点阵汉字显示程序及其修改版本

    自从写完16点阵后,由于没啥事做,就继续看看24点阵是如何显示的.这种规格的点阵是使用UCDOS(虽然下载了,但用不了)中的汉字字库.又千辛万苦找到ASCII码的24点阵,再修改前面的程序,生成24点 ...

  8. c语言 字体点阵取模,[汉字取模软件怎么用]单片机点阵汉字显示需要用

    [汉字取模软件怎么用]单片机点阵汉字显示需要用汉字取模软件吗 通常,用汉字取模软件生成工程所需所有汉字点阵信息.也可利用字库芯片,根据汉字内码计算字模地址,并从字库芯片中导出相关汉字的点阵信息.前者容 ...

  9. 【物联网智能网关-08】TinyGUI和WPF汉字显示技术比较

    TinyGUI是我在2010上半年的时候,基于.NET Micro Framework系统开发的一个轻量级图形库,虽然TinyGUI运行需要的资源少,运行快,但是不支持汉字显示(如需显示汉字还是必须借 ...

  10. 点阵字体显示系列之二:汉字显示

    http://blog.csdn.net/subfate/article/details/6444582 免责声明: 本文是作者在研究过程中的一篇文章,本着互联网共享.自由(free,应该不是&quo ...

最新文章

  1. redis做简单mq的高可用
  2. java new的是构造函数_Java构造函数
  3. Codeforces 814C - An impassioned circulation of affection
  4. recycleviewitem 列表加载动画_用vue实现一个虚拟列表
  5. 深入解析 Go 中 Slice 底层实现
  6. 备忘:VC++ 中的异常处理
  7. android 列表图片优化经历
  8. 微信支付v3 php 源码,求微信支付wxpayv3服务端完整代码
  9. Java基础学习笔记二十四 MySQL安装图解
  10. ram计算机中术语,计算机术语 RAM ROM
  11. 怎样成为优秀的测试工程师
  12. 交叉编译openssl(arm和x86_64)
  13. Linux-lsxxx
  14. VSCode前端开发工具插件--LiveServer实时刷新网页
  15. jquery 筛选选择器 下拉菜单
  16. python3中 os.path.realpath(__file__) 的使用
  17. 从零构建知识图谱(技术、方法与案例)-第二章:知识图谱技术体系
  18. java 秒表暂停_java – 停止秒表
  19. string是什么数据类型?
  20. Cognitive neuronscience (Chapter 3)

热门文章

  1. Burp Suite 扫描工具
  2. MySQL忘记密码应当如何重置
  3. 【windows】Windows电脑怎么卸载服务/删除服务?
  4. photoshop破解
  5. python手动垃圾回收_Python3学习笔记,F,垃圾,回收
  6. 分享76网络科技88教育教学47公司企业PPT模板
  7. php中如何从键盘获取,在javascript中如何获取键盘的keyCode
  8. LDA算法和PCA算法的总结(原理和思想)
  9. mac book 专用最新款win10镜像
  10. PC 显示屏 D-SUB DVI 切换