当前位置: 首页 > wzjs >正文

河北网站建设备案价格中天建设集团有限公司总部在哪里

河北网站建设备案价格,中天建设集团有限公司总部在哪里,网站开发服务合同印花税,设计企业网站主页图片前情提要 内容主要包含OLED显示中英文混合的代码逻辑。 OLED屏幕介绍 四针脚 OLED 显示屏是一种常见的显示模块,包括一个 OLED 显示屏和 4 个引脚,常用于嵌入式系统、小型电子设备,如智能手表、健康追踪器等3。 引脚功能3 VCC:…

 前情提要

        内容主要包含OLED显示中英文混合的代码逻辑。

OLED屏幕介绍

        

四针脚 OLED 显示屏是一种常见的显示模块,包括一个 OLED 显示屏和 4 个引脚,常用于嵌入式系统、小型电子设备,如智能手表、健康追踪器等3。

引脚功能3

  • VCC:电源引脚,一般提供 3.3V 或 5V 电源,为模块供电。
  • GND:地引脚,用于提供模块接地。
  • SCL:时钟引脚,传输数据时提供时钟信号,需连接到主控芯片时钟引脚。
  • SDA:数据引脚,用于传输数据,使用 I2C 接口时也称为串行数据线。

特点

  • 接口简单:主要使用 I2C 接口,线路连接少,通信协议简单,降低硬件设计复杂度和成本,也便于软件开发1。
  • 显示效果出色:具有高对比度,能呈现清晰锐利的图像;响应速度快,适合显示动态内容;视角宽广,从各个角度观看画面失真小5。
  • 低功耗:显示黑色时几乎不耗电,在电池供电设备中能有效延长续航时间5。
  • 尺寸小:屏幕尺寸通常较小,如 0.96 英寸等,适用于空间有限的小型设备3。

工作原理

  • OLED 发光原理:通过电场驱动,有机半导体材料和发光材料经载流子注入和复合后实现发光,每个像素点可独立控制发光,无需背光源4。
  • 数据传输与控制:通过 I2C 或 SPI 通信协议,主控芯片向 OLED 显示屏的控制器发送命令和数据,控制器内部的帧缓冲区存储像素状态,根据接收到的指令和数据更新显示内容。

OLED显示基础(重要)

        我单独拿出这个来是因为,写逻辑的时候需要计算显示位置,这张图可以很好的表现出oled屏幕的空间,我们可以将OLED屏幕想象成一个64行128列的表格。

        中文一般是16*16,英文类符号一般是8*16(高*长),也就是说一个汉字在oled屏幕上显示需要花费16行16列,英文同理。中英文在行上占格子的不同,就需要设计一个合理的逻辑方便他们可以一起显示。还需要说明,按照以上论述可以得到中文是最多有4行8列,英文则是4行16列。

        

OLED核心代码逻辑介绍

第一个核心设计是,如何解决通过中文索引取字符点阵?

我设计了一个结构体,构建结构体数组,将汉字作为索引的角色,来取字符点阵,结构体设计如下;Index存储的是3个字节,这里的编码结构是gbk的,所以一个中文是两个字节,然后加上\0构成一个char数组,来作为结构体数组的索引。

typedef struct
{const char Index[3];uint8_t data[32];}Myoled;

取输入,采用循环,每两个字符,为一个中文,将输入的字符串切割成单个中文(SigleChinese),将切割好的单个汉字与Myoled结构体构成的数组中的每一个元素比较,当中文匹配成功,取出中文进行显示。

char SigleChinese[3] = {Chinese[i], Chinese[i + 1], '\0'};uint8_t pIndex;for (pIndex = 0; strcmp(expe[pIndex].Index, "") != 0; pIndex++) {if (strcmp(expe[pIndex].Index, SigleChinese) == 0) {break;}}

   第二个核心设计是,如何中英文混合显示?

这就涉及到我上面提到的位置计算(列位置的计算),初始位置+中文输出次数*16+英文输出次数*8。

offsetcol = Column + 16 * ccount + 8 * ecount;

OLED中英文显示核心代码

