Arduino:UTFT LCD(220 * 176)使用自定義字型
上次用四位數碼管做了個簡易的電子鐘,這次再用手頭的UTFT液晶屏試試看。
顯示屏硬體是QDtech_2.2寸SPI串列埠176*220模組,主控為IL9225,使用了賣家提供的驅動。
使用很簡單,理論上是可以直接插入Arduino UNO R3的,但因為這樣會佔用了A5、A4口(SCL、SDA),從而導致I2C的DS3231模組不能正常工作,所以我用了一塊自制的最小系統板,並將A5、A4腳改接到3、4號引腳(物理引腳PIN5、PIN6)上。對應的,Arduino程式碼的建構函式也改成:
UTFT lcd(QD220A, A2, A1, 3, 4, A3);
驅動安裝成功後可以試著執行例項,很有意思。唯一的問題是,自帶的字型只有大、小、仿七段LED數字這三種。
那麼如何使用自己喜歡的字型,甚至顯示中文呢?
如果不想折騰,也不需要中文,那麼不妨看下這個網站:http://rinkydinkelectronics.com/r_fonts.php,選一種字型,將C程式碼追加或替換驅動自帶的DefaultFonts.c即可。
進一步分析驅動c原始碼,結合以上字型檔案內容,我是這麼實現中文的:
以hallfetica_normal為例,
fontdatatype hallfetica_normal[3044] PROGMEM={
0x10,0x10,0x20,0x5F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <space>
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // !
。。。。。
注意第一行的0x10,0x10,0x20,0x5F,其含義是:寬度,高度,首字元的ASCII,字元總數。翻譯成十進位制的人話就是:這套字符集中,每個字元寬16畫素,高16畫素,首字元ASCII程式碼32(即空格),總共95個字元。所以陣列大小應該是16*16*95/8 + 4 = 3044(那四個附加資訊也得算)。
緊接著的字模程式碼當然就決定了字元顯示起來會是什麼樣子。所以再下載個取字模的軟體就能“自制”喜歡的字型了。我用的是PC2LCD2002,很好用。取模選項為:陰碼、逐行式、順向。
由於這次是要做個時鐘,所以不牽涉英文字元和標點符號(冒號除外)。那就正好,冒號以後的字元都可以刪掉節省寶貴的儲存空間,只保留最初的27個即可(當然要重新計算陣列大小);空格之後(當然空格你也可以挪作他用,只是我喜歡留著那一串0x00)、字元“0”之前的那些個標點符號,取上中文模。
舉例而言,我取的27個字模分別是:
星期年月日一二三四五六七八九零0123456789:
對應原始程式碼中的:
!"#$%&'()*+,-./0123456789:
String wk = "!\""; // 對應“星期”
switch (now.dayOfWeek())
{
case 0:
wk += "%"; //對應“日”
break;
case 1:
wk += "&"; //對應“一”
break;
case 2:
wk += "'"; //對應“二”
break;
case 3:
wk += "("; //對應“三”
break;
case 4:
wk += ")"; //對應“四”
break;
case 5:
wk += "*"; //對應“五”
break;
case 6:
wk += "+"; //對應“六”
break;
default:
break;
}
lcd.print(wk, 86, 52, 0);
相關推薦
Arduino:UTFT LCD(220 * 176)使用自定義字型
上次用四位數碼管做了個簡易的電子鐘,這次再用手頭的UTFT液晶屏試試看。顯示屏硬體是QDtech_2.2寸SPI串列埠176*220模組,主控為IL9225,使用了賣家提供的驅動。使用很簡單,理論上是可以直接插入Arduino UNO R3的,但因為這樣會佔用了A5、A4口(
ios開發之--仿(微信)自定義表情鍵盤
lai signed avi 創建 不能 url div load mps 先附上demo:https://github.com/hgl753951/CusEmoji.git 效果圖如下: 先說下具體的實現功能: 1,本地加載了一些H5的代碼,直接使用webview的lo
SpringMVC(十二)自定義異常處理器 HandlerExceptionResolver(接口)
pin org ota admin pack property framework ase exception 自定義異常處理器和系統異常處理器的提升版可以實現相同的功能,但是使用的方法不同,自定義異常處理器可以不用在配置文件中配置name多東西,只需要一個異常處理器就可以
Salesforce 開發整理(十一) 自定義放大鏡查找效果
!= empty ole str 技術分享 ring sql value idp 有時候在自定義的visualforce頁面上,需要實現系統標準的查找樣式,當不能使用標準的style的時候,我們只能選擇自定義實現,下面分享一個demo,預覽效果如下: 實現代碼,Visua
C++語言學習(二十)——自定義內存管理
single null allocated 析構函數 opera .get cat st2 argc C++語言學習(二十)——自定義內存管理 一、統計類對象中成員變量的訪問次數 mutable是為了突破const函數的限制而設計的,mutable修飾的成員變量將永遠處於可
SpringCloud(二十)自定義eureka-client服務列表
當我們不需要從eureka等獲取服務列表時,可以自己指定服務列表。 ribbon: eureka: #禁用eureka ribbon enabled: false eureka-servi
ios多執行緒操作(十二)—— 自定義NSOperation實現網路下載後回撥
- (void)main { @autoreleasepool { // 下載圖片的耗時操作 NSURL *url = [NSURL URLWithString:self.urlString]; NSData *data = [NSDa
angularJS學習之路(十八)---自定義指令執行過程
angularJS中對指令的解析與執行過程是這樣的: · 瀏覽器得到 HTML 字串內容,解析得到 DOM 結構。 · ng 引入,把 DOM 結構扔給 $compile 函式處理
angularJS學習之路(三十)---自定義指令---templateUrl
第一種寫法: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&
nginx-1.12.0版本(編譯安裝)-自定義安裝路徑
nginx-1.12.0版本(編譯安裝)-自定義安裝路徑 安裝路徑:/application/nginx-1.12.0 1.前期準備 安裝編譯需要的gcc和gcc-c++ yum inst
(二十)自定義資料庫連線池
目錄 使用資料庫連線池優化資料庫效能 之前我們對資料庫的操作,其實是有很大問題的; 因為我們是每次操作資料庫之前,都會問資料庫要一個連線,用完之後,就把這個連結還給了資料庫; 其實資料庫連線是重量級的東西,資料庫每次建立一個連接出來,都要花
SpringMVC系列(十二)自定義攔截器
Spring MVC也可以使用攔截器對請求進行攔截處理,使用者可以自定義攔截器來實現特定的功能,自定義的攔截器必須實現HandlerInterceptor介面 – preHandle():這個方法在業務處理器處理請求之前被呼叫,在該方法中對使用者請求 request 進行處理
題目1004:Median(qsort函數自定義cmp函數)
%d font com ron ring scan sort mat .com 題目鏈接:http://ac.jobdu.com/problem.php?pid=1004 詳解鏈接:https://github.com/zpfbuaa/JobduInCPlusPlus
分類算法:決策樹(C4.5)(轉)
clas 依賴 1.5 -s clip win pan 定義 衡量 C4.5是機器學習算法中的另一個分類決策樹算法,它是基於ID3算法進行改進後的一種重要算法,相比於ID3算法,改進有如下幾個要點: 1)用信息增益率來選擇屬性。ID3選擇屬性用的是子樹的信息增益,這裏可
添磚加瓦:設計模式(總述)
.cn 以及 行為 怎樣 src 工程 span 軟件 軟件設計模式 軟件設計模式是由GoF(Gang of Four)將模式的概念引入軟件工程領域後誕生的。軟件模式與具體的應用領域無關。 GoF提出的設計模式有23個,大體可分為三類: (1)創建型模式:如何創
linux學習類目:常見命令(持續更新)
基礎命令mkdir=make directorys=創建目錄例子: mkdir /data=在根/下創建data目錄ls=list=列表目錄文件例子: ls / =列根/目錄下的目錄和文件參數: -l(long)=長格式 -d(directorys)=查
FTP兩種工作模式:主動模式(Active FTP)和被動模式
ftp 主動(port) 被動(pasv)模式在主動模式下,FTP客戶端隨機開啟一個大於1024的端口N向服務器的21號端口發起連接,然後開放N+1號端口進行監聽,並向服務器發出PORT N+1命令。服務器接收到命令後,會用其本地的FTP數據端口(通常是20)來連接客戶端指定的端口N+1,進行數據傳輸。在被
Spring Boot快速入門(五):使用MyBatis(註解形式)進行數據庫操作
訪問 ins name ont clas assert xxx main apach 原文地址:https://lierabbit.cn/articles/7 添加依賴 新建項目選擇web,MyBatis,MySQL三個依賴 對於已存在的項目可以在bulid.gradle
python並發編程之多進程(二):互斥鎖(同步鎖)&進程其他屬性&進程間通信(queue)&生產者消費者模型
互斥 數據 socket pan copy src too 如果 搶票 一,互斥鎖,同步鎖 進程之間數據不共享,但是共享同一套文件系統,所以訪問同一個文件,或同一個打印終端,是沒有問題的, 競爭帶來的結果就是錯亂,如何控制,就是加鎖處理 part1:多個進程共享同
做題記錄:P2024 食物鏈(洛谷)
節點 找到 find merge 如果 div clas spa blank P2024 食物鏈 /*思路:並查集,因為一開始我們並不知道每一只動物是哪一個種類的, 所以我們幹脆建立三倍於n的空間,1~n這三分之一用來存第i只動物是A 的情況,n+1~2n這三分之一用來存