使用TFT觸摸屏時,想要對字符串,圖形或者數字進行顯示時,發現他們的庫函數中都有一個最重要的函數LCD_ShowChar,貌似目前很少有人分析這個函數,雖然簡單但是還是有點繞的。
先貼一下這個函數的代碼,由于函數顯示分為疊加顯示和非疊加顯示,原理類似,所以只分析非疊加方式的部分應該就都懂了。
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1,t;
u16 y0=y;
u16 colortemp=POINT_COLOR;
num=num-' ';//得到偏移后的值
if(!mode) //非疊加方式
{
for(t=0;t
{
if(size==12)temp=asc2_1206[num][t]; //調用1206字體
else temp=asc2_1608[num][t]; //調用1608字體
for(t1=0;t1<8;t1++)
{
if(temp&0x80)POINT_COLOR=colortemp;
else POINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp<<=1;
y++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超區域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超區域了
break;
}
}
}
}
1206字體和1608字體是兩種不同的字號,就是一個橫向6點,縱向12點,一個橫向8點,縱向16點,從判斷語句可以看出,二者對應的碼表是不一樣的,這個碼表在工程里搜索一下,在font.h里,是一個二維數組。我們這里使用1608字體,以字母“M”為例。查一下碼表中“M”對應的數組,如下:
{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},
' '是碼表的開始,由字母減去' '得到偏移量,也就是二維數組的第幾行。第一個循環開始,就給臨時變量temp賦值為數組的第一個值,由于是1608字體,因此也有一個數組中有16個數,第一個循環就是為了讓temp遍歷這16個數。
之后第二個循環開始,由于數組中的每一個數均是8位,由于每次循環都會對temp左移一位,因此第二個循環的次數是8次。經if(temp&0x80)判斷,如果數字的最高位為1,則進行描點的顏色為字體顏色,如果不是1,則描點顏色為底色。(PS:描點函數LCD_DrawPoint還是很簡單滴,總的來說就是向寫GRAM寄存器R20h,R21h寫入我們希望寫的點顏色,基本操作O(∩_∩)O)
每次移位,y都會自加,第二個循環是8次,而size為16,也就是說數組中每讀過兩個數,y自加16次之后都會清零,然后x加1,就像列掃描一樣,一列16個點結束后會進行到下一列。
超區域那部分就是說超過size了,描個點就返回啦。下面以“M”為例描述下描點的過程。
碼表前8個
0x10 (0,3)
0x04 (0,13)
0x1F (1,3),(1,4),(1,5),(1,6),(1,7)
0xFC (1,8),(1,9),(1,10),(1,11),(1,12),(1,13)
0x1F (2,3),(2,4),(2,5),(2,6),(2,7)
0x00 無
0x00 無
0xFC (3,8),(3,9),(3,10),(3,11),(3,12),(3,13)
碼表后8個
0x1F (4,3),(4,4),(4,5),(4,6),(4,7)
0x00 無
0x1F (5,3),(5,4),(5,5),(5,6),(5,7)
0xFC (5,8),(5,9),(5,10),(5,11),(5,12),(5,13)
0x10 (6,3)
0x04 (6,13)
0x00 無
0x00 無
這個不直觀啊,用matlab的scatter(x,y)描個點,正好就是TFT屏幕顯示的“M”圖形
以上就是ILI9320描點函數LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)的全過程。希望第一次學的小伙伴看了能明白
上一篇:STM32f103的電阻觸摸屏的五點校正算法
下一篇:基于STM32 的FSMC接口驅動TFT彩屏的設計
推薦閱讀
史海拾趣
隨著市場的不斷擴大,DFRobot意識到單一的產品代理無法滿足客戶的需求。于是,公司開始加大研發投入,自主研發機器人和開源硬件產品。同時,為了保證產品的質量和生產效率,DFRobot在成都和北京設立了生產基地,引進先進的生產設備和技術。這種研發與生產一體化的模式,使DFRobot能夠更快速地響應市場變化,推出符合客戶需求的新產品。
隨著微電子學的快速發展,電子設備對元器件的要求也越來越高。Daito公司敏銳地捕捉到了這一市場趨勢,決定對保險絲進行進一步的創新。在1995年,他們成功開發出了適用于電路板安裝的高精度小型報警保險絲。這一產品的推出,不僅滿足了市場對小型化、高精度保險絲的需求,也進一步鞏固了Daito公司在電子行業中的領先地位。
隨后,Daito公司又針對微電子學的進一步發展,推出了可以連續自動安裝的方形微型保險絲。這一產品的推出,大大提高了生產效率,降低了成本,同時也為客戶提供了更加便捷的使用體驗。近年來,隨著面安裝技術的興起,Daito公司又迅速推出了適用于面安裝技術的片狀保險絲,再次展示了他們在電子行業中的創新實力。
請注意,由于篇幅限制,以上僅為兩個故事示例。如果需要更多故事,可以進一步深入研究和探索Daito公司在電子行業中的發展歷程和創新實踐。
隨著市場的不斷變化和需求的日益增長,Crocus意識到只有不斷創新才能保持競爭優勢。因此,公司加大了研發投入,成功推出了一系列具有創新性和競爭力的TMR傳感器產品。這些產品不僅具有高精度、高靈敏度等優異性能,還廣泛應用于電動汽車、清潔能源和自動化等領域,為行業的快速發展提供了有力支持。
為了拓寬市場渠道,Easy Magnet Corp公司積極尋求與國際知名企業的合作。通過與國外企業的技術交流和合作研發,公司不僅獲得了先進的生產技術和管理經驗,還成功地將產品推向了國際市場。這一過程中,公司不僅提升了品牌影響力,還增強了自身的研發實力和市場競爭力。
隨著多媒體技術的快速發展,專業影音產品的市場需求逐漸增長。Aten International緊跟市場趨勢,投入大量研發資源,推出了一系列專業影音產品,包括高清視頻切換器、音頻分配器等。這些產品以其高品質、高穩定性受到了市場的廣泛認可,為Aten International在電子行業樹立了良好的口碑。
PB375 U盤讀寫匯編程序性價比超高的U盤讀寫模塊-PB375,兼容CH375讀寫操作 1. 功能 ● 用于嵌入式系統/單片機讀寫U 盤、閃盤、閃存盤、USB 移動硬盤、USB 讀卡器等。 ● 支持符合USB 相關規范基于Bulk-Only 傳輸協議的各種U 盤/閃 ...… 查看全部問答∨ |
目前只看到一本《內存受限系統之軟件開發》,如果有人知道類似的書籍,麻煩回個貼。。。 比較關心,手機端開發的I/O,內存,運算效率這個方面。… 查看全部問答∨ |
XDJM,尋求一解決方案-關于隱藏U盤盤符或者禁止該U盤使用! 大家好! 當某一類型的優盤插入PC后,我需要隱藏這個盤符,或者禁止用戶訪問這個U盤! 大家有什么好的解決方案(最好在C++下面調用系統庫?),謝謝! ...… 查看全部問答∨ |
你們好: 我用at89s52 晶振是11.059.at24c04 上拉電阻是4.7k SDA與SCL管腳是p2.0與p2.1 能讀不能寫,以下是我的eeprom基本程序,請各位看看。 void start_i2c(void) //開始總線 { SDA=1; _nop_(); SCL=1; _n ...… 查看全部問答∨ |
一、學習要點:作為MSP430單片機的第一個入門程序,主要掌握MSP430單片機I/O的操作,I/O口初始化。并且通過實踐進一步掌握對IAR MSP430軟件的操作,以及 MSP430FET全系列JTAG仿真器 與 MSP430F135核心實驗板 的了解與使用。 二、程序執行效果: M ...… 查看全部問答∨ |
|
本人最近在做MSP430與CC2480相連的電路設計,但是不知道這兩者之間怎么連啊,另外,2480有時鐘晶振,MSP430也有晶振,所以搞不清楚到底是兩個模塊都要設置晶振還是只是其中一個設置就行。請各位大神幫個忙解答下!非常感謝啊!!!… 查看全部問答∨ |
經常遇到客戶在咨詢蜂鳴器產品的時候說同行的蜂鳴器經常出現蜂鳴器帽脫落的現象,其現象描述如下:1.以前有鉛蜂鳴器很少約0.1%,現轉為無鉛蜂鳴器約有1%不良;2.蜂鳴器帽的超聲波接合處粘合不良,因不會脫落其超聲波接合處周圍有明顯的粘跡而易脫落 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉MicroPython(一) 燒入固件, 初識
- ESP32玩轉MicroPython(二) 連接WIFI網絡 webperl文件傳輸
- ESP32玩轉MicroPython(三) 延時、計時 和GPIO操作
- 玩轉 ESP32 + Arduino (一) 開發環境搭建
- 玩轉 ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉 ESP32 + Arduino (五) platformIO引入類庫 自開發庫 串口打印字符串
- 玩轉 ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉 ESP32 + Arduino (八) U8G2驅動OLED