1 設(shè)計(jì)理念和原理
1.1 設(shè)計(jì)理念
隨著數(shù)字家庭等領(lǐng)域技術(shù)的迅速發(fā)展,在多媒體終端上的增值業(yè)務(wù)將越來越多,瀏覽網(wǎng)頁、搜索、短信等都需要遙控器進(jìn)行輸入。但作為連接用戶和終端之間的重要外設(shè),遙控器的設(shè)計(jì)理念還停留在模擬電視時(shí)代,體驗(yàn)感較差。目前用戶輸入的解決方式是呼出終端的內(nèi)置輸入法,這樣就帶來了兩個(gè)問題:一,不同廠家的終端都需要內(nèi)置自己的中英文輸入法,占用資源,而且必須搭配自己的遙控器使用,通用性不高;二,用戶在輸人時(shí)必須一邊看遙控器輸入一邊看屏幕確認(rèn)輸入,如果文字較多會造成頻頻抬頭和低頭的麻煩,難以忍受?;谝陨先秉c(diǎn),本文提出將輸入法內(nèi)置于遙控器的理念,在遙控器上輸入文字后再統(tǒng)一將文字編碼用紅外線發(fā)給終端,終端接收后將編碼譯成文字顯示在輸入?yún)^(qū)中。
1.2 紅外遙控器工作原理
遙控碼是一串二進(jìn)制數(shù)字信號,通過脈沖編碼形成脈沖序列,被調(diào)制到一個(gè)固定頻率載波上,最后通過紅外發(fā)射管,以光脈沖的形式發(fā)射出去。脈沖編碼就是將“1”和“0”用一個(gè)脈沖來標(biāo)識。本設(shè)計(jì)使用NEC紅外協(xié)議,用脈寬560us,周期4x560us代表二進(jìn)制“1”;用脈寬560us,周期2x560us代表二進(jìn)制“0”(如圖1所示,密集豎線表示38KHz載波)。
圖1 NEC協(xié)議紅外遙控信號的調(diào)制
2 硬件設(shè)計(jì)
2.1 總體設(shè)計(jì)原則
遵循嵌入式系統(tǒng)高性能、低功耗、小體積的設(shè)計(jì)思想,總體設(shè)計(jì)原則是:元器件采用低功耗芯片;盡量用軟件實(shí)現(xiàn)硬件功能,減少器件數(shù)量;鍵盤采用中斷方式,一旦系統(tǒng)空閑超時(shí)立即使其進(jìn)入休眠狀態(tài),再次按鍵予以喚醒。
2.2 硬件組成
硬件組成如圖2所示。其中:主芯片為Microchip公司PIC18F系列高檔單片機(jī)66J11,性價(jià)比極高;液晶屏控制器為Sitronix公司的ST7565R,分辨率128x64;漢字點(diǎn)陣字庫用Atmel公司的262KB Flash制作,它和LCD與單片機(jī)的接口均為SPI接口;鍵盤有49個(gè)按鍵.采用7x7矩陣方式,7根行線連到單片機(jī)B口的RBI~RB7外部中斷腳,列線連到單片機(jī)的E口的RE1-RE7,作為數(shù)字輸出口。
圖2 基于PIC單片機(jī)的紅外遙控器硬件組成
3 軟件設(shè)計(jì)
3.1 系統(tǒng)運(yùn)行流程
遙控器無開關(guān)機(jī)過程,因此放入電池時(shí)系統(tǒng)硬件即初始化,進(jìn)入休眠。按鍵中斷時(shí),進(jìn)入主程序,系統(tǒng)運(yùn)行流程如圖3所示,分為兩種模式:普通遙控和文本輸入。單片機(jī)內(nèi)部的看門狗負(fù)責(zé)對空閑狀態(tài)(沒有鍵被按下)計(jì)時(shí),超時(shí)后系統(tǒng)復(fù)位重新進(jìn)入休眠狀態(tài)。
圖3 系統(tǒng)運(yùn)行流程圖
3.2 功耗管理設(shè)計(jì)
PIC18F系列器件提供了三種主要的工作模式:運(yùn)行模式、空閑模式和休眠模式,實(shí)際中只使用運(yùn)行模式和休眠模式。根據(jù)遙控器的運(yùn)行流程,看門狗(WDT:Watchdog Timer)負(fù)責(zé)實(shí)現(xiàn)空閑時(shí)間的計(jì)時(shí)。4ms的WDT超時(shí)溢出周期與16位的后分頻比值相乘??梢酝ㄟ^在MPLAB IDE中配置寄存器2H中的WDTPS位控制一個(gè)多路開關(guān)以對WDT后分頻器的輸出進(jìn)行選擇,可獲得的超時(shí)溢出周期范圍為4ms至135秒(2.25分鐘)。在代碼中需要在每次按鍵后喂狗,保證看門狗重新計(jì)時(shí)。
3.3 驅(qū)動(dòng)程序設(shè)計(jì)
3.3.1 鍵盤驅(qū)動(dòng)
PIC單片機(jī)的B口是外部中斷口,有四個(gè)INT中斷和四個(gè)KBI中斷。本設(shè)計(jì)將RB0留做擴(kuò)展備用,RBl/INTl、RB2/INT2和RB3/INT3都設(shè)置為下降沿觸發(fā)中斷;KBl4個(gè)口(RB4-RB7)為電平變化中斷(雙沿),在程序里只對下降沿中斷有處理。
按鍵掃描采取行列掃描方式獲取鍵值。配置行線均弱上拉,列線均輸出為0;當(dāng)有鍵(行列交叉點(diǎn))按下時(shí),此鍵所在行線即出現(xiàn)下降沿;進(jìn)入中斷處理后,依次令每根列線輸出為0,其余為1,掃描行線看哪根行線輸入為0,從而得到按鍵的位置。
3.3.2 SPI驅(qū)動(dòng)
PIC單片機(jī)有兩個(gè)主控同步串行端口模塊,它們都可以用軟件配置為SPI方式,使用非常方便.?dāng)?shù)據(jù)讀寫只需讀寫其緩存即可,不需要像51單片機(jī)那樣模擬時(shí)序。本設(shè)計(jì)使用了兩個(gè)SPI接口器件:LCD和FLASH字庫,他們是從設(shè)備,單片機(jī)是主設(shè)備。在配置好與SPI時(shí)鐘頻率等有關(guān)的寄存器后,主從設(shè)備就可以通信了。當(dāng)主設(shè)備從從設(shè)備讀數(shù)據(jù)時(shí),SSPxlF(x=1,2)標(biāo)志寄存器為0說明正在接收數(shù)據(jù),為1時(shí)說明已收到一個(gè)字節(jié);當(dāng)主設(shè)備往從設(shè)備寫數(shù)據(jù)時(shí),SSPxlF為1說明已發(fā)完—個(gè)字節(jié)。
3.3.3PWM驅(qū)動(dòng)
發(fā)射用的紅外載波口’用標(biāo)準(zhǔn)脈寬捌制模塊(PWM)來實(shí)現(xiàn),載波頻率是38KHz,因此PWM的周期就是1/38KHz,PWM周期的計(jì)算公式是:
PWM周期=[(_PR2)+1].4.TOSC(TMR2預(yù)分頻值).
本設(shè)計(jì)中晶振是12MHz.即TOSC=1/12MHz,經(jīng)過計(jì)算,PR2寄存器設(shè)置為78。TMR2預(yù)分頻值為1可得到頻率為38Km的方波。
也可以設(shè)置方波的占空比為1:3來減小功耗,占空比有10位,寄存器CCPRxL保存占空比高8位,CCPxCON<5:4>保存低2位。CCPRxL:CCPxCON<5:4>代表這個(gè)10位值。計(jì)算占空比的公式是:
PWM占空比=(CCPRxL:CCPxCON<5:4>).TOSC.(TMR2預(yù)分頻值)
設(shè)置好頻率和占空比.開啟PWM功能,TMR2(定時(shí)器2)開始計(jì)時(shí),PWM輸出高電平,計(jì)時(shí)到周期的1,3時(shí)PWM輸出低電平,計(jì)時(shí)到一個(gè)周期時(shí)PWM重新開始另一個(gè)周期,TMR2從0開始計(jì)時(shí)。所以要停止載波的輸出很簡單,只需令占空比為0或TMR2停止計(jì)時(shí)。因此,很容易就可得到圖1所示的輸出。
3.4 輸入法設(shè)計(jì)
3.4.1 功能
用遙控器輸入中英文、數(shù)字、符號,功能類似于手機(jī)短信,其中中文輸入是類似手機(jī)T9輸入法的拼音輸入法,英文輸入法是只需按兩次鍵(第一次調(diào)出候選字符,第二次選擇字符)即可輸入一個(gè)字母。按“輸入法”鍵從遙控模式切換進(jìn)輸入模式,操作同手機(jī),“切換鍵”用來切換中/英輸入,“1”用來輸入標(biāo)點(diǎn),“0”用來呼出數(shù)字輸入法。輸入完畢按“發(fā)射鍵”發(fā)射LCD上所有文字的編碼,漢字是機(jī)內(nèi)碼,英文、數(shù)字及符號是ASCII碼。如果想回到遙控模式,再次按“輸入法”鍵。
3.4.2 拼音輸入法設(shè)計(jì)原理
拼音輸入法是本設(shè)計(jì)的核心內(nèi)容,它負(fù)責(zé)將鍵盤輸入的數(shù)字序列轉(zhuǎn)換為漢字,漢字的搜索采用查表算法。拼音輸入法大體可以分為兩個(gè)步驟:把數(shù)字序列轉(zhuǎn)換為拼音編碼,然后搜索到該拼音編碼對應(yīng)的漢字編碼。選中的漢字將顯示在LCD的文本區(qū),其編碼記錄在待發(fā)射的文本數(shù)組中。
3.4.3 索引表的重要結(jié)構(gòu)體
1.拼音編碼以索引表的形式保存在PY_Index.h中,每個(gè)拼音編碼的數(shù)據(jù)結(jié)構(gòu)為:
eonst struct T9PY_IDX
{
const unsigned char *t9://按鍵數(shù)字序列
const unsigned char *PY://拼音編碼字符串
coast unsigned char *pY_mb;//該拼音對應(yīng)的漢字碼表地址
};
所有的拼音編碼組成一個(gè)數(shù)組常量T9PY_index[],每個(gè)拼音編碼作為數(shù)組中的一個(gè)元素存在,如:const struct T9PY_IDX
PY_index[]{"9468"、 "zhou",PY_mb_zhou},
2. 拼音輸入法拼音組合查詢碼表,T9數(shù)字字母索引結(jié)構(gòu)如下:
const struct PY_arrange
{
cormt unsigned char *nums;
const unsigned char *arra;
};
例如:const struct PY_arrange PY_arr []={"726","pan pao ran rao san sao"}
3.漢字碼表舉例:
const unsigned char PY_mb_zhou[]={"舟周州洲謅粥軸肘帚咒皺宙晝驟??"}
3.4.4 漢字字模庫的使用
漢字的顯示在LCD上用點(diǎn)陣來表示:有筆劃(I)、無筆劃(O)。描述點(diǎn)陣信息的二進(jìn)制代碼集稱為字模,所有點(diǎn)陣信息就組成了字模庫。GB2312—80規(guī)定了漢字的信息交換碼,簡稱國標(biāo)碼,其用兩個(gè)字節(jié)代碼來表示一個(gè)漢字。微機(jī)中還有區(qū)位碼和機(jī)內(nèi)碼兩個(gè)概念,區(qū)、位各94(1-94),用先區(qū)后位的兩個(gè)2位十進(jìn)制數(shù)表示;機(jī)內(nèi)碼是計(jì)算機(jī)內(nèi)部存儲漢字的代碼。
在本設(shè)計(jì)中,每個(gè)漢字的顯示采用16x16圖形點(diǎn)陣方式顯示,在UCDOS等漢字操作系統(tǒng)中可以找到HZK16.DAT二進(jìn)制文件,這是一個(gè)標(biāo)準(zhǔn)的16x16點(diǎn)陣的字模庫。以94個(gè)漢字為一組。共87組,8178個(gè)字。以16x16點(diǎn)陣的漢字計(jì)算,每個(gè)漢字實(shí)際占用的空間為32Bytes,總?cè)萘繛?178x32=262KB,用燒片器將HZK16.DAT燒進(jìn)FLASH中。
以漢字“電”為例,其機(jī)內(nèi)碼為OxB5E7,在單片機(jī)系統(tǒng)中需要的是其在存儲器中的絕對位置,則需要先將其轉(zhuǎn)換為區(qū)位碼。總結(jié)公式為:
((機(jī)內(nèi)碼的高位字節(jié)-OxA1)x94 + 機(jī)內(nèi)碼的低位字節(jié) - 0xAl)x32
那么“電”在字庫中的地址就是((OxB5-OxAl)x94+0xE7-0xAl)x32。AT45DB021B是分頁存儲的,每頁有264Bytes,所以上述地址除以264的商是指定對哪一頁讀取,余數(shù)指定從這一頁的哪一字節(jié)開始讀取。
4 結(jié)束語
未來的多媒體終端給消費(fèi)者帶來的是集信息、娛樂、學(xué)習(xí)、購物于一體的享受。此遙控器通用性強(qiáng),應(yīng)用范圍廣,可支持搜索、短信等多種增值業(yè)務(wù),帶給用戶革命性的體驗(yàn)感。遙控器BOM成本不到100元,普通遙控器為20元,差價(jià)80元,如果用于高端VOD業(yè)務(wù)的捆綁銷售.假設(shè)包月資費(fèi)為20元,僅用不到4個(gè)月就可收回投資,經(jīng)濟(jì)效益極好,市場潛力巨大。
本文作者創(chuàng)新點(diǎn):針對多媒體終端輸入中用戶體驗(yàn)較差等缺點(diǎn),介紹了一種可向終端發(fā)送文本信息的新型紅外遙控器,給出了基于PIC8位單片機(jī)實(shí)現(xiàn)的解決方案,其設(shè)計(jì)理念比較符合數(shù)字家庭領(lǐng)域未來發(fā)展的方向,有一定的借鑒意義。
評論
查看更多