ssd1306显示问题

attachments-2018-08-04cl1MHw5b7f62769b14d.JPG1.超出一行宽度只显示半个中文,以及字库里的'禺'显示不了的问题,在disp封装在lod里的时候应该怎么解决?

请先 登录 后评论

2 个回答

朱天华 - 软件工程师

1、超出一行宽度仅显示半个中文的问题,要自己通过脚本去实现控制,目前汉字是16X16,ascii可见字符是8X16,可参考如下代码自己控制换行(注意下面的代码,CHAR_WIDTH是6,你需要改成8)

--1个ASCII字符宽度为6像素,高度为12像素;汉字宽度和高度都为12像素
CHAR_WIDTH = 6

--- 按照布局显示文本字符串.
-- @string text,文本字符串,GB2312编码
-- @number yOffset,在LCD上显示第一行文本的y坐标
-- @number rowSpace,相邻两行文本的显示间隔
-- @number rowMaxBytes,每行文本显示的最大字节数
-- @number maxRows,每屏最多显示的行数,此值为0xFFFF时,并不在lcd上显示文本字符串
-- @string[opt="LEFT"] align,对齐方式:LEFT表示靠左,CENTER表示居中
-- @return rmnText,未处理的文本字符串,GB2312编码
-- @return dispRows,实际显示的行数
-- @usage
-- layout.dispText("抱歉!激活失败请重试",23,6,14,2,"CENTER")
-- layout.dispText("雾霾橙色预警仍生效。市教委紧急下发通知,除了要求一切学校停止户外活动外,还要求中学停止室外体育课、早操、课间操、课外体育活动、业余训练。在持续橙色预警期间,许可中小学校根据区域空气质量状况和学生、家长的要求,经市、区教委批准后弹性安排教学活动",42,4,18,7)
function dispText(text,yOffset,rowSpace,rowMaxBytes,maxRows,align)
    align = align or "LEFT"
   
    local rowTextStart,rowTextEnd,curRow,i = 1,rowMaxBytes
    for curRow=1,maxRows do
        local asciiCnt = 0
        i = rowTextStart
        while i<=rowTextEnd do
            if i>text:len() then rowTextEnd=text:len() break end
            if text:byte(i)>0x7F then
                i = i+2
            else
                i = i+1
                asciiCnt = asciiCnt+1
            end
        end
        if asciiCnt%2==1 and rowTextEnd-rowTextStart+1>=rowMaxBytes then rowTextEnd=rowTextEnd-1 end
        if maxRows~=0xFFFF then
            disp.puttext(text:sub(rowTextStart,rowTextEnd),
                (lcd.WIDTH-((align=="LEFT" and rowMaxBytes or (rowTextEnd-rowTextStart+1))*CHAR_WIDTH))/2,
                yOffset+(curRow-1)*(CHAR_WIDTH*2+rowSpace))
        end
        if rowTextEnd>=text:len() then
            return "",curRow
        end
        rowTextStart,rowTextEnd = rowTextEnd+1,rowTextEnd+rowMaxBytes
    end
    return text:sub(rowTextEnd-rowMaxBytes+1,-1),curRow
end

2、不支持二级汉字的问题,我们在0028的lod里面评估一下是否可以加入

请先 登录 后评论
技术销售Delectate
擅长:IT

不支持该文字,因为底层空间有限,所以只能支持gb2312,仅支持一级汉字,还没有支持二级汉字。

所以在显示的时候,遇到不支持的汉字会出现乱码。

请先 登录 后评论
  • 1 关注
  • 0 收藏,4345 浏览
  • 郑伟明 提出于 2018-08-24 09:44

相似问题