2011-11-22 26 views
2

我正在使用Arduino Uno爲諾基亞6100 LCD供電。在我的程序中,我使用RGB 8位輸入,可以使用任何可用的在線轉換工具將其轉換爲24位十六進制,這種轉換我可以照顧。但是,我使用的LCD庫只允許12位十六進制。我如何讓液晶顯示器接受24位十六進制值而不是12,並在屏幕上顯示正確的顏色。或者有沒有辦法在這種情況下從24位十六進制改爲12位十六進制?如何在Nokia 6100上顯示24位RGB十六進制而不是12位十六進制

感謝, 法伊茲

回答

2

也許LCD既懂4位渠道?無論如何,這聽起來就是這是庫的限制:)

要從24位值(3通道x 8位/通道)轉換爲12位值(3通道x 4位/通道) ),只是按比例縮小每個通道因子爲2 - 也就是說,將每個8位通道值[0-255]除以16以獲得4位通道中的近似值[0- 15]。

現在,考慮一下:對於無符號的2的補碼整數,「除以16」和「向右移4」(非符號擴展)實際上是相同的。也就是說,最後4位只是「被拋出」。

想象這24位值,在比特(在32位整數填充):

00000000RRRRrrrrGGGGggggBBBBbbbb 

這是目標值(在16位整數填充):

0000RRRRGGGGBBBB // just get rid of the "small letter" bits :) 

而且注意,這可以用一系列的逐位運算得到的:

r12 = (hex24 >> 20) & 0xF 
g12 = (hex24 >> 12) & 0xF 
b12 = (hex24 >> 4) & 0xF 
hex12 = (r12 << 8) | (g12 << 4) | b12 

編碼愉快。