音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

來一段多國語言菜單的處理。見笑  歡迎討論

作者:peng007 欄目:嵌入式系統(tǒng)
來一段多國語言菜單的處理。見笑  歡迎討論
//.........................................................//
(1).....
//.........................................................//
//"MENU"字符串,英文
CHAR code C16_MENU_E[] ={ CHAR_M,CHAR_E,CHAR_N,CHAR_U,0};
//"MENU"字符串,中文
CHAR code C16_MENU_C[] = {CN_CAI,CN_DAN,0};

//"SYSTEM"字符串,英文
CHAR code C16_SYSTEM_E[] = {CHAR_S,CHAR_Y,CHAR_S,CHAR_T,CHAR_E,CHAR_M,0};
//"SYSTEM"字符串,中文
CHAR code C16_SYSTEM_C [] = {CN_XI,CN_TONG,0};
...

typedef struct MSG_DATA
{
  *pc16str[2];
}MSG_DATA;

MSG_DATA code stMSG_Data
{
  {C16_MENU_E,C16_MENU_C},
  {C16_SYSTEM_E,C16_SYSTEM_E},
  ...
}
//.........................................................//
typedef enum
{
  MSG_MENU,
  MSG_SYSTEM,
  .....
}MSG_ID

typedef enum
{
  MSG_Language_EN,
  MSG_Language_CN,
  .....
}MSG_Language

en_Language = xxx;
//.........................................................//
CHAR *getMSGString(MSG_ID enMSG)
{
  CHAR *pc16get = stMSG_Data[enMSG].pc16str[enLanguage];
  while(*pc16get+i)
   {
      c16StrBuffer[i] = *pc16get+i;
      i++;
   }
  return c16StrBuffer;
}
//.........................................................//

(1)點(diǎn)陣生成及鏈表定義略。
調(diào)用getMSGString前設(shè)好語言種類。
在MSG_ID中設(shè)好菜單。



2樓: >>參與討論
wswh2o
不錯
 
3樓: >>參與討論
sockit
最好先提供些思路
然后再給代碼...:)

4樓: >>參與討論
enbed
再來一個思路:
樓上的是數(shù)據(jù)和程序沒有分離.

實(shí)現(xiàn)程序和數(shù)據(jù)分離.

程序處理語言包,語言包附在程序最后,當(dāng)然,這個地址要告訴程序的.


5樓: >>參與討論
peng007
to enbed
你說的方法是不是在第一段程序?qū)⒆址椭羔樂蛛x,字符串再獨(dú)立出一個包?

6樓: >>參與討論
農(nóng)民講習(xí)所
描述屏幕的語言是字符串,不是字符。
要做到字符串和程序無關(guān),使用“字符串ID”來描述,程序中調(diào)用字符串ID(一個字符串句柄)進(jìn)行繪圖。更進(jìn)一步做到程序和字符串分離,字符串的描述中引入起始坐標(biāo),讓字符串的定位也和程序無關(guān)。

所有字符串合并成資源文件,和WINDOW的資源文件一樣的作用。

7樓: >>參與討論
liandao
我也提個問題:中斷如何使用LCD?
舉個例子:
我的手機(jī),在編輯短信的時候,或者正在編輯一個圖片,或者剛進(jìn)入某層菜單的時候,把充電器接上,手機(jī)會顯示一個界面提示正在充電中,而后回到剛才顯示的界面,各位覺得這是如何做到的?
若是原來在某層菜單下,那么恢復(fù)顯示也好辦--因?yàn)椴藛蝺?nèi)容固定的,得到字符指針就能還原了,而若是想在編輯圖片的時候呢?如何恢復(fù)?難道是備份顯存?


8樓: >>參與討論
農(nóng)民講習(xí)所
窗口切換
 
9樓: >>參與討論
peng007
可能是不同顯示層的疊加吧
 
10樓: >>參與討論
liandao
窗口切換
TO: 農(nóng)民講習(xí)所:
    你說的“窗口切換”切換到底如何實(shí)行?
