原理

之前没有操作过12864这种类型的屏,但是,操作过其他类型的,原理都是相通的。12864是拥有128x64像素点这类屏幕的称号吧。屏幕有64行,128列;每个汉字是16x16,所以一个这样的屏,最多可以显示4x8的汉字或者8x16的字符。

我使用的是不带字库的I2C接口的屏幕,主芯片是ST7656。这样的屏,只能写,不能读。先配置屏幕,然后通过字模制作软件制作出待显示内容的像素数字,最后,通过数据线传送给屏幕显示。了解了原理后,接下来就根据主芯片的数据手册进行配置屏幕就好了。

硬件连线

  • CS:片选
  • RST: 复位
  • RS:数据或命令选择
  • SDA:I2C数据线
  • SCL:I2C时钟线

I2C采用的是软件模拟的

底层写操作

#define IO_ST7565_CS_0   GPIO_WriteBit(GPIOB, GPIO_Pin_5, RESET)
#define IO_ST7565_CS_1      GPIO_WriteBit(GPIOB, GPIO_Pin_5, SET)#define IO_ST7565_SDA_0    GPIO_WriteBit(GPIOB, GPIO_Pin_1, RESET)
#define IO_ST7565_SDA_1     GPIO_WriteBit(GPIOB, GPIO_Pin_1, SET)   #define IO_ST7565_SCK_0     GPIO_WriteBit(GPIOB, GPIO_Pin_2, RESET)
#define IO_ST7565_SCK_1     GPIO_WriteBit(GPIOB, GPIO_Pin_2, SET)   #define IO_ST7565_RST_0     GPIO_WriteBit(GPIOB, GPIO_Pin_4, RESET)
#define IO_ST7565_RST_1     GPIO_WriteBit(GPIOB, GPIO_Pin_4, SET)#define IO_ST7565_RS_0         GPIO_WriteBit(GPIOB, GPIO_Pin_3, RESET)
#define IO_ST7565_RS_1      GPIO_WriteBit(GPIOB, GPIO_Pin_3, SET)static void io_delay(uint16_t nCount)
{while (nCount--);
}/* rs == 1 data rs==0  cmd */
void ST7565_Write(uint8_t dat,uint8_t rs)
{uint8_t i;IO_ST7565_SCK_0;IO_ST7565_CS_0;if(!rs){IO_ST7565_RS_0; //Command}else{IO_ST7565_RS_1;}io_delay(5);for(i = 0; i < 8; i++){ if( dat & 0x80){IO_ST7565_SDA_1;}else{IO_ST7565_SDA_0;}dat <<= 1;IO_ST7565_SCK_1;io_delay(5);IO_ST7565_SCK_0;io_delay(5);}io_delay(5);IO_ST7565_CS_1;IO_ST7565_RS_1;io_delay(5);
}/* write cmd */
void writec(uint8_t com)
{ ST7565_Write(com,0);
}/* write data */
void writed(uint8_t dat)
{  ST7565_Write(dat,1);
}

初始化

void LcmClear(uint8_t FillData)
{uint8_t i,j;for(i=0;i<8;i++){writec(0xB0|i); //Set Page Addresswritec(0x10); //Set Column Address = 0writec(0x00); //Colum from S1 -> S128 auto addfor(j=0;j<132;j++){writed( FillData );}}
}void LcmInit(void)
{IO_ST7565_CS_1;IO_ST7565_RST_0;delay_ms(10); //hard reset for 10msIO_ST7565_RST_1;delay_ms(10); writec(0xAE); //Display OFFwritec(0xA2); //1/64 Duty 1/9 Biaswritec(0xA0); //ADC select S0->S131(玻璃设计用S1-S128)writec(0xC0); //com1 --> com64writec(0x24); //对某些模块没用,用的外部Rb/Rawritec(0x81); //Sets V0writec(48);   //内部电位器调节对比度writec(0x2F); //voltage follower ON regulator ON booster ONwritec(0xA6); //Normal Display (not reverse dispplay)writec(0xA4); //Entire Display Disablewritec(0x40); //Set Display Start Line = com0writec(0xB0); //Set Page Address = 0writec(0x10); //Set Column Address 4 higher bits = 0writec(0x00); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG128LcmClear(0);writec(0xAF); //Display ON
}

上面的这些命令代表什么含义,输入的命令值具体代表什么,都可以在ST7656的官方数据手册中找到答案。

应用

使用字模软件制作字模:

uint8_t hzk[] = {/*--  文字:  请 0 --*//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/0x00,0x00,0xFE,0x04,0x08,0x00,0xFF,0xA8,0xA8,0xA8,0xAA,0xA9,0xFE,0x00,0x00,0x00,0x02,0x42,0x33,0x00,0x00,0x22,0x2A,0x2A,0x2A,0xFE,0x2A,0x2A,0x2A,0x22,0x02,0x00,
}uint8_t num[] = {/*--  文字:  0  --*//*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,
}/* page: 0 - 7; col: 0 - 128 */
void show_char(uint8_t page, uint8_t col, uint8_t *data)
{uint8_t i;/* set page address */writec(0xB0 | page);/* set column address */writec(0x10 | col >> 4);writec(col & 0xf);for(i = 8; i < 16; i++) {writed(data[i]);}page++;/* set page address */writec(0xB0 | page);/* set column address */writec((0x10 | (col >> 4)));writec(col & 0xf);for(i = 0; i < 8; i++){writed(data[i]);}
}/* page: 0/2/4/6; col: 0 - 128 */
void show_chinese(uint8_t page, uint8_t col, uint8_t *data)
{uint8_t i;/* set page address */writec(0xB0 | page);/* set column address */writec(0x10 | col >> 4);writec(col & 0xf);for(i = 0; i < 16; i++) {writed(data[i]);}page++;/* set page address */writec(0xB0 | page);/* set column address */writec((0x10 | (col >> 4)));writec(col & 0xf);for(i = 16; i < 32; i++){writed(data[i]);}
}show_chinese(4, 0x20, hzk);
show_char(2, 0x30, num);

资料

字模软件: https://download.csdn.net/download/donglicaiju76152/10805852
ST7656数据手册: https://download.csdn.net/download/donglicaiju76152/10805849

STM8L驱动I2C类型的12864相关推荐

  1. Arduino驱动I2C接口12864LCD大屏液晶模块方法及库文件

    关键词:Arduino显示,12864液晶模块,中文显示,IIC接口,I2C接口,12864驱动程序 液晶显示模块目前在中国发展已经有30多个年头了,市场上应用最广泛的要属于128*64点阵的显示屏, ...

  2. linux驱动--i2c驱动学习

    转至:http://blog.csdn.net/ghostyu/article/details/8094049 预备知识 在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c ...

  3. STM32 HAL 驱动I2C总线0.91寸OLED模块(基于SSD1306显示驱动芯片)

    STM32 HAL 驱动I2C总线0.91寸OLED模块(基于SSD1306显示驱动芯片) 基于SSD1306驱动芯片的OLED模块有多种型号,有0.91英寸,0.96英寸等等.OLED采用单色显示方 ...

  4. 基于Lua框架下Air103使用U8g2库驱动I2C OLED图像显示

    基于Lua框架下Air103使用U8g2库驱动I2C OLED屏幕图像演示

  5. ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示

    ESP32基于Arduino框架下U8g2驱动I2C OLED时间显示

  6. 和12岁小同志搞创客开发:如何驱动各类型传感器?

    目录 1.数字量输出类型传感器 2.数字量输入类型传感器 3.模拟量电压类型传感器 4.模拟量电流类型传感器 5.协议类型传感器  机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和 ...

  7. (6)LinuxI2C驱动--I2C设备驱动

    本节主要分析eeprom的所属的i2c设备驱动,此驱动主要实现了能够通过sysfs文件系统访问eeprom. 1. eeprom板级设备资源 因为原开发板的eeprom驱动还没调试好,板级资源还没写好 ...

  8. CSR8670蓝牙芯片驱动I2C接口的1602LCD显示屏

    硬件操作的说明: 1. 使用晶联电子的1602A LCD的I2C通信接口,其工作电压是3.3V  (所以CSR867x I2C信号有电平也要就要是3.3V,若是1.8V则会驱动失败 2.CSR8670 ...

  9. Linux驱动 | MPU6050驱动(I2C)

    MPU6050 2. MPU6050模块 - [野火]STM32模块例程介绍 文档 https://doc.embedfire.com/module/module_tutorial/zh/latest ...

  10. ESP32驱动0.96寸12864 OLED显示屏

    ESP32学习导航帖 1.用adafruit_ssd1306库 代码 #include <Wire.h> #include <Adafruit_SSD1306.h> #defi ...

最新文章

  1. w​i​n​8​.1​无​线​上​网​ ​B​r​o​a​d​c​o​m​ ​8​0​2​.​1​1​n​ ​受​限​问​题
  2. python中处理日期和时间的标准模块是-关于时间和Python的时间处理模块
  3. php 注册树,php常用设计模式(单例,工厂,注册树模式)
  4. 201112阶段二qt图形视图框架
  5. 目录操作相关的系统函数
  6. 觅凤c语言教程,C语言程序设计教程 第1章.ppt
  7. extjs 月份选择控件_ExtJs日期控件案例(可控制时间的选择) | 学步园
  8. mybatis 插入数据后返回自增id
  9. jsp servlet示例_Java Servlet Cookies示例
  10. redis scan命令详解
  11. 下载verycd的方法下载电驴资源隐藏资源的最新可用方法
  12. adb shell 命令
  13. 使用instsrv.exe和srvany.exe创建windows服务
  14. 华为研发机试题目集合整理
  15. “程序员猝死”引发的思考
  16. 北航计算机学院好气派,2017年北京航空航天大学国内排名第几
  17. msgbox在matlab中,Matlab load global 变量 length( ) 函数 msgbox( )函数
  18. 聚苯硫醚离子液体|苯硼酸离子液体|聚缩醛离子液体|透明质酸离子液体
  19. 50本关于软件测试的书籍
  20. c语言如何不用数组排序,c语言实现数组排序.docx

热门文章

  1. 【金融量化】基金止盈止损法则
  2. html5制作当当图书榜页面,当当图书.html
  3. Labview程序优化
  4. snmp安装及自定义mib
  5. spoon mysql教程_kettle 教程(一):简介及入门
  6. 机器学习数据预处理之字符串转数字
  7. 解决知网外文文献无法下载全文的问题
  8. php读取excel 报错_php读取excel内存溢出
  9. G代码表《G代码大全》
  10. 腾讯联手联通推出车联网“网卡”,打“内容”+“流量”的组合拳...