历史上的今天
返回首页

历史上的今天

今天是:2024年11月11日(星期一)

正在发生

2019年11月11日 | STM8L驱动I2C类型的12864

2019-11-11 来源: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);

推荐阅读

史海拾趣

Digital Equipment Corp公司的发展小趣事

1957年,麻省理工学院的工程师肯尼斯·奥尔森(Kenneth Olsen)和哈伯特·安德森(Harlan Anderson)共同创立了Digital Equipment Corporation(DEC)。他们最初的目标是开发和生产创新的数字计算设备。凭借他们在数字技术领域的专业知识和独特视角,DEC推出了首批数字实验室和数字系统组件,这些产品在市场上取得了初步的成功,为DEC的发展奠定了坚实的基础。

Esterline Technologies Corporation公司的发展小趣事

2001年,惠普公司与康柏公司宣布合并,DEC作为康柏的一部分也随之并入惠普。这次合并进一步扩大了DEC的业务范围和市场影响力。在合并后,DEC的计算机产品和技术被整合到惠普的产品线中,同时DEC的品牌也逐渐淡出市场。然而,DEC在计算机行业中的贡献和影响力仍然被广泛认可,其技术遗产和创新精神在惠普及其他科技公司中得到了传承和发展。

FCI / Amphenol公司的发展小趣事

FCI公司起源于1988年,当时由Framatome组建,其初衷是作为核能领域外的一个多样化经营项目。然而,随着市场的变化和公司的战略调整,FCI逐渐将重心转向连接器制造。经过20多次的精心收购和策略性扩张,FCI在短短20年内便成长为全球最大的连接器制造公司之一。这一转变不仅展现了FCI对市场敏锐的洞察力,也体现了其卓越的管理能力和执行力。

台湾丰宾(CapXon)公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,CapXon公司开始积极拓展市场,寻求更广阔的发展空间。公司不仅在台湾本土市场取得了显著的成果,还逐步将产品推向国际市场,与全球众多知名电子品牌建立了长期稳定的合作关系。同时,CapXon还注重品牌塑造,通过一系列的市场推广活动,提高了品牌知名度和美誉度,进一步巩固了公司在行业中的地位。

DELTA公司的发展小趣事

Delta公司始终将技术创新作为推动企业发展的核心动力。公司不断投入巨资进行技术研发和创新,积极引进先进技术和设备,培养高素质的研发人才。这些努力使Delta在电源管理、能源管理、智能绿生活等领域取得了多项技术突破和专利成果,不仅提升了公司的核心竞争力,还引领了整个行业的发展方向。

Exclara Inc公司的发展小趣事

随着LED技术的不断发展和市场需求的不断变化,Exclara看到了新的市场机遇。公司凭借在LED领域的技术积累和市场经验,成功进军了智能家居、智能照明等新兴市场。在这些新兴市场中,公司凭借其独特的技术优势和创新能力,迅速获得了市场份额和客户的认可。面对新的市场挑战和机遇,Exclara将继续保持创新精神和技术实力,为电子行业的发展贡献更多的力量。

请注意,以上故事框架仅供参考,具体内容和细节需要根据实际情况进行补充和完善。

问答坊 | AI 解惑

半导体材料瓶颈

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 半导体支撑材料瓶颈有待突破 2006-7-6    国际半导体设备暨材料协会(SEMI)今年初预测认为,2006年总体材料市场增长7.2%,将从2005年的179.53亿美元增长至192.4亿美元。在300毫米晶圆技 ...…

查看全部问答>

全面了解红外遥控

英文版 可以当不错的学习资料哦…

查看全部问答>

高质量C++C编程指南

不错的东东,不敢独享………

查看全部问答>

关于WINCE编译的问题

wince在编译的过程中,只看到了生成了许多LIB文件,比如netui.lib,但最后他是怎样将这些LIB文件又生成DLL文件的呢?比如netui.dll。…

查看全部问答>

请问哪里可以下载免费WinCE源码?

试了几个网页,都没成功,多谢!…

查看全部问答>

关于登陆eeworld问题

为什么选择那个“一周有效” 却登陆不了 现在每次都要输入帐号密码了  真烦!…

查看全部问答>

找驱动开发人

找人开发一USB外设驱动,价钱好说,最好人在深圳. tel:13826557937 QQ:270549656…

查看全部问答>

430F413编程遇难提问(1)

当用JTAG编程时,第八引线TST要与单片机那个管脚对应联接呀?请高手帮忙解答,谢谢!…

查看全部问答>

stm8l-discovery下载调试问题

调试模式启动不了了,请问是怎么回事啊,JP1跳线帽接在on上,ST-LINK两个跳线帽也都接上了 错误信息如下: Tue May 01 14:38:43 2012: Failed to initialize communcation with hardware: SWIM error [30200]: ST-Link connection error Tue May ...…

查看全部问答>

TI通用质量指南

本帖最后由 dontium 于 2015-1-23 11:47 编辑 本通用质量指南适用于 TI 提供的有关材料、产品、服务、制造工艺、测试、控制、处置、贮存和运输措施的质量保证,以及TI所采用和/或应用的旨在确保TI部件与已公布和/或特别指明的规格相符合的管理流程 ...…

查看全部问答>