历史上的今天
返回首页

历史上的今天

今天是:2025年03月04日(星期二)

正在发生

2020年03月04日 | STM8L驱动I2C类型的12864

2020-03-04 来源:eefocus

原理

之前没有操作过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 Address

writec(0x10); //Set Column Address = 0

writec(0x00); //Colum from S1 -> S128 auto add

for(j=0;j<132;j++)

{

writed( FillData );

}

}

}


void LcmInit(void)

{

IO_ST7565_CS_1;

IO_ST7565_RST_0;

delay_ms(10); //hard reset for 10ms

IO_ST7565_RST_1;

delay_ms(10); 


writec(0xAE); //Display OFF

writec(0xA2); //1/64 Duty 1/9 Bias

writec(0xA0); //ADC select S0->S131(玻璃设计用S1-S128)

writec(0xC0); //com1 --> com64

writec(0x24); //对某些模块没用,用的外部Rb/Ra

writec(0x81); //Sets V0

writec(48);   //内部电位器调节对比度

writec(0x2F); //voltage follower ON regulator ON booster ON

writec(0xA6); //Normal Display (not reverse dispplay)

writec(0xA4); //Entire Display Disable

writec(0x40); //Set Display Start Line = com0

writec(0xB0); //Set Page Address = 0

writec(0x10); //Set Column Address 4 higher bits = 0

writec(0x00); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG128

LcmClear(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

推荐阅读

史海拾趣

Chips And Technologies Inc公司的发展小趣事

Chips And Technologies Inc的创业之路始于1984年,由Gordon A. Campbell和Dado Banatao在加利福尼亚州的米尔皮塔斯共同创立。作为一家早期的无晶圆厂半导体公司,C&T凭借对技术的深刻理解和市场的前瞻性,成功推出了首款四芯片EGA芯片组,这款产品能够处理增强型图形适配器上19个IBM专有芯片的功能,为当时的个人电脑制造商提供了强大的支持。

Electro-Optical Systems Inc公司的发展小趣事

进入21世纪,EOS在红外探测器领域取得了重大技术突破。他们成功将探测器的波长范围扩展到远红外(40微米)领域,这一成果在行业内引起了广泛关注。同时,EOS的产品也凭借其高性能、高可靠性和高稳定性,赢得了广大用户的认可和信赖。他们开始与国内外多家知名企业建立合作关系,产品广泛应用于军事、科研、安防等领域。

Asian Best Components Co Ltd公司的发展小趣事

Asian Best Components Co Ltd深知人才是企业发展的核心力量。因此,公司一直高度重视人才的培养和引进。公司建立了完善的人才培训体系,通过内部培训、外部交流等方式不断提升员工的技能水平和综合素质。同时,公司还积极引进国内外优秀人才,为公司的技术创新和市场拓展提供了有力支持。这种对人才的重视和投入,使得Asian Best在激烈的市场竞争中始终保持着强劲的发展势头。


以上是根据您的要求创作的5个关于Asian Best Components Co Ltd公司发展起来的相关故事。这些故事旨在展现公司在技术创新、市场拓展、品质管理、环保理念以及人才培养等方面的努力和成就。请注意,这些故事纯属虚构,如有雷同纯属巧合。

HI Microwave Technology Limited公司的发展小趣事

HI Microwave深知质量是企业生存和发展的根本。因此,公司从原材料采购到成品出厂的每一个环节都严格把关,确保产品质量符合国际标准和客户要求。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这种以客户为中心的服务理念赢得了客户的信任和忠诚,也为公司的持续发展奠定了坚实的基础。

高博(GBG)公司的发展小趣事

在巩固功率MOSFET市场地位的同时,谷峰公司还积极拓展其他应用领域。公司的半导体产品广泛应用于PD快充、机器人、电动工具、LED照明、5G基站、充电桩等多个领域,满足了不同客户的多样化需求。此外,谷峰还紧跟行业发展趋势,不断推出新产品和技术解决方案,以应对市场的快速变化。这种多元化的发展策略不仅为公司带来了新的增长点,还增强了其抵御市场风险的能力。

上海超致公司的发展小趣事

在电子产品行业,品质控制和质量保证是企业生存和发展的关键。上海超致始终将品质放在首位,建立了严格的质量管理体系,从原材料采购到生产制造、产品检测等各个环节都严格把控品质。公司还引进了先进的生产设备和检测仪器,确保产品的可靠性和稳定性。这种对品质的执着追求使得上海超致的产品在市场上获得了良好的口碑和广泛的认可。

问答坊 | AI 解惑

2440开发板,修改LCD

之前是3.5寸屏640*480,现在我要换成12.1寸屏(800*600) 需要在哪几个函数进行改动啊?? 谢谢大家了!!…

查看全部问答>

dsdfsdaf

dfasdfasdfdsa…

查看全部问答>

比较一下单片机、DSP、PLC、CPLD、FPGA、嵌入式这几中开发的区别???

最近想学硬件开发,不知道单片机、DSP、PLC、CPLD、FPGA、嵌入式这几中开发有什么区别,请各位大哥指点一下。     先在这里谢过了!!!!!…

查看全部问答>

关于format 的问题

我想format C,但dos提示命令不是内部命令或外部命令,哪位兄弟知道,怎么解决??? …

查看全部问答>

今天又在硅片上画画了

首先遇到了个小问题     解决中   最终的成功   不好意思,又来这里发不符合论坛主题的东西啦,哈哈   准备该行做画家了,觉得总会有人拿电子电路来画画的,至少PCB是可以的吧。哈哈…

查看全部问答>

在Zstack的协调器上实现看门狗

现在我的协调器不能停止,因为它是联系整个zigbee网络和上位主控的“交通枢纽”,主控对下面的zigbee网络设备的状态信息都从这个协调器获取,所以不能停止它。即使死了,也要有个看门狗来重启它来恢复整个zigbee网络。 我的问题:这个看门狗是软件 ...…

查看全部问答>

时序问题

FIFO 的PRO_FULL 信号工作一段时间后信号一直无效,用chipscope看了WR信号一直有写,可以肯定是写到了设定值。为什么出现这种情况?写入时钟为 108Mhz,FIFO为V9.1 .另外有时候修改一点不是很相关的RTL代码,重新综合布线后,输出的时序不正常了,是 ...…

查看全部问答>

Cyclone V试用心得五:编程时居然没Cyclone V器件

本来这篇早就应该写了,但我在下载RAM测试的sof文件时,却没有Cyclone V器件,一个都没有,后来我在网上收到,原来是得安装12.0插件。我到ALTERA网站上下了插件600多M,可是我装上后,运行12.0时却不时的退出,根本就没法进行设计。我没有办法装了几 ...…

查看全部问答>

UCGUI鼠标的光标如何用按键控制

     我想用上下左右四个按键,来控制鼠标光标的移动。哪位高手可以指导下,我的QQ是:1358356920…

查看全部问答>