|
发表于 2020-9-19 16:22:59
|
显示全部楼层
彩屏的文字取模和黑白屏一样啊,是写显存部分不一样,不是直接写字符表进去,而是根据码表该位为 0 表示显示底色,这个时候写底色,写完整个像素;该位为 1 写前景色,也是一次写完整个像素,也就是说需要对字符表的一个字节的每一位都做一次判断,每次判断写一次完整像素。
荔枝
- fcMSB = Msb(ForceColor)
- fcLSB = ForceColor
- bcMSB = Msb(BackColor)
- bcLSB = BackColor
- iLs = Len(Charat)
- SetftLCDAddress(dY, dY + 7, dX, dX + iLs * 6)
- WriteInstruction(&h2c)
- For is = 1 To iLs
- bChr = Asc(Mid(Charat,is,1)) - 32 ' 根据每一个字符的 ASCII Code,在码表数组中找到对应的数据,一个字符是 5x7(+1) 点的 5 个 Byte 数据
- For iFn = 0 To 5 ' 循环 6 次,比码表数据多一次(写入一排像素的字符间隔)
- iChn = Ft1(bChr * 5 + iFn)
- For wRite = 0 To 7 ' 循环检查每 1byte 码表数据的每一个 bit <--- [color=Red]黑白屏不需要这个循环,直接写 iChn 到显存,彩屏则循环整个字节每次循环都写一个像素,这个像素多少位你就写多少位[/color]
- bFontbit = iChn And &b00000001 ' 总是从最低位检查
- If bFontbit = 1 And iFn < 5 Then ' 如码表中该位为 1 则写入 1bit 的前景色,为 0 则写入 1bit 的背景色;写完码表数据后,多写入一排像素宽度的字符间距
- WriteDatums(fcMSB)
- WriteDatums(fcLSB)
- Else
- WriteDatums(bcMSB)
- WriteDatums(bcLSB)
- End If
- Shift(Right, 1, iChn) ' 检查完的这一位数据移走,将高一位移动到最低位,即 >> 运算
- Next wRite
- Next iFn
- Next is
- Return 0
复制代码 |
|