1。CPU內(nèi)存一直備份顯示緩沖,且還有另外一個顯示緩沖,需要是把不同的顯示緩沖切換給LCD?
2。利用LCD內(nèi)置的SRAM,一般的LCD會可以設(shè)定該SRAM的那個地址開始的空間作為顯示緩沖的,通過修改該地址值把不同的SRAM空間作為顯示緩沖?
3。還有什么方法?
請問你說的是那種?還是有其它辦法實(shí)現(xiàn)窗口切換?
對應(yīng)缺點(diǎn):
1。占用內(nèi)存。換屏速度取決于CPU速度咯。
2。取決于LCD型號!要是有的型號根本不支持這樣,就沒轍了。



11樓: >>參與討論
51avr
只要你編輯的數(shù)據(jù)還在,數(shù)據(jù)就可以復(fù)原。
比如編輯的短消息,你會放在一個buffer里面吧?窗口切換回來的時候,讀出數(shù)據(jù)再寫一遍就可以了。
也見過有人為了優(yōu)化刷新速度而把某區(qū)域的lcd ram直接作備份的。但只用在特殊操作下。

至于窗口切換,程序里面首先要有窗口的概念才行。

12樓: >>參與討論
yappy
窗口切換
gui 都是非常消耗內(nèi)存的,畢竟也算是多媒體
窗口切換簡單處理方法:
    1.有的 lcdc 可以支持多頁顯示,
      頁面切換只需要設(shè)定某頁屏幕對應(yīng)的 VSRAM 的地址作為顯示緩存即可,
      一般只需要修改寄存器,
      各頁之間的數(shù)據(jù)互不影響。
    2.單頁顯示,
      先讀出當(dāng)前屏幕對應(yīng)的數(shù)據(jù)(整屏或某個區(qū)域),保存到某個緩沖區(qū),
      然后繪制新的屏幕畫面(區(qū)域),
      操作完畢后,再將緩沖區(qū)中的數(shù)據(jù)拷貝回顯存;
      這樣操作的速度確實(shí)比較慢。
      可以使用部分 vram 作為緩沖區(qū),      
      有的 lcdc 提供這樣的硬件支持,速度極快!
      我使過 EPSONS1D13506,
       50MHZ arm7 + S1D13506 的窗口切換速度要比
      200Mhz arm9 (內(nèi)部lcdc) 快的多,沒有任何延遲感,
      當(dāng)然有些 arm9 的內(nèi)部 lcdc 也有這樣的功能。
通常的 GUI 窗口管理措施要復(fù)雜的多:
    每個窗口的結(jié)構(gòu)體中包括很多的 widget (按鈕、進(jìn)度條、滾動條、菜單、圖片、文本....),
    每個 widget 也保存足夠的數(shù)據(jù)信息,
    通過這些信息可以完整的重新繪制窗口,
    也可以通過保存顯存數(shù)據(jù)的方式恢復(fù)窗口。
    具體可參考 miniGUI 或 uc\gui 的源代碼,



13樓: >>參與討論
liandao
呵呵,其實(shí)我原本的目標(biāo)不是做個大的GUI
呵呵,其實(shí)我原本的目標(biāo)不是做個大的GUI,儀器儀表上用的,一般不會給配很大的LCD,而MCU很多可能就是8bit的,所以我問關(guān)于窗口切換的問題,因?yàn)樵谛?nèi)存的MCU上很難做事情的。
對了,有空可以看看http://liandao.googlepages.com/menu
《手機(jī)菜單分析和代碼實(shí)現(xiàn)》不完整版本,也曾對一些問題做過思考的。抱歉很亂的文字。

14樓: >>參與討論
農(nóng)民講習(xí)所
樓上的可以只使用窗口概念而不使用窗口緩沖
比如:失效菜單窗口,使菜單不輸出到屏幕,從而將屏幕內(nèi)容出讓給其它窗口。其它窗口退出后再發(fā)送刷新命令將菜單內(nèi)容全部輸出。