//显示实验,名字,日期
void OLED_ShowChar1(uint8_t Line, uint8_t Column, char Char, uint8_t ccount, uint8_t ecount)
{      	uint8_t i;uint8_t offsetcol=0;offsetcol = Column + 16 * ccount + 8 * ecount;OLED_SetCursor((Line - 1) * 2, offsetcol);		//设置光标位置在上半部分for (i = 0; i < 8; i++){OLED_WriteData(OLED_F8x16[Char - ' '][i]);			//显示上半部分内容}OLED_SetCursor((Line - 1) * 2 + 1, offsetcol);	//设置光标位置在下半部分for (i = 0; i < 8; i++){OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]);		//显示下半部分内容}
}void OLED_ShowChinses_oneexpe(uint8_t Line, uint8_t Column,const uint8_t *t, uint8_t ccount, uint8_t ecount)
{      	uint8_t i;uint8_t offsetcol=0;offsetcol = Column + 16 * ccount + 8 * ecount;OLED_SetCursor((Line - 1) * 2, offsetcol);		//设置光标位置在上半部分for (i = 0; i < 16; i++){OLED_WriteData(t[i]);			//显示上半部分内容}OLED_SetCursor((Line - 1) * 2 + 1, offsetcol);	//设置光标位置在下半部分for (i = 0; i < 16; i++){OLED_WriteData(t[i+16]);		//显示下半部分内容} 
}void OLED_ShowChinses_exep1(uint8_t Line, uint8_t Column, char *Chinese) 
{//uint8_t currentColumn = Column;uint8_t i = 0;uint8_t j = 1;uint8_t ccount = 0;uint8_t ecount = 0;while (Chinese[i] != '\0') { if (j == 1){if ((Chinese[1] & 0x80) == 0){Column = (Column - 1) * 8;}else{Column = (Column - 1) * 16;}j = 0;}if ((Chinese[i] & 0x80) == 0) {  // 单字节字符(英文)OLED_ShowChar1(Line, Column, Chinese[i], ccount, ecount);//currentColumn += 1;  i++;ecount++;} else {  // 双字节字符(中文)char SigleChinese[3] = {Chinese[i], Chinese[i + 1], '\0'};uint8_t pIndex;for (pIndex = 0; strcmp(expe[pIndex].Index, "") != 0; pIndex++) {if (strcmp(expe[pIndex].Index, SigleChinese) == 0) {break;}}OLED_ShowChinses_oneexpe(Line, Column, expe[pIndex].data, ccount, ecount);//currentColumn += 1; i += 2;  // 跳过中文的第二个字节ccount++;}}
}

总结

        我认为我在做这个实验的时候遇到的最大的问题不是核心代码的逻辑设计,反而是一个编码问题,就是我的字库文件是utf8的,但是我的编译器是gpk的,这样在汉字匹配的时候就会出现汉字无法正确匹配的问题,我也是在进行调试后才发现,从字模库中取出的汉字并不是我所要的,因为utf8是3字节,然后我的逻辑只取两字节,就会出问题。然后还有一个问题就是,位置的计算,我一开始没反应过来,为啥显示内容没问题,显示位置异常,然后就研究了一下上面的坐标图,就推出了我想的那个公式。总之,遇到过程还是要多调试去发现它中间经历了什么,然后才方便解决,调试真是个好东西。


文章转载自:

http://SBSaAtQz.srbfp.cn
http://Zl8aDf0v.srbfp.cn
http://68T7Q6BL.srbfp.cn
http://BmMGyPAw.srbfp.cn
http://uITQ2ANc.srbfp.cn
http://vP38HO8q.srbfp.cn
http://d8TG87rB.srbfp.cn
http://ANPobQuf.srbfp.cn
http://fF0pcZ8y.srbfp.cn
http://YZsiumjM.srbfp.cn
http://C6gDzc5k.srbfp.cn
http://FA7yvIz2.srbfp.cn
http://DoVvadc5.srbfp.cn
http://AuPnX9J4.srbfp.cn
http://R4fDACvm.srbfp.cn
http://JjorXfyD.srbfp.cn
http://9qBmeb28.srbfp.cn
http://RABcmbPw.srbfp.cn
http://IGnIfuCs.srbfp.cn
http://WEf5Pcli.srbfp.cn
http://60Ni26Eh.srbfp.cn
http://DlLTduAq.srbfp.cn
http://FswjQzFa.srbfp.cn
http://249RIRgL.srbfp.cn
http://dY1AswVN.srbfp.cn
http://PtXTAiNx.srbfp.cn
http://o9bRxzNF.srbfp.cn
http://hMhgaA75.srbfp.cn
http://kJ1xmrCa.srbfp.cn
http://M7Ljvoto.srbfp.cn
http://www.dtcms.com/wzjs/649986.html

相关文章:

  • 上海营销型网站建设公司适合穷人的18个创业项目
  • 用织梦搭建网站北京制作网站主页
  • 威海市住房和城乡建设局网站给你一个网站你怎么做的吗
  • 建立公司网站需要注意什么兼职做网站这样的网站
  • 石家庄好用的招聘网站网站建设厘金手指排名二二
  • wordpress怎样做单页网站h5做的公司网站
  • 后端开发技术seo领导屋
  • 哪家建设公司网站湖北省建设用地预审网站
  • 如何申请免费的网站涨粉 wordpress
  • 大学做网站有哪些成都网站建设科技公司
  • 百度收录网站之后又怎么做品牌设计公司宣传画册
  • 网站开发硬件工程师待遇软件人员外包
  • 企业做网站需要提供什么资料做盗版电影网站后果
  • 什么视频直播网站做挣钱外贸公司有哪些职位
  • 慢慢来 网站建设html编辑器的程序怎么设置
  • 网站开发分析成都哪里可以做网站
  • 完整网站开发需要多久软文广告成功案例
  • 深圳哪家网站公司好单页网站seo如何优化
  • 昌做网站wordpress改二级域名
  • 网站开发毕业设计任务书怎么写pantone色卡官网入口
  • 找工作网站建设网页制作的公司的服务
  • 网站建设前期准备seo公司排名教程
  • 怎么做跟P站一样的网站微信公众平台开发代理
  • 网站建设所学内容搭建一个影视网站
  • p2p网站制作流程wordpress docker好处
  • 分类信息网站建设多少钱装修平台合作
  • 甘肃住房建设厅的网站首页做电影类网站
  • 如何制作网站视频北京专业网站建设网站推广
  • 网站备案 更换接入商广州网站备案要多久
  • 东莞网站推广的公司广州最近流感很厉害吗