国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一個(gè)完整的嵌入式系統(tǒng),包括任務(wù)執(zhí)行部分和人機(jī)交互部分。在前四節(jié)中,我們已經(jīng)講解了LED、LCD和按鍵,用這三者就能夠?qū)崿F(xiàn)一個(gè)人機(jī)交互系統(tǒng),也即搭建整個(gè)嵌入式系統(tǒng)的框架。在后續(xù),只要將各個(gè)功能加入到這個(gè)交互系統(tǒng)中,即可完成整個(gè)嵌入式系統(tǒng)的設(shè)計(jì)。因此,盡管你什么都不會(huì),只會(huì)使用LED、LCD和按鍵,也至少能獲得省三或省二的獎(jiǎng)項(xiàng)。下面我們就以第十四屆省賽題為例,看看如何實(shí)現(xiàn)一個(gè)完善的交互系統(tǒng)。

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

首先我們來(lái)看第一個(gè)要求:按下B1切換界面:

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

結(jié)合第二節(jié):LCD顯示的內(nèi)容,只需要將切換界面處的判斷條件更換為key[0].single_flag == 1即可:

if (key[0].single_flag == 1)
{
    LCD_Clear(Black);          //每切換一次界面清一次屏
    view++;
    if (view > 2)
    {
        view = 0;
    }
    key[0].single_flag = 0;    //標(biāo)志位清零(重要?。?}

再來(lái)看第二個(gè)要求:

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

B2的要求相對(duì)于B1來(lái)說(shuō),只是增加了不同界面的不同功能,其本質(zhì)是一樣的。注意,第二個(gè)小要求需要切換選擇參數(shù),這就需要一個(gè)標(biāo)志變量choose。每次重新進(jìn)入?yún)?shù)界面時(shí),默認(rèn)可調(diào)整的參數(shù)為R,只需要在切換界面時(shí)把choose重新賦值為'R'即可。

