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