不帶輸出緩沖,必須程序自己刷新。(GUI可以自己自刷新)

15樓: >>參與討論
liandao
如果內(nèi)容是動態(tài)的呢?
TO:農(nóng)民講習(xí)所
如果當(dāng)前屏幕的內(nèi)容均是可以單單通過代碼重新執(zhí)行就能還原,那么很好辦,重新執(zhí)行代碼就是了;
可問題是若原有屏幕顯示的內(nèi)容是動態(tài)的,也就是說當(dāng)前屏幕顯示的內(nèi)容不單單取決于程序代碼,也配合了按鍵輸入什么的(比如正在通過鍵盤配合液晶畫簡單的圖--Nokia手機(jī)不就是可以這么做么),這種時候如何做呢?似乎沒有辦法不備份顯示緩沖了、

16樓: >>參與討論
enbed
我來繼續(xù):
1:多語言:
  輸入法數(shù)據(jù)和字符串資源和程序分離,不同語言編入不同的 這個包即可。
  輸入法:不算智能輸入的情況下: 一個表格,每個按鍵對應(yīng)那些輸入,
  字符串:設(shè)計(jì)一個文件格式,前面是表,后面跟數(shù)據(jù),通過ID查找后面數(shù)據(jù)區(qū)地址,得到字符串,UNICODE編碼。使用時,緊緊跟ID有關(guān),切換語言時,使用不同的這個字符串文件即可。


每個界面可以單獨(dú)做一個事件處理函數(shù)
    界面開始,初始化
    按鍵處理
    界面結(jié)束這些消息。

至于界面的打斷后重繪,方法還是很多的
  除了上訴各位的方法,還可以截屏,再恢復(fù)回去。

17樓: >>參與討論
農(nóng)民講習(xí)所
動態(tài)問題
‘當(dāng)前屏幕顯示的內(nèi)容不單單取決于程序代碼’發(fā)生,是因?yàn)槟愠绦蚪Y(jié)構(gòu)性不好造成的。
按你的例子:‘正在通過鍵盤配合液晶畫簡單的圖’,你在菜單結(jié)構(gòu)中加入動畫狀態(tài)變量:動畫索引、動畫狀態(tài)ID,當(dāng)重畫窗口時就可以將動畫也重新繪圖出來。

現(xiàn)在的手機(jī)基本都采用OS,意味著RAM都不小,使用了GUI。

對黑白機(jī),也可以使用帶緩沖的窗口機(jī)制,可以使用BIT表示一個象素點(diǎn),象手機(jī)這么大小的,一般差不多10K左右RAM圖象窗口。

18樓: >>參與討論
陳雙君
這程序好使么
這程序好使么

19樓: >>參與討論
kyokyxxj
樓主程序好象有點(diǎn)問題
雖然樓下說得很熱鬧,不過還是要說樓主程序有問題

20樓: >>參與討論
peng007
to:kyokyxxj 有不妥之處,請指出,大家共同進(jìn)步嘛
 
21樓: >>參與討論
john1225cn
呵呵不錯啊。
[嵌入式硬件開發(fā)]ARM7擴(kuò)展12864LCD的眾多方法
嘆為觀止的活動金屬小人
轉(zhuǎn)來的,超級好的嵌入式資料匯總
············

好多有用的嵌入式資料。。。


快去我的博客看看吧~~~~~~~
john1225cn.gkbk.com

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
要學(xué)習(xí)arm上跑linux,請指點(diǎn)一下,少走彎路
關(guān)于ARM和Keil片子的問題
vxworks中l(wèi)s函數(shù)的問題
問用Tornado中的斷點(diǎn)調(diào)試命令調(diào)vxworks中代碼時候出現(xiàn)重啟現(xiàn)象?
讓更多的公司能在PowerPC處理器上面運(yùn)行VxWorks和Linux
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號