www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]一般來說我們的產(chǎn)品都有按鍵,按鍵用來操作相應(yīng)的界面,那就會有相應(yīng)的界面處理方法,有兩種結(jié)構(gòu)的編寫。


微信公眾號:嵌入式開發(fā)圈
關(guān)注可了解更多的教程。問題或建議,請公眾號留言;
如果你覺得本文對你有幫助,歡迎贊賞

由于之前的文章沒有好看的格式,故現(xiàn)在重新發(fā)表,讓圈友看起來更加舒服,也可以直接復(fù)制粘貼商用。

▲長按圖片保存可分享至朋友圈


    一般來說我們的產(chǎn)品都有按鍵,按鍵用來操作相應(yīng)的界面,那就會有相應(yīng)的界面處理方法,以下有兩種結(jié)構(gòu)的編寫

A類編寫

 1//針對左鍵的處理函數(shù),傳入的參數(shù)為當(dāng)前頁面
2void left_key_process(int current_page)
3
{
4    switch(current_page)
5    {
6        case MAIN_PAGE:
7            //針對main_page的左鍵處理
8             main_page_left_key_process();
9            break ;
10        case SETTING_PAGE:
11            //針對setting_page的左鍵處理
12            setting_page_left_key_process();
13             break ;
14        case LOG_PAGE:
15            //針對log_page的左鍵處理
16            log_page_left_key_process();
17            break ;
18        case LANGUAGE_PAGE: 
19            //針對language_page的左鍵處理
20            language_page_left_key_process();
21            break ;
22             ....
23    }
24}
25
26//針對右鍵的處理函數(shù),傳入的參數(shù)為當(dāng)前頁面
27void right_key_process(int current_page)
28
{
29    //....
30}
31//針對確認(rèn)鍵的處理函數(shù),傳入的參數(shù)為當(dāng)前頁面 
32void enter_key_process(int current_page)
33
{
34    //....
35}
36//UI頁面處理函數(shù),傳入的參數(shù)為當(dāng)前的鍵值
37void UI_Page_Process(int KeyValue)
38
{
39    switch(KeyValue)
40    {
41        case LEFT_KEY :
42             left_key_process(KeyValue);
43             break ;
44
45        case RIGHT_KEY:
46             right_key_process(KeyValue);
47             break ;
48        case ENTER_KEY:
49             enter_key_process(KeyValue);
50             break ;
51        ...
52    }
53}

    

    A類編寫,我可以起個(gè)名字叫直男式編寫,邏輯沒有錯(cuò),也能正常操作相應(yīng)的頁面,沒有問題,可它就是一條線,直! 首先拿到鍵值,然后操作界面,和我們正常人的思維差不多。但如果代碼量劇增,頁面眾多,每個(gè)頁面有不同的處理按鍵,相信A類的編寫給后面的人來維護(hù)或者增加處理方法人一定會非常抱怨,為啥找個(gè)界面處理這么痛苦?

    我們再來看看B類,我可以起個(gè)名字叫人機(jī)接口式編寫。首先我們要操作界面,界面就是人機(jī)接口,每個(gè)不同的界面由對應(yīng)的按鍵操作方法,這樣看起來,是不是更好維護(hù)了?以后,我要往界面添加、刪除等相關(guān)按鍵的處理方法,那是不是就更好找了?

B類編寫

 1//主頁面處理
2void main_page_process(int KeyValue)
3
{
4    switch(KeyValue)
5    {
6        case LEFT_KEY:
7             //針對main_page的左鍵處理
8             break ;
9        case RIGHT_KEY:
10             //針對main_page的右鍵處理
11             break ;
12        case ENTER_KEY:
13             //針對main_page的Enter鍵處理
14             break ;
15        case BACK_KEY:
16             //針對main_page的back鍵處理
17             break ;
18        ...
19    }
20}
21//設(shè)置頁面處理 
22void setting_page_process(int KeyValue)
23
{
24    switch(KeyValue)
25    {
26        case LEFT_KEY:
27             ...
28             break ;
29        case RIGHT_KEY:
30             ...
31             break ;
32        case ENTER_KEY:
33             ...
34             break ;
35        case BACK_KEY:
36             ...
37             break ;
38        ...
39    }
40}
41//記錄頁面處理 
42void Log_page_process(int KeyValue)
43
{
44    switch(KeyValue)
45    {
46        case LEFT_KEY:
47             ...
48             break ;
49        case RIGHT_KEY:
50             ...
51             break ;
52        case ENTER_KEY:
53             ...
54             break ;
55        case BACK_KEY:
56             ...
57             break ;
58        ...
59    }
60}
61//UI主頁面處理 ,傳入鍵值
62void UI_Page_Process(int KeyValue)
63
{
64
65    switch(current_page)
66    {
67        case MAIN_PAGE:
68             main_page_process(KeyValue);
69             break ;
70        case SETTING_PAGE:
71             setting_page_process(KeyValue);
72             break ;
73        case LOG_PAGE:
74             Log_page_process(KeyValue);
75             break ;
76        ....
77    }
78}

    雖然說B類看起來更加的易維護(hù),但仍然存在缺陷,那就是一旦菜單項(xiàng)數(shù)變多以后,就存在效率低下的問題了,我們有一種更好的解決方法函數(shù)跳轉(zhuǎn)表,我們將B類的方式改一下,引入C類編寫。

