楊凌 曾文波 鐘建坤 楊錦喜



摘要:U盾密碼器應用廣泛,選用外形美觀的微型U盾液晶顯示屏,為了保證微型U盾液晶顯示屏模組的性能,選用功耗低,組件數量少,性能穩定的驅動器ST7567A。針對驅動器,闡述了驅動器的特點,研究了驅動器的硬件引腳及驅動方式。采用微處理器STC89C52對微型U盾液晶顯示模組進行驅動設計,驅動器與微處理器之間使用4線SPI接口時序通信方式,針對U盾液晶顯示屏設計了驅動電路,并對屏幕顯示功能進行了軟件設計。實現了U盾液晶顯示屏屏幕顯示漢字及圖片的功能。
關鍵詞:U盾液晶顯示屏;驅動器;ST7567A;顯示
中圖分類號:TP311? ? ?文獻標識碼:A
文章編號:1009-3044(2022)30-0095-03
開放科學(資源服務)標識碼(OSID):
1 引言
U盾密碼器是用于網上銀行電子簽名和數字認證的工具,它能夠防止各種木馬病毒、黑客等網絡不安全因素,保障網上銀行資金的安全[1]。隨著U盾的廣泛使用,U盾的核心部件液晶顯示模組的需求也日漸提高。
本文使用的微型U盾液晶顯示屏型號為YMK12864P,外形設計美觀,屏幕非可視區域寬度能夠達到0.9mm,且無須擴散膜,自帶擴散功能的底偏光片,降低了生產成本[2]。液晶顯示屏和驅動器一起構成液晶顯示模組。為了保障U盾液晶顯示模組的性能,對液晶顯示屏驅動器的選用和設計至關重要。本文采用的微型U盾液晶顯示屏驅動器型號為ST7567A,其功耗低,組件數量少,性能穩定。本文通過對驅動器的研究,針對U盾液晶顯示屏產品設計了驅動電路,并對屏幕顯示功能進行程序設計。
2 微型U盾LCD驅動器
U盾密碼器產品包含了液晶顯示屏及驅動器。ST7567A是一款單芯片點陣式LCD驅動器,內置振蕩電路和低功率電源電路,無須外部時鐘或電源即可產生LCD驅動信號,從而可以制造出組件數量少,功耗最低的顯示系統。
ST7567A可直接連接到具有8位并行接口,4線串行接口,3線串行接口或I2C串行接口的微處理器。本文使用的是4線串行接口(4-SPI)連接方式。
ST7567A內部有一個存儲顯示數據RAM,簡稱為DDRAM,用于存儲LCD顯示屏的點陣數據。微處理器能夠通過I/0口對DDRAM進行讀取和寫入,在LCD顯示數據的時候同時,數據也可以寫入DDRAM。
2.1 硬件引腳
ST7576A硬件引腳如圖1所示。部分引腳功能為:
(1)引腳SEG0-SEG131,COM0-COM63和COMS為驅動器輸出引腳。
(2)微處理器接口引腳為RSTB、CSB、A0。RSTB引腳用于硬件復位,內部初始化。CSB引腳為片選輸入端,當CSB=0時啟用接口訪問。A0引腳用于判斷D[7:0]上的信號是數據還是命令,當A0=1時表示顯示數據,當A0=0時表示信號為命令。
(3)配置引腳包含SI2、PSB、C86,用于選擇接口類型,如表1所示,其中“0”表示低電平,“1”表示高電平。本文采用串行4線SPI傳輸方式,因此設置引腳SI2=0,PSB=0,C86=1。
2.2 4線SPI接口時序
SPI,全稱Serial Peripheral Interface,是一種通信協議。這種協議速度快,屬于同步、全雙工模式,該協議在數據傳輸時僅需四根線,占用芯片引腳數量少[3]。4線SPI接口時序圖如圖2所示。由時序圖可知,當CSB為高電平時,D0-D7引腳為高阻態。當CSB為低電平時,串行數據(SDA)和串行時鐘(SCL)輸入被使能。在第八個串行時鐘后,SDA上的串行數據將被處理為8位并行數據。同時,引腳A0被鎖存且指示出8位并行數據是用于顯示數據還是指令。SDA上的串行數據在SCL時鐘的上升沿被鎖存。
3 硬件驅動電路設計
3.1 微處理器STC89C52
本文使用微處理器STC89C52對微型U盾液晶顯示模組進行驅動。STC89C52具備低功耗、高性能的特性[4],是由STC公司生產的。雖然使用的仍然是MCS-51內核,但相較于傳統的51單片機更加靈活實用,STC89C52具備8位CPU,自帶8K字節可編程可擦除的只讀存儲器,512字節的RAM,32位I/O口線[5]。能夠為嵌入式控制應用系統提供有效的解決方案。
微處理器STC89C52共有4組8位的可編程I/O口,分別是P0、P1、P2、P3。復位后,P0、P1、P2、P3為準雙向口/弱上拉,其中P0如果作為總線擴展用,無須添加上拉電阻,但作為I/O口用時,則要設置上拉電阻[6]。每個I/O口有8個引腳,即8位,可實現輸入輸出功能。根據硬件的情況,本文采用8位準雙向I/O口線P3,用于連接液晶顯示模組。
3.2 驅動電路設計
硬件驅動電路連接圖如圖3所示,其中P3.0-P3.5為微處理器STC89C52的IO引腳,CS、A0、SCL、SDA、RES為液晶顯示屏驅動器ST7567A的引腳。YMK12864P為LCD屏型號,驅動器與LCD屏共同構成液晶顯示模組。
由于微處理器STC89C52不帶標準SPI接口[7],因此需要應用軟件模擬的方式,使用IO口模擬SPI通信。本文采用P3.0、P3.1、P3.3、P3.4、P3.5引腳模擬SPI通信,這幾個引腳分別連接CS、A0、SCL、SDA、RES。其中,CS引腳為片選信號,低電平有效,該引腳相當于是屏幕的開關,高電平則無法對LCD屏進行操作,只有低電平時才能對LCD屏進行操作。A0引腳為命令/數據信號,低電平時用于數據傳輸,高電平時用于命令傳輸。SCL引腳上升沿有效,SDA引腳用于數據傳輸,RES引腳是復位引腳。
4 驅動程序設計與實現
4.1 屏幕顯示設計
本文在屏幕上顯示漢字及圖片,根據屏幕顯示原理,程序總體設計思路為:
(1)屏幕初始化。
(2)字模提取。采用縱向取模,字節倒序,生成字碼。
(3)設置頁地址。明確漢字或圖片所需頁數。
(4)設置列地址。列地址需要分別取地址的高位及低位。
(5)讀取漢字及圖片字碼,在屏幕上顯示效果。
4.1.1 屏幕掃描方向設計
微型U盾LCD屏YMK12864P為128*64點陣屏。可分為8頁,每頁8行(D7-D0),共128列。D7-D0顯示數據,讀取數據時從高位開始讀,顯示數據的每個字節后,列地址自動增加。MX、MY用于控制屏幕的掃描方向,其中,MX用于控制屏幕列向的掃描方向,MY用于控制頁的掃描方向。屏幕掃描方向如圖4所示。當MX=0時,從第0列掃描至最后一列,當MX=1時,反向。當MY=0時,屏幕從第0頁掃描至最后一頁,當MY=1時,反向。
4.1.2 漢字顯示程序設計
漢字顯示程序設計分為以下幾個步驟:
(1)字模提取
本文采用字模提取工具,根據屏幕掃描方向,設計漢字字模提取參數,如圖5所示,參數為縱向取模,字節倒序,同時設置小四號字體,這樣生成的字碼點陣為16*16大小。
漢字“河”的字碼為:
HE[]={0x10,0x60,0x02,0x8C,0x00,0x04,0xE4,0x24,0x24,0xE4,0x04,0x04,0xFC,0x04,0x04,0x00,0x04,0x04,0x7E,0x01,0x00,0x00,0x0F,0x04,0x04,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,};
(2)設置頁地址。由于漢字大小為16*16,屏幕每頁為8行,因此一個漢字占兩頁。設置第0頁的頁面地址指令為0xb0,以此類推,設置第n頁的頁面地址指令為0xb0+n。
(3)設置列地址。設置列地址指令又分為兩個指令,分別設置的是列地址的高四位和低四位。如果y表示漢字的列地址,yh表示地址高八位,yl表示地址第八位,則設置列地址高八位的指令為0x10+yh,設置列地址低八位的指令為0x00+yl。
(4)讀取漢字字碼數組,顯示漢字。
(5)圖片顯示時,同樣遵循上述步驟,先設置頁地址和列地址,再一個一個讀取圖片字碼。實現圖片顯示。
4.1.3 命令與數據傳輸程序設計
根據4線SPI接口時序圖,設計發送命令程序思路為:首先設置CS引腳為低電平,A0引腳為低電平,數據一位一位傳輸。由于數據為8位,因此需要一位一位寫入,當SCL引腳為上升沿時數據被寫入。程序如下:
void wcomspi(char cmd)
{
int i;
clrbit(cs);
clrbit(A0);
for(i=0;i<8;i++)
{
clrbit(scl);
if(cmd&0x80)
setbit(sda);
else
clrbit(sda);
setbit(scl);
cmd=cmd<<1;
}
setbit(cs);
}
發送數據程序和發送命令程序類似,不同的地方在于引腳A0因設置為高電平。設計思路為:首先設置CS引腳為低電平,A0引腳為高電平,數據一位一位傳輸。由于數據為8位,因此需要一位一位寫入,當SCL引腳為上升沿時數據被寫入。程序如下:
void wdataspi(char dat)
{
int i;
clrbit(cs);
setbit(A0);
for(i=0;i<8;i++)
{
clrbit(scl);
if(dat&0x80)
setbit(sda);
else
clrbit(sda);
setbit(scl);
dat=dat<<1;
}
setbit(cs);
}
4.2結果展示
U盾密碼器液晶顯示屏YMK12864P屏幕大小為128*64。顯示漢字“河源職業技術學院” 如圖6所示,每個漢字大小為16×16,因此每個字占用兩頁,16列。總共所需列數為128,不超出屏幕范圍。
屏幕顯示校徽如圖7所示,圖片大小為48×48,因此圖片占用6頁,48列。
5 小結
本文使用STC89C52微控制器對微型U盾密碼器液晶顯示屏模組進行驅動設計。研究了驅動器ST7567A的引腳及工作時序,分析了U盾密碼器液晶顯示屏YMK12864P的顯示原理。根據顯示原理,本文設計了硬件驅動電路,實現了屏幕顯示漢字與圖片的效果。該屏幕非可視區域寬度較小,無須使用擴散膜,驅動器及微處理器功耗低,這使得整個系統成本更少,耗能更低,簡單實用。從結果圖可以看出,本文設計的驅動方案具有一定的可行性,效果較好,畫面清晰穩定。
參考文獻:
[1] 崔文濤,唐賓徽.銀行網銀U盾的安全調查[J].計算機產品與流通,2018(7):250.
[2] 楊錦喜,鐘建坤,楊凌.一種微型U盾LCD屏的設計與研究[J].中國高新科技,2018(24):34-35.
[3] 張小景.串行外設接口通信的實現[J].裝備機械,2021(2):18-22,61.
[4] 方淼.一種基于STC89C52的函數信號發生器實驗設計[J].洛陽師范學院學報,2022,41(2):42-45.
[5] 羅潛,廖文浩,柳暢.基于STC89C52單片機的車內溫濕度智能監控系統[J].儀器儀表用戶,2021,28(9):34-37.
[6] 朱桂玉,李自成,劉昌明,等.采用STC89C52單片機的無線密碼鎖[J].電子世界,2021(19):83-85.
[7] 王平.基于單片機I/O口模擬的SPI串行通信實現[J].電子世界,2013(14):24,26.
【通聯編輯:梁書】