前言:第一次使用社区的背景,感觉还不错,此处要@21小跑堂 还是跑堂兄教我的呢,跑堂兄太棒了,超级奈斯。5.20快乐哦!!!
      回到正题,ST7567是一种LCD液晶屏的驱动芯片之一,它是单芯片点矩阵式的LCD驱动器,集成了LCD控制器和公共/段驱动器。从MPU发送的显示数据存储在65x132位的内部显示数据RAM(DDRAM)中。DDRAM中存储的显示数据位与LCD面板的像素直接相关。ST7567包含132个段输出,64个公共输出和1个图标公共输出。借助内置的振荡电路和低功耗电源电路,ST7567无需外部时钟或电源即可生成LCD驱动信号,从而可以使显示系统的组件最少,功耗最小。而且它还具有6800,8080和4线SPI等通信方式,其中6800和8080是屏幕专用的一种并口通信方式,但是我们常用的就是8080总线方式和4线SPI通信方式来驱动液晶屏,本次使用的是4线SPI通信方式来驱动ST7567的LCD液晶屏。今天我们就来驱动一款TM9665ACC的LCD液晶屏。

这个是老王的屏幕,这个屏幕最大的特点就是便宜好用,驱动简单,但是这个屏里有个背景纸,不是太好看,如果动手能力强的话,可以把背景纸去掉,显示效果会更好看。非常通透。

首先,要知道屏的各个引脚,而且要知道每个引脚是什么功能。屏幕引脚如下图所示。

首先,这个屏有14个引脚,1,2,3,11和14引脚是GND其次是4,5引脚是VCC,电压是3.3V接下来6,7,8,9,10,都是功能引脚,分别是复位引脚,CS片选引脚,A0数据/命令引脚,数据信号,时钟信号,12和13是背光引脚,A代表正极,K代表负极,知道每个引脚的定义之后,就可以焊接或者做电路板了,由于之前做好了电路,就不用很麻烦的飞线了。电路板的图纸是搬抄群里大佬的,在这里深表感谢

接下来由于知道驱动是ST7567,所以就可以直接写驱动代码了,驱动代码部分展示。

void Lcd_Init(void)

{

delay_ms(10);

LCD_RST_LOW();

delay_us(100);

LCD_RST_HIGH();

delay_ms(255);

delay_ms(255);

delay_ms(255);

LCD_WR_REG(0X2F);                //开内部升压,不然要接外部VLCD

LCD_WR_REG(0X81);                //要求输入对比度

LCD_WR_REG(0XB0);                //对比度数值,这个要自己试验一下最佳效果。

LCD_WR_REG(0XEB);                //液晶偏压设置  1/9

LCD_WR_REG(0XC2);                //设置扫描方式,默认从左到右,上到下。

LCD_WR_REG(0XAF);                //开显示

}

//清屏函数

void LCD_Clear(void)

{

u16 i, j;

i = 192 * 64 / 8; //128X64像素,但是RAM192列的,我也没有找到如何设置列结束位置。数据大小要除以8位数据

for(; i > 0; i--)

LCD_WR_DATA8(0x00); //DAT =0X00,清全白,OXFF,清全黑

}

//-------LCD设置坐标---------------------------------------

void LCD_SetPos(u8 page, u8 column)

{

column = column - 1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.

page = page - 1;

LCD_WR_REG(0xb0 + page);/*设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。我们平常所说的第 1 页,在 LCD

                                                                                                        驱动 IC 里是第 0 页,所以在这里减去 1*/

LCD_WR_REG(column & 0x0f); //设置列地址的低 4

column >>= 4;

column        =        column | 0x10;

LCD_WR_REG(column);                                                                //取高4位行地址

}

//显示 16x16 点阵图像、汉字、生僻字或 16x16

void display_graphic_16x16(u8 page, u8 column, unsigned char *dp)