char choose = 'R';
if (key[1].single_flag == 1)
{
    if (view == 0)             //數(shù)據(jù)界面
    {
        /* 5s切換模式 */
        if (M == 'H')    M = 'L';
        else    M = 'H';
        N++;                   //統(tǒng)計(jì)次數(shù)
    }

    else if (view == 1)        //參數(shù)界面
    {
        if (choose == 'R')    choose = 'K';
        else    choose = 'R';
    }
    key[1].single_flag = 0;    //標(biāo)志位清零(重要?。?}

要求3:

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

結(jié)合要求2,當(dāng)choose=='R'時(shí),對(duì)R進(jìn)行++;當(dāng)choose=='K'時(shí),對(duì)K進(jìn)行++:

if (key[2].single_flag == 1 && view == 1)    //參數(shù)界面
{
    if (choose == 'R')
    {
        R++;
        if (R > 10)    R = 1;
    }
    else
    {
        K++;
        if (K > 10)    K = 1;
    }
    key[2].single_flag = 0;                 //標(biāo)志位清零(重要?。?}

要求4:

【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng),藍(lán)橋杯嵌入式,藍(lán)橋杯,交互,嵌入式硬件,單片機(jī),stm32

要求4的第1個(gè)要求與要求3類似,不再贅述。第2個(gè)要求要標(biāo)志是否處于鎖定狀態(tài),同樣需要一個(gè)標(biāo)志變量lock

if (key[3].single_flag==1 && view==1)        //參數(shù)界面
{
    if (choose == 'R')
    {
        R--;
        if (R < 1)    R = 10;
    }
    else
    {
        K--;
        if (K < 1)    K = 10;
    }
    key[3].single_flag = 0;                  //標(biāo)志位清零(重要?。?}

bool lock = 0;
if (view==0 && lock==0)                      //數(shù)據(jù)界面,解鎖狀態(tài)
{
    if (key[3].long_flag == 1)    lock = 1;
    key[3].long_flag = 0;                    //標(biāo)志位清零(重要!)
}
else if (view==0 && lock==1)                 //數(shù)據(jù)界面,鎖定狀態(tài)
{
    if (key[3].single_flag == 1)    lock = 0;
    key[3].single_flag = 0;                  //標(biāo)志位清零(重要!)
}

將所有有關(guān)LED、LCD與按鍵的操作封裝成函數(shù),在主循環(huán)中調(diào)用,即可實(shí)現(xiàn)一個(gè)交互系統(tǒng)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-697016.html

/* task.c */

#include "task.h"

uint8_t view = 0;
char choose = 'R';
bool lock = 0;
char M = 'L';
int P;
double V, MH, ML;
int R = 1;
int K = 1;
int N = 0;
char text[20];

void key_pro(void)
{
    //B1
    if (key[0].single_flag == 1)
    {
        LCD_Clear(Black);
        view++;
        choose = 'R';
        if (view > 2)
        {
            view = 0;
        }
        key[0].single_flag = 0;
    }

    //B2
    if (key[1].single_flag == 1)
    {
        if (view == 0)
        {
            /***************
            5s切換模式
            LED_Toggle(LD2);
            HAL_Delay(100);
            ***************/
            LED_Off(LD2);

            if (M == 'H')    M = 'L';
            else    M = 'H';
            N++;
        }

        else if (view == 1)
        {
            if (choose == 'R')    choose = 'K';
            else    choose = 'R';
        }
        key[1].single_flag = 0;
    }

    //B3
    if (key[2].single_flag == 1 && view == 1)
    {
        if (choose == 'R')
        {
            R++;
            if (R > 10)    R = 1;
        }
        else
        {
            K++;
            if (K > 10)    K = 1;
        }
        key[2].single_flag = 0;
    }

    //B4
    if (key[3].single_flag==1 && view==1)
    {
        if (choose == 'R')
        {
            R--;
            if (R < 1)    R = 10;
        }
        else
        {
            K--;
            if (K < 1)    K = 10;
        }
        key[3].single_flag = 0;
    }
    if (view==0 && lock==0)
    {
        if (key[3].long_flag == 1)    lock = 1;
        key[3].long_flag = 0;
    }
    else if (view==0 && lock==1)
    {
        if (key[3].single_flag == 1)    lock = 0;
        key[3].single_flag = 0;
    }
}

void display(void)
{
    if (view == 0)
    {
        LCD_DisplayStringLine(Line1, (uint8_t *)"        DATA        ");
        sprintf(text, "     M=%c            ", M);
        LCD_DisplayStringLine(Line3, (uint8_t *)text);
        sprintf(text, "     P=%d%%         ", P);
        LCD_DisplayStringLine(Line4, (uint8_t *)text);
        sprintf(text, "     V=%.1f        ", V);
        LCD_DisplayStringLine(Line5, (uint8_t *)text);
        LED_On(LD1);
    }
 
    else if (view == 1)
    {
        LCD_DisplayStringLine(Line1, (uint8_t *)"        PARA        ");
        sprintf(text, "     R=%d           ", R);
        LCD_DisplayStringLine(Line3, (uint8_t *)text);
        sprintf(text, "     K=%d           ", K);
        LCD_DisplayStringLine(Line4, (uint8_t *)text);
        LED_Off(LD1);
    }
 
    else if (view == 2)
    {
        LCD_DisplayStringLine(Line1, (uint8_t *)"        RECD        ");
        sprintf(text, "     N=%d           ", N);
        LCD_DisplayStringLine(Line3, (uint8_t *)text);
        sprintf(text, "     MH=%.1f       ", MH);
        LCD_DisplayStringLine(Line4, (uint8_t *)text);
        sprintf(text, "     ML=%.1f        ", V);
        LCD_DisplayStringLine(Line5, (uint8_t *)text);
        LED_Off(LD1);
    }

    if (lock == 1)    LED_On(LD3);
    else    LED_Off(LD3);
}
/* task.h */

#ifndef __TASK_H
#define __TASK_H

#include "main.h"
#include <stdio.h>
#include "led.h"
#include "lcd.h"
#include "fonts.h"
#include "key.h"

void key_pro(void);
void display(void);

#endif /* __TASK_H */

到了這里,關(guān)于【速成】藍(lán)橋杯嵌入式省一教程:(五)用按鍵和屏幕實(shí)現(xiàn)嵌入式交互系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包