C類編寫

 1#include 
2#include 
3using namespace std ;
4#define NR(x) (sizeof(x)/sizeof(x[0]))
5
6int main_page_process();
7int detect_page_process();
8int log_page_process();
9int setting_page_process();
10
11//菜單枚舉 
12typedef enum
13{
14    MAIN_PAGE = 0,
15    DETECT_PAGE,
16    LOG_PAGE,
17    SETTING_PAGE
18}MENU_INDEX;
19
20typedef int(*OPERATE_FUNC)();
21
22class MENU
23{

24    public:
25    MENU_INDEX index ;     //菜單索引
26    OPERATE_FUNC op_func ; //菜單對應(yīng)的函數(shù)
27};
28
29//構(gòu)造函數(shù)跳轉(zhuǎn)表
30static MENU OP_MENU_STRUCT[] = 
31{
32    {MAIN_PAGE   ,  main_page_process},
33    {DETECT_PAGE ,  detect_page_process},
34    {LOG_PAGE    ,  log_page_process},
35    {SETTING_PAGE,  setting_page_process},
36};
37
38int Goto_execute(int op)
39
{
40    if(op >= NR(OP_MENU_STRUCT) || op < 0)
41        return -1 ;
42    //根據(jù)索引值op,調(diào)用相應(yīng)的函數(shù)
43    return OP_MENU_STRUCT[op].op_func();
44}
45
46int main(int argc , char **argv)
47
{
48    char ch ;
49    int menu_index = 0;
50    while(1)
51    {
52        ch = getch();
53        if(ch == 'a')     //左鍵 
54           menu_index > 0 ? menu_index-- : menu_index = 0 ;
55        else if(ch == 'd')//右鍵 
56           menu_index < NR(OP_MENU_STRUCT) ? menu_index++ : menu_index = NR(OP_MENU_STRUCT);
57        //執(zhí)行菜單操作 
58        Goto_execute(menu_index);
59    }
60    return 0 ;
61
62
63int main_page_process()
64
{
65    cout << "主頁面" << endl ;
66}
67
68int detect_page_process()
69
{
70    cout << "檢測頁面" << endl ; 
71}
72
73int log_page_process()
74
{
75    cout << "記錄頁面" << endl ;
76}
77
78int setting_page_process()
79
{
80    cout << "設(shè)置頁面" << endl ;
81}

    如果圈友有什么更好的應(yīng)用框架,歡迎留言推薦,一起共同學(xué)習(xí)! 

    另外推薦一部近期出的典型巨作,冬瓜哥的大話計(jì)算機(jī),可以說是一部經(jīng)典了,雖然貴,但我也入手了一部,看了第一章,基本上我覺得可以秒殺國產(chǎn)同類書籍了,甚至可以類比國外的一些經(jīng)典書籍,強(qiáng)烈推薦入手! 


另外推薦相關(guān)課程:

  韋東山老師優(yōu)質(zhì)嵌入式學(xué)習(xí)干貨推薦:包括ARM裸機(jī)開發(fā)、Linux設(shè)備驅(qū)動程序、Linux應(yīng)用程序開發(fā)、Android系統(tǒng)學(xué)習(xí)、Linux設(shè)備樹等。


在我這里購買韋東山老師的課程還可得到本人的技術(shù)支持,手把手帶你學(xué)習(xí)嵌入式!

王爭老師優(yōu)秀數(shù)據(jù)結(jié)構(gòu)算法學(xué)習(xí)課程推薦


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