{

u8 i, j;

LCD_SetPos(page, column);                //发送地址,第一页

for (i = 0; i < 16; i++)                                //第一页的数据16字节,列号自动累加

{

LCD_WR_DATA8( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。

dp++;

}

LCD_SetPos(page + 1, column);                //发送地址,第二页

for (i = 0; i < 16; i++)                                //第二页的数据16字节

{

LCD_WR_DATA8( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。

dp++;

}

}

汉字取模部分代码

unsigned char huan[] =

{

0x04, 0x24, 0x44, 0x84, 0x64, 0x9C, 0x40, 0x30, 0x0F, 0xC8, 0x08, 0x08, 0x28, 0x18, 0x00, 0x00,

0x10, 0x08, 0x06, 0x01, 0x82, 0x4C, 0x20, 0x18, 0x06, 0x01, 0x06, 0x18, 0x20, 0x40, 0x80, 0x00

};/*"",0*/

unsigned char ying[] =

{

0x40, 0x40, 0x42, 0xCC, 0x00, 0x00, 0xFC, 0x04, 0x02, 0x00, 0xFC, 0x04, 0x04, 0xFC, 0x00, 0x00,

0x00, 0x40, 0x20, 0x1F, 0x20, 0x40, 0x4F, 0x44, 0x42, 0x40, 0x7F, 0x42, 0x44, 0x43, 0x40, 0x00

};/*"",1*/

unsigned char shi[] =

{

0x80, 0x60, 0xF8, 0x07, 0x04, 0xE4, 0x24, 0x24, 0x24, 0xFF, 0x24, 0x24, 0x24, 0xE4, 0x04, 0x00,

0x00, 0x00, 0xFF, 0x00, 0x80, 0x81, 0x45, 0x29, 0x11, 0x2F, 0x41, 0x41, 0x81, 0x81, 0x80, 0x00

};/*"使",0*/

unsigned char yong[] =

{

0x00, 0x00, 0xFE, 0x22, 0x22, 0x22, 0x22, 0xFE, 0x22, 0x22, 0x22, 0x22, 0xFE, 0x00, 0x00, 0x00,

0x80, 0x60, 0x1F, 0x02, 0x02, 0x02, 0x02, 0x7F, 0x02, 0x02, 0x42, 0x82, 0x7F, 0x00, 0x00, 0x00

};/*"",1*/

主函数部分代码

int main(void)

{

u8 t;

u8 *temp;

u16 SET_VOLTAGE = 123;

SystemInit ();

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

delay_init();                        //延时初始化

LCD_IO_init();                        //显示屏IO初始化

Lcd_Init();                        //显示屏寄存器初始化

LCD_Clear();                        //显示屏清屏操作

uart_init(9600);                 //波特率使用115200

printf("欢迎使用\r\n");

while(1)

{

display_graphic_16x16(3, 16, 0, huan);

display_graphic_16x16(3, 32, 0, ying);

display_graphic_16x16(3, 48, 0, shi);

display_graphic_16x16(3, 64, 0, yong);

}

}

“欢迎使用”是最终的显示效果,感觉显示的效果还是不错的,而且比较清晰好看。不过显示过程中也有很多麻烦,比如显示位置不对,最后发现是设置坐标函数有问题导致的,重新计算和修改之后就没有这种问题发生了。最后把驱动程序部分分享出来,方便大家使用。
---------------------
作者:yangjiaxu
链接:https://bbs.21ic.com/icview-3133844-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

[STM32F1]使用STM32F103驱动ST7567液晶屏相关推荐

  1. STM32F103软件模拟SPI接口驱动ILI9486液晶屏

    STM32F103软件模拟SPI接口驱动ILI9486液晶屏 ILI9486的工作模式 ILI9486的SPI总线方式简介 ILI9486的3线SPI总线底层驱动配置步骤 ILI9486的工作模式 I ...

  2. 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  3. arduino下载库出错_arduino的I2C通讯 3:驱动1602液晶屏

    上个推送,我们学习了I2C功能的基础知识.而且知道了使用很多器件都需要安装库.本次,我们一起来做一个实例,用arduino驱动1602液晶屏 1602代表屏幕有16列,2行.传统的驱动方式占用了大量的 ...

  4. ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能

    最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...

  5. 通过 I2C 驱动 LCD1602 液晶屏(51单片机)

    通过 I2C 驱动 LCD1602 液晶屏(51单片机) 硬件实物 原理图 3.程序 #include <reg51.h> #include <intrins.h>#defin ...

  6. stm32 arduino 驱动jlx液晶屏

    stm32 arduino 驱动jlx液晶屏 1.说明 单片机这次用的是STM32F103C8T6,烧成arduino用,库还是我们的老朋友u8g2.液晶屏型号是JLX 240160G-676,SPI ...

  7. MCU驱动和RGB驱动的液晶屏的区别

    概况来讲,RGB驱动需要的硬件条件高,比如用STM32F429的LTDC+DMA2D模块,外加SDRAM作为显存.而MCU接口,STM32F407系列的控制器就整合了这个模块,包含6800和8080两 ...

  8. 单通道驱动LVDS驱动1080P液晶屏

    上周末把单通道LVDS驱动1080P液晶屏调通了.通过FPGA接收单8的LVDS输入,内部一个倍频,数据组合格式如下:

  9. 基于stm32f103的LM6029-12864液晶屏开发(代码资源地址在最后)

    <<<<<正文>>>>> <前言> 本文主要介绍128x64点阵液晶屏的开发,本文是基于拓普微LM6029AC液晶模块显示屏开发 ...

最新文章

  1. Vue 监听路由变化的三种方式
  2. 2020中国人工智能年度评选正在征集!开放4大类别7大奖项
  3. Mysql服务器问题(2013.3.5日发现)
  4. java 根据当前时间获得一周日期
  5. SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder
  6. 属性,类方法,静态方法,反射
  7. 基于Web Services建立Asp与Asp.Net之间Session数据桥的应用研究
  8. 课程范例 20150916html1 练习
  9. 在VS2010中使用Git【图文】
  10. oracle 无法套取,mycat-oracle报java.sql.SQLException: 无法从套接字读取更多的数据
  11. 敏捷测试的方法和实践
  12. saltstack实战--远程执行之返回(returner)
  13. eclipse Helio项目简介
  14. ubuntu 改屏幕分辨率命令_ubuntu下修改分辨率
  15. 声散射 matlab,一种基于声波散射的高强度聚焦超声声场测量方法与流程
  16. 秀米怎么用html模板,秀 米 模 板 不 够 用 ?
  17. 最优化方法1——各类拓扑空间与强弱紧集、下半收敛问题
  18. 电厂/矿井UWB室内定位解决方案
  19. 阿里巴巴首席DBA成甲骨文全球第100个ACE
  20. c语言最大数最小数平均数,C语言编程 求两个数的平均值方法(三种方法)

热门文章

  1. 不断做减法的网易金融,曾筹谋消费金融牌照
  2. checking for mysql_commit in -lmy_安装ruby环境,用mysql数据库,总是报错,调了一下午,网上方法都用了也不管事...
  3. python sql语句异常捕获_python异常处理
  4. gzip解析 python
  5. Push to origin/master was rejected的解决办法
  6. 通过自定义打印纸张的大小,实现打印到哪里纸张就停止在哪里。
  7. android 加载ttf流程分析,Android自定义字体 TextView 从SD卡加载TTF字体
  8. Android中复制及粘贴功能
  9. 西瓜视频“万元月薪”计划
  10. 双十一PPT模板推荐