計(jì)算機(jī)EPP控制CPLD顯示點(diǎn)陣漢字的實(shí)現(xiàn)
其中,lHzkPosition是漢字點(diǎn)陣在漢字庫中的首地址,nSection和nPosition分別是漢字的區(qū)碼和位碼。Windows 2000/XP操作系統(tǒng)默認(rèn)的字符集是Unicode,這是一個(gè)全球一體化的字符集,無法映射得到漢字的GB2312區(qū)位碼。所以,軟件的字符編碼方式必須采用GB2312,在VC++中采用MBCS(Multi-Byte Char System)即可。在此使用一個(gè)CString對(duì)象存儲(chǔ)需要顯示的文本,CString可以以字節(jié)為單位進(jìn)行操作,一個(gè)漢字(或其它全角字符)對(duì)應(yīng)兩個(gè)字節(jié)。如果保證這個(gè)CString里面的字符全部是全角字符,就可以在點(diǎn)陣漢字庫里找到它們的點(diǎn)陣。以字節(jié)為單位讀取字符的機(jī)內(nèi)碼。將一個(gè)字符的高字節(jié)減去0xA0就得到漢字的區(qū)碼;將一個(gè)字符的低字節(jié)減去0xA0就得到漢字的位碼。為避免頻繁磁盤讀寫,同時(shí)實(shí)現(xiàn)較大程度的集成,可以把HZK16漢字庫放到程序的資源中。確定此資源在內(nèi)存中的首地址,再加上由區(qū)位碼計(jì)算得到的字庫的存儲(chǔ)位置,就可以確定漢字點(diǎn)陣在內(nèi)存中的位置。
在程序中加入兩個(gè)定時(shí)器,分別定時(shí)觸發(fā)漢字滾動(dòng)和數(shù)據(jù)發(fā)送事件。漢字滾動(dòng)用位操作實(shí)現(xiàn),建立一個(gè)32字節(jié)的字節(jié)數(shù)組,用來存儲(chǔ)當(dāng)前顯示屏上需要顯示的點(diǎn)陣,定時(shí)器觸發(fā)時(shí),根據(jù)當(dāng)前顯示的字符和已經(jīng)移位的次數(shù),讀取待顯示漢字點(diǎn)陣的相應(yīng)位置,并將讀取出來的點(diǎn)陣數(shù)據(jù)移位相加,即可獲得當(dāng)前屏幕需要顯示的點(diǎn)陣。調(diào)整定時(shí)器觸發(fā)的時(shí)間間隔,即可調(diào)整漢字滾動(dòng)的速度。
4.2 點(diǎn)陣漢字發(fā)送的原理
以字節(jié)為單位讀取待顯示的32字節(jié)數(shù)組,根據(jù)前述協(xié)議,通過操作并口寄存器將每次讀到的字節(jié)數(shù)據(jù)發(fā)送到CPLD,并讀取CPLD的返回狀態(tài),不斷地握手、發(fā)送、等待應(yīng)答,直到以用戶給定的幀速將點(diǎn)陣數(shù)據(jù)發(fā)送完畢。幀速的設(shè)定是因?yàn)榘l(fā)送定時(shí)器的觸發(fā)時(shí)間較長,會(huì)產(chǎn)生較嚴(yán)重的閃爍現(xiàn)象,因此每次發(fā)送定時(shí)器觸發(fā)時(shí),同一幀數(shù)據(jù)發(fā)送多次,就可以有效的減少閃爍感。用戶可以根據(jù)使用環(huán)境,隨時(shí)調(diào)整幀速以達(dá)到最好的顯示效果。
為了避免設(shè)備掉電或者其他原因沒有應(yīng)答造成的程序死鎖,發(fā)送程序必須包含超時(shí)檢測。在等待CPLD應(yīng)答時(shí),反復(fù)讀取并口的狀態(tài)寄存器,以一個(gè)臨時(shí)變量記錄沒有應(yīng)答的次數(shù),并和一個(gè)預(yù)先設(shè)定好的最大應(yīng)答延遲次數(shù)相比較,如果超過最大延遲次數(shù),則判定CPLD應(yīng)答超時(shí),停止繼續(xù)發(fā)送并提示用戶。最大延遲次數(shù)的設(shè)定和CPLD采用的晶振頻率有關(guān),在實(shí)驗(yàn)中,若采用4Mhz晶振,正常工作狀態(tài)下,計(jì)算機(jī)無需循環(huán),可以實(shí)時(shí)檢測到CPLD的應(yīng)答信號(hào);若采用250Khz晶振,則需要多次檢測才可以檢測到應(yīng)答信號(hào),此時(shí)若將最大延遲次數(shù)設(shè)置過低,計(jì)算機(jī)將設(shè)備判為延遲并重新發(fā)送,極易引起顯示屏的閃爍。
5 結(jié)束語
通過本設(shè)計(jì)我們可以看到,利用計(jì)算機(jī)并口的EPP模式結(jié)合CPLD設(shè)計(jì)數(shù)字電子系統(tǒng),可以將大量繁雜工作交給軟件承擔(dān),利用計(jì)算機(jī)強(qiáng)大的開發(fā)環(huán)境來完成。本文作者創(chuàng)新點(diǎn):提出了一種有助于減小系統(tǒng)設(shè)計(jì)難度、縮短開發(fā)時(shí)間的設(shè)計(jì)方式,同時(shí)可以得到友好的人機(jī)界面和方便的操作。這種設(shè)計(jì)方法具有一定的通用性,對(duì)需要使用CPLD的電子設(shè)計(jì),尤其是實(shí)驗(yàn)教學(xué)具有一定的參考價(jià)值。
評(píng)論