侵權投訴

【RTT大賽作品連載】 按鍵濾波,按下,松手,長按,短按

閑來無事玩單片機呀 ? 2021-12-06 09:23 ? 次閱讀

本文主要以AB32VG1作為主控,結合板載按鍵實現按鍵的軟件濾波,按下時間判斷(長按,短按),按下判斷,松手判斷等,可以應對各種按鍵使用的場合,多種按鍵方式結合使用可以在只有一個按鍵的情況下實現多種按鍵操作邏輯。

一、創建工程

創建工程比較簡單,在這里不在贅述,可以參考官方的操作文檔:https://file.elecfans.com/web2/M00/14/6F/pYYBAGE-y4WAGoojANBtfI0No2g719.pdf

二、按鍵邏輯初始化

1. 創建按鍵線程

static void KEY_ThreadManage(void)
{
    rt_thread_t key_thread;

    key_thread = rt_thread_create("KEY Thread Manage",     /*線程名字*/
                                   KEY_ManageEntry,/*線程入口函數*/
                                   RT_NULL, /*線程入口函數參數*/
                                   2048,    /*線程棧大小*/
                                   5,       /*線程優先級*/
                                   10);     /*線程時間片*/
                                   
    rt_thread_startup (key_thread);
}

2. 按鈕初始化

初始化函數需要在mian函數的while循環之前調用,也可以使用RT-Thread提供的硬件初始化宏來初始化。

本程序中設置了按鍵的狀態有三種:

typedef enum
{
    KEY_PRESSED  = 0u,
    KEY_RELEASED = 1u,
    KEY_UNKNOW   = 2u
} E_KeySt;

主要作用:

1)設置按鍵引腳;

2)設置引腳狀態為輸入;

3)設置按鍵濾波結構體,設置按鍵初始狀態為UNKNOW

原理圖如下:

S2 — PF1

S3 — PF0

S4 — PA2

poYBAGGqFY6Ae6-3AAAoQKbRhtg315.png

void KEY_AppInit(void)
{
    uint8_t i = 0u;

    Key_pin.Key1 = rt_pin_get("PF.1");
    Key_pin.Key2 = rt_pin_get("PF.0");
    Key_pin.Key3 = rt_pin_get("PA.2");

    rt_pin_mode(Key_pin.Key1, PIN_MODE_INPUT);
    rt_pin_mode(Key_pin.Key2, PIN_MODE_INPUT);
    rt_pin_mode(Key_pin.Key3, PIN_MODE_INPUT);

    for(i=0; i

三、按鍵濾波

按鍵濾波邏輯:檢測按鍵引腳狀態是否連續40ms都為低電平,如果都為低電平的話就認為是真的按下了,邏輯如下,修改KEY_SW_FILTER_THD可以修改按鍵的濾波時間,當前值為4,按鍵線程的運行周期為10ms,所以濾波時間為40ms:

static void KEY_KeySwFilterCounting(S_KeyStatusStr *paraKeySta)
{
    if(0u == paraKeySta->m_key_pin_st)
    {
        if(paraKeySta->m_filter_cnt >= KEY_SW_FILTER_THD)
        {
            paraKeySta->m_status = KEY_PRESSED;
        }
        else
        {
            paraKeySta->m_filter_cnt ++;
        }
    }
    else
    {
        paraKeySta->m_filter_cnt = 0u;
        paraKeySta->m_status = KEY_RELEASED;
    }
}

四、按鍵按下狀態判斷
按鍵按下狀態的判斷邏輯:

1)代碼中有一個變量定義為用于記錄上一個周期的按鍵按下的狀態

static E_KeySt Last_KeyStatus[KEY_NUM] = {KEY_UNKNOW, KEY_UNKNOW, KEY_UNKNOW};

2)讀取濾波之后的按鍵狀態變量

3)如果上一次按鍵的狀態為KEY_RELEASED,本次的按鍵狀態為KEY_PRESSED,則認為按鍵按下了

        if((KEY_PRESSED == KEY_GetKeyStatus(i))
            && (KEY_RELEASED== Last_KeyStatus[i]))
        {
            key_Pressed[i] = KEY_PRESSED;
        }

五、按鍵松手狀態判斷

與按鍵的按下邏輯相似,不同點在于上一次的按鍵按下狀態為KEY_PRESSE,這一次為KEY_RELEASED就認為按鍵釋放了。

        if((KEY_RELEASED == KEY_GetKeyStatus(i))
            && (KEY_PRESSED == Last_KeyStatus[i]))
        {
            key_Pressed[i] = KEY_RELEASED;
        }

六、按鍵按下時間判斷

按鍵按下時間可以用來區別按鍵是長安還是短按,可以用一個按鍵實現兩種或多種功能。

具體實現方式需要結合按鍵松手判斷一起時間,當按鍵按下的時候需要一個counter來記錄按鍵按下的時間,然后按鍵松手的時候讀取這個counter值的時間來判斷是長按還是短按。

時間counter的累積邏輯為:

if((KEY_PRESSED == KEY_GetKeyStatus(i))
            && (KEY_PRESSED == Last_KeyStatus[i]))
        {
            key_pressed_counter[i] ++;
        }

七、實現效果

按鈕按下會打?。篕ey [1,2,3] Pressed

按鈕松開會打?。篕ey [1,2,3] Released, 同時會打印按下的時間:Hold Key [1,2,3] for xxx ms

pYYBAGGqHRGANUz2AALpzzOwAxg160.png

八、代碼實現

貼上完整代碼實現,有問題歡迎指正

代碼直接粘貼可能存在遺漏,建議移步gitee:https://gitee.com/hehung/ab32-vg1_-rt-thread

.c文件

#include "app_key.h"
#include "board.h"

typedef struct
{
uint8_t Key1;
uint8_t Key2;
uint8_t Key3;
} S_key_pin;

typedef struct
{
uint8_t m_filter_cnt;
E_KeySt m_status;
uint8_t m_key_pin_st;
} S_KeyStatusStr;

S_key_pin Key_pin;
S_KeyStatusStr Key_Status[KEY_NUM];
E_KeySt key_Pressed[KEY_NUM] = {KEY_UNKNOW, KEY_UNKNOW, KEY_UNKNOW};
uint16_t key_pressed_counter[KEY_NUM] = {0, 0, 0};


static void KEY_ReadKeyLevel(void);
static void KEY_KeySwFilterCounting(S_KeyStatusStr *paraKeySta);
static void KEY_KeySwFilter(void);
static void KEY_ManageEntry(void *parameter);
static void KEY_ThreadManage(void);
static void KEY_JudgeKeyPressed(void);


void KEY_AppInit(void)
{
uint8_t i = 0u;

Key_pin.Key1 = rt_pin_get("PF.1");
Key_pin.Key2 = rt_pin_get("PF.0");
Key_pin.Key3 = rt_pin_get("PA.2");

rt_pin_mode(Key_pin.Key1, PIN_MODE_INPUT);
rt_pin_mode(Key_pin.Key2, PIN_MODE_INPUT);
rt_pin_mode(Key_pin.Key3, PIN_MODE_INPUT);

for(i=0; i {
Key_Status[i].m_filter_cnt = 0u;
Key_Status[i].m_key_pin_st = 0u;
Key_Status[i].m_status = KEY_UNKNOW;
}

KEY_ThreadManage();
}

E_KeySt KEY_GetKeyStatus(uint8_t paraKeyNum)
{
return Key_Status[paraKeyNum].m_status;
}

E_KeySt KEY_GetKeyPressedStatus(uint8_t paraKeyNum)
{
return key_Pressed[paraKeyNum];
}


static void KEY_ReadKeyLevel(void)
{
Key_Status[KEY_NUM_1].m_key_pin_st = (uint8_t)rt_pin_read(Key_pin.Key1);
Key_Status[KEY_NUM_2].m_key_pin_st = (uint8_t)rt_pin_read(Key_pin.Key2);
Key_Status[KEY_NUM_3].m_key_pin_st = (uint8_t)rt_pin_read(Key_pin.Key3);
}

static void KEY_KeySwFilterCounting(S_KeyStatusStr *paraKeySta)
{
if(0u == paraKeySta->m_key_pin_st)
{
if(paraKeySta->m_filter_cnt >= KEY_SW_FILTER_THD)
{
paraKeySta->m_status = KEY_PRESSED;
}
else
{
paraKeySta->m_filter_cnt ++;
}
}
else
{
paraKeySta->m_filter_cnt = 0u;
paraKeySta->m_status = KEY_RELEASED;
}
}

static void KEY_KeySwFilter(void)
{
KEY_KeySwFilterCounting(&Key_Status[KEY_NUM_1]);
KEY_KeySwFilterCounting(&Key_Status[KEY_NUM_2]);
KEY_KeySwFilterCounting(&Key_Status[KEY_NUM_3]);
}

static void KEY_JudgeKeyPressed(void)
{
uint8_t i = 0u;
static E_KeySt Last_KeyStatus[KEY_NUM] = {KEY_UNKNOW, KEY_UNKNOW, KEY_UNKNOW};

for(i=0u; i {
/*Key pressed this cycle*/
if((KEY_PRESSED == KEY_GetKeyStatus(i))
&& (KEY_RELEASED == Last_KeyStatus[i]))
{
key_Pressed[i] = KEY_PRESSED;
key_pressed_counter[i] = 0u;
rt_kprintf("KEY: Key %d Pressed\n", i);

}
else if((KEY_RELEASED == KEY_GetKeyStatus(i))
&& (KEY_PRESSED == Last_KeyStatus[i]))
{
key_Pressed[i] = KEY_RELEASED;
rt_kprintf("KEY: Key %d Released\n", i);
rt_kprintf("KEY: Hold Key for %d ms\n", key_pressed_counter[i]*10);
}
else if((KEY_PRESSED == KEY_GetKeyStatus(i))
&& (KEY_PRESSED == Last_KeyStatus[i]))
{
key_pressed_counter[i] ++;
}

Last_KeyStatus[i] = KEY_GetKeyStatus(i);
}
}

static void KEY_ManageEntry(void *parameter)
{
while(1)
{
KEY_ReadKeyLevel();
KEY_KeySwFilter();
KEY_JudgeKeyPressed();
rt_thread_mdelay(10);
}
}

static void KEY_ThreadManage(void)
{
rt_thread_t key_thread;

key_thread = rt_thread_create("KEY Thread Manage", /*線程名字*/
KEY_ManageEntry,/*線程入口函數*/
RT_NULL, /*線程入口函數參數*/
2048, /*線程棧大小*/
5, /*線程優先級*/
10); /*線程時間片*/

if(key_thread != RT_NULL)
{
rt_kprintf("KEY Thread Created Success!\n");
rt_thread_startup (key_thread);
}
else
{
rt_kprintf("KEY Thread Create Failed!\n");
}
}

.h文件

#ifndef APPLICATIONS_APP_KEY_H_
#define APPLICATIONS_APP_KEY_H_

#include "stdint.h"

typedef enum
{
    KEY_PRESSED  = 0u,
    KEY_RELEASED = 1u,
    KEY_UNKNOW   = 2u
} E_KeySt;

#define KEY_NUM                           (3u)
#define KEY_NUM_1                         (0u)
#define KEY_NUM_2                         (1u)
#define KEY_NUM_3                         (2u)

#define KEY_SW_FILTER_THD                 (4u)

#define KEY_SAMPLE_PERIOD                 (10u)
#define KEY_HOLD_SHORT_TIME               (500u) /*ms*/
#define KEY_HOLD_MIDDLE_TIME              (1500u) /*ms*/
#define KEY_HOLD_LONG_TIME                (1500u) /*ms*/

extern E_KeySt KEY_GetKeyStatus(uint8_t paraKeyNum);
extern E_KeySt KEY_GetKeyPressedStatus(uint8_t paraKeyNum);

void KEY_AppInit(void);

#endif
收藏 人收藏
分享:

評論

相關推薦

RT-Thread零基礎快速入門第9講——串口(UART/RS485)

串口是單片機最常用的通訊方式之一,關于串口的介紹在RT-thread官網上已經有非常詳細的介紹了,我....
發表于 12-06 18:51 ? 4次 閱讀
RT-Thread零基礎快速入門第9講——串口(UART/RS485)

基于RT-Thread系統的機智云數字儀表教程(一)——移植RT-Thread的BSP模板

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成....
發表于 12-06 18:51 ? 5次 閱讀
基于RT-Thread系統的機智云數字儀表教程(一)——移植RT-Thread的BSP模板

【RTT大賽作品連載】 OLED顯示中文

使用AB32VG1操作OLED顯示文字信息,包括漢字取模方式介紹,漢字顯示函數編寫.
的頭像 閑來無事玩單片機呀 發表于 12-06 09:25 ? 527次 閱讀
【RTT大賽作品連載】 OLED顯示中文

【RTT大賽作品連載】 OLED顯示圖片

使用AB32VG1驅動IIC顯示圖片。
的頭像 閑來無事玩單片機呀 發表于 12-06 09:17 ? 527次 閱讀
【RTT大賽作品連載】 OLED顯示圖片

【RTT大賽作品連載】 PWM操作蜂鳴器

使用AB32VG1的PWM來操作無源蜂鳴器,能夠輸出頻率為1KHz到20KHz的聲音。
的頭像 閑來無事玩單片機呀 發表于 12-06 08:36 ? 536次 閱讀
【RTT大賽作品連載】 PWM操作蜂鳴器

如何對STM32 USB的按鍵鍵值進行測試呢

STM32 USB鼠標鍵盤數據格式是怎樣的? 如何對STM32 USB的按鍵鍵值進行測試呢? ...
發表于 12-06 07:16 ? 0次 閱讀

《嵌入式 - Lwip開發指南》第4章 移植LWIP(基于RT-Thead系統-以太網+Wifi)

開發環境:RT-Thread版本:4.0.3操作系統:Windows10Keil版本:V5.30RT....
發表于 12-05 20:06 ? 14次 閱讀
《嵌入式 - Lwip開發指南》第4章 移植LWIP(基于RT-Thead系統-以太網+Wifi)

《嵌入式-STM32開發指南》第二部分 基礎篇 - 第3章 按鍵(HAL庫)

標準庫3.5實現:《嵌入式-STM32開發指南》第二部分 基礎篇 - 第3章 按鍵3.1普通方式3.....
發表于 12-05 12:21 ? 4次 閱讀
《嵌入式-STM32開發指南》第二部分 基礎篇 - 第3章 按鍵(HAL庫)

國民技術N32G457移植RT-Thread

文章目錄前言一、替換文件二、添加文件到工程三、修改源碼總結前言移植RT-Thread到國民技術N32....
發表于 12-05 11:06 ? 6次 閱讀
國民技術N32G457移植RT-Thread

記錄——基于 RT-Thread 實現 USB 虛擬串口

記錄——基于 RT-Thread 實現 USB 虛擬串口記錄一下我在正點原子 F429 阿波羅開發板....
發表于 12-02 17:21 ? 10次 閱讀
記錄——基于 RT-Thread 實現 USB 虛擬串口

ART-Badge V2.0開發記錄,極客感十足!

不論風云變幻,RT-Thread通過不斷迭代和生態的完善,與開發者共成長。Beyond.RDC 20....
的頭像 物聯網星球 發表于 12-02 16:30 ? 293次 閱讀
ART-Badge V2.0開發記錄,極客感十足!

RDC到場禮,ART-Badge V2.0開發記錄!極客感十足!

開源地址: 前言 關注 RT-Thread 的同學肯定知道,RT-Thread為了向眾多開發者展示RT-Thread的最新開發和生態建...
發表于 12-02 15:53 ? 101次 閱讀
RDC到場禮,ART-Badge V2.0開發記錄!極客感十足!

STM32L431RCT6單片機自制板復位按鍵不靈

STM32L431RCT6單片機自制板復位按鍵不靈的可能問題自制的STM32L431RCT6單片機的板子出現了這樣的問題:1、在Keil...
發表于 12-02 06:30 ? 0次 閱讀

聊聊對按鍵掃描軟件結構的理解

按鍵掃描,我想應該是比較簡單的單片機應用了,但是有時候看起來簡單的東西反而不好寫。本文拿大部分人覺得簡單的按鍵掃描聊聊我...
發表于 12-02 06:27 ? 0次 閱讀

RT-Thread X RISC-V創新應用設計大賽已初審通過數百位參賽團隊

9月14日RT-Thread聯手中科藍訊、沁恒微電子、電子發燒友發起“RT-Thread X RIS....
的頭像 電子發燒友論壇 發表于 12-01 17:13 ? 359次 閱讀

關于RTOS的基本移植鴻蒙OS項目

源碼中包含比較全面,我們可以選擇不需要的部分將其排除在編譯之外,操作方法為右鍵目錄或文件,點擊Inc....
的頭像 電子發燒友論壇 發表于 12-01 17:07 ? 367次 閱讀
關于RTOS的基本移植鴻蒙OS項目

單片機按鍵是如何控制led亮滅的

單片機 按鍵控制led亮滅初始狀態按下k1按下k2按下剩余按鍵再按下k1按下剩余按鍵代碼如下#include void delay(unsigned int n)//延...
發表于 12-01 07:02 ? 0次 閱讀

行掃描法是什么?有何功能

目錄問題描述行掃描法1.判斷鍵盤中有無按鍵按下。2.判斷閉合鍵所在的位置。3.去抖動。器件選擇軟件設計原理圖繪制問題描述設計一...
發表于 12-01 06:57 ? 0次 閱讀

如何利用I/O口連接流水燈、按鍵和指示燈呢

單片機實驗1實驗內容利用I/O口連接8個流水燈、1個按鍵和1個指示燈,流水燈循環閃爍,當按下按鍵后,指示燈閃爍3次,然后流水燈...
發表于 12-01 06:49 ? 0次 閱讀

關于按鍵控制實驗相關資料下載

關于按鍵控制實驗我的單片機是正點原子精英板,有三個按鈕KEY0,KEY1,WK_UP分別控制LED0,LED1,(LED0和L...
發表于 12-01 06:33 ? 0次 閱讀

單片機是如何去判斷當前繼電器的通斷情況呢

既上一次發布博文,這一次發表的文章是對上一篇博文的補充改進。本著優化算法的原則,硬件簡化后,軟件便會變得復雜。  &nb...
發表于 12-01 06:21 ? 0次 閱讀

學習C51單片機的按鍵移位

今天開始學習C51單片機的按鍵移位實驗實驗所用的是LED和獨立按鍵首先講光盤給的案例代碼給出/*****************************...
發表于 12-01 06:19 ? 0次 閱讀

RT-Thread零基礎快速入門第1講——新建工程

RT-Thread零基礎快速入門第2講——新建工程目錄RT-Thread零基礎快速入門第2講——新建....
發表于 11-30 19:21 ? 17次 閱讀
RT-Thread零基礎快速入門第1講——新建工程

RW007_WiFi模塊(SPI/UART模式)在STM32F407上的使用經驗

RW007模塊官方文檔:https://www.rt-thread.org/document/sit....
發表于 11-30 19:06 ? 21次 閱讀
RW007_WiFi模塊(SPI/UART模式)在STM32F407上的使用經驗

基于STM32F407的STM32通用BootLoader使用經驗

背景: 在使用RT-Thread RTOS的時候發現官方提出了一種通用的BootLoader方案,支....
發表于 11-30 19:06 ? 22次 閱讀
基于STM32F407的STM32通用BootLoader使用經驗

RT-thread應用講解——OTA

OTA(空中下載技術)是通過移動通信的空中接口實現對移動終端設備進行遠程管理和升級的技術。我們調試硬....
發表于 11-30 18:36 ? 23次 閱讀
RT-thread應用講解——OTA

單片機常用濾波算法

說明:假定從 8位 AD中讀取數據(如果是更高位的 AD可定義數據類型為 int),子程序為 get....
發表于 11-29 14:06 ? 11次 閱讀
單片機常用濾波算法

【RTT大賽作品連載】CH32V103 USBHID鍵盤鼠標

基于CH32V103實現了USB HID的鍵盤鼠標功能,提供寫好的代碼文件,歡迎fork。
的頭像 煲仔鹵煮的煉鋼 發表于 11-29 08:49 ? 1355次 閱讀

【RTT大賽作品連載】CH32V RTT微秒延時的實現

CH32V103是沁恒出的一款基于RiscV核心的單片機,在官網有該芯片的資料、庫函數和例程,另外沁....
的頭像 煲仔鹵煮的煉鋼 發表于 11-29 08:30 ? 1739次 閱讀
【RTT大賽作品連載】CH32V RTT微秒延時的實現

國潮崛起!RT-Thread國產MCU移植貢獻活動!

2020年下半年開始,史無前例的芯片缺貨潮拉開大幕。供需失衡之下,芯片的交期和價格不斷拉升,其中以國....
發表于 11-26 09:36 ? 22次 閱讀
國潮崛起!RT-Thread國產MCU移植貢獻活動!

【RTT大賽作品連載】AB32VG1評估板 炫酷音樂播放器

AB32VG1評估板
的頭像 磐石90 發表于 11-26 08:43 ? 3072次 閱讀
【RTT大賽作品連載】AB32VG1評估板 炫酷音樂播放器

單片機 多個按鍵控制多個led亮滅

單片機 按鍵控制led亮滅初始狀態按下k1按下k2按下剩余按鍵再按下k1按下剩余按鍵代碼如下#inc....
發表于 11-23 16:20 ? 24次 閱讀
單片機 多個按鍵控制多個led亮滅

單片機c語言實現按鍵輸入程序(支持連按與不支持連按)

按鍵程序大體可分為兩類:支持連按和不支持連按支持連按的程序如下,此程序不會檢查是否之前已經按下,而是....
發表于 11-20 19:36 ? 18次 閱讀
單片機c語言實現按鍵輸入程序(支持連按與不支持連按)

通過多線程來實現ADC采集功能和OLED顯示功能

RTOS編程和裸機編程最大的區別就是RTOS可實現多線程管理,這是RTOS的最大優勢。既然跑了操作系....
的頭像 MCU學習筆記 發表于 11-20 09:30 ? 423次 閱讀
通過多線程來實現ADC采集功能和OLED顯示功能

『前沿電容』之陶瓷電容龍虎榜

我們先來盤一盤藏龍臥虎的 Vishay 陶瓷電容,看看里面有哪些“高手”。
發表于 11-18 17:20 ? 3112次 閱讀
『前沿電容』之陶瓷電容龍虎榜

Vishay推出用于多相電源具有超低直流內阻的IHSR高溫商用電感器

Vishay宣布,推出7.4 mm x 6.6 mm x 3.0 mm 2525外形尺寸全新IHSR....
發表于 11-17 15:12 ? 1941次 閱讀
Vishay推出用于多相電源具有超低直流內阻的IHSR高溫商用電感器

單片機ADC采樣算法----中位值濾波法

中位值濾波法就是通過連續采樣奇數個數據,然后對數據從小到大排序,取中間的值做為本次采樣值。 下面....
發表于 11-17 09:06 ? 19次 閱讀
單片機ADC采樣算法----中位值濾波法

【RTT大賽作品連載】AB32VG1的開發環境搭建

基于RT-Thread的AB32VG1開發環境搭建.
的頭像 RT-thread 發表于 11-17 08:48 ? 4743次 閱讀
【RTT大賽作品連載】AB32VG1的開發環境搭建

【RTT大賽作品連載】AB32VG1評估板到貨調試分享

解決波特率異常,打印輸出
的頭像 jf_21102043 發表于 11-15 17:36 ? 2949次 閱讀
【RTT大賽作品連載】AB32VG1評估板到貨調試分享

單片機學習筆記——按鍵和LED復用掃描程序

在我們的實際產品開發過程中,為了節省成本,常常會采用按鍵和LED復用,從而達到節省IO口的目的。很多....
發表于 11-14 10:36 ? 39次 閱讀
單片機學習筆記——按鍵和LED復用掃描程序

【RTT大賽作品連載】中科藍訊AB32VG1開發板開箱篇

介紹電路原理圖分析接口說明,AB32VG1開發板是以中科藍訊(Bluetrum)公司推出的基于RIS....
的頭像 RT-thread 發表于 11-13 10:01 ? 4449次 閱讀
【RTT大賽作品連載】中科藍訊AB32VG1開發板開箱篇

基于單片機的DS18B20的數字溫度監控報警系統設計【LCD1602顯示+Proteus仿真+C程序+論文+按鍵設置等】

注:獲取全套資源,請見后文說明…設計要求1.測量溫度值精度為±1℃;2.系統允許的誤差范圍為1℃以內....
發表于 11-13 09:21 ? 56次 閱讀
基于單片機的DS18B20的數字溫度監控報警系統設計【LCD1602顯示+Proteus仿真+C程序+論文+按鍵設置等】

C51單片機——多個按鍵中斷控制實現

C51單片機——多個按鍵中斷控制實現1.實現代碼/** 2018-10-22*/#include&l....
發表于 11-12 12:21 ? 42次 閱讀
C51單片機——多個按鍵中斷控制實現

單片機原理與應用實驗——中斷嵌套(C語言),定時器0和外部中斷0的嵌套,分別實現流水燈和按鍵

(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 編譯)#inc....
發表于 11-10 20:35 ? 23次 閱讀
單片機原理與應用實驗——中斷嵌套(C語言),定時器0和外部中斷0的嵌套,分別實現流水燈和按鍵

單片機原理與應用實驗——按鍵控制(匯編)

(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 編譯)LED1....
發表于 11-10 18:06 ? 26次 閱讀
單片機原理與應用實驗——按鍵控制(匯編)

【RT-Thread創新應用設計大賽】串口接收/打開錯誤問題

記錄在做rt thread創新應用大賽的時候遇到的“串口發送錯誤”問題。
的頭像 萌萌的魔法世界 發表于 11-10 08:18 ? 1670次 閱讀
【RT-Thread創新應用設計大賽】串口接收/打開錯誤問題

瑞薩電子正式成為RT-Thread金牌會員:進一步加速RA生態發展

日前,全球半導體解決方案供應商瑞薩電子(Renesas)與知名物聯網操作系統廠商睿賽德科技(RT-T....
的頭像 jf_07720083 發表于 11-09 10:38 ? 31次 閱讀
瑞薩電子正式成為RT-Thread金牌會員:進一步加速RA生態發展

使用中科藍訊AB32VG1 V2.0點亮第一篇

使用中科藍訊AB32VG1開發板點亮第一篇
發表于 11-08 16:23 ? 1733次 閱讀
使用中科藍訊AB32VG1 V2.0點亮第一篇

線性電源(AC/DC)原理分析

一、線性電源(AC/DC)是先將交流電經過變壓器降低電壓賦值,在經過整流電路整流后,得到脈動的直流電....
發表于 11-08 13:06 ? 61次 閱讀
線性電源(AC/DC)原理分析

【RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試

【RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試篇;接下來看看在如何AB32VG1評估板控....
的頭像 磐石90 發表于 11-07 19:39 ? 1745次 閱讀
【RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試

電源模塊中濾波電容的作用

電解電容:容量大,精度差,一般用來濾除低頻波;陶瓷電容:容量小,精度高,無極性,一般用在濾波電路,振....
發表于 11-06 14:06 ? 48次 閱讀
電源模塊中濾波電容的作用

基于rt-thread studio的sdk開發adc的應用詳解

本文將介紹基于 rt-thread studio 的 sdk 開發 adc 的應用。本實驗是在昨天的....
的頭像 MCU學習筆記 發表于 11-06 09:41 ? 1369次 閱讀
基于rt-thread studio的sdk開發adc的應用詳解

RTT大賽作品:AB32VG1開發板OLED顯示實驗

最近在玩AB32VG1,在做OLED顯示實驗時,很多關于AB32VG1驅動OLED的文章,很多都是官....
的頭像 MCU學習筆記 發表于 11-05 16:03 ? 1789次 閱讀
RTT大賽作品:AB32VG1開發板OLED顯示實驗

【RTT大賽作品連載】AB32VG1評估板到貨點燈測試

AB32VG1評估板到貨點燈測試.
的頭像 磐石90 發表于 11-04 08:55 ? 4429次 閱讀
【RTT大賽作品連載】AB32VG1評估板到貨點燈測試

嵌入式Linux input

文章目錄前言input子系統按鍵檢測C代碼微信公眾號前言這是前3篇:嵌入式Linux i.MX開發板....
發表于 11-01 16:31 ? 35次 閱讀
嵌入式Linux input

RISC-V架構開發板AB32VG1測評之GPIO點燈

一、介紹 AB32VG1 開發板是以中科藍訊 (Bluetrum) 公司推出的基于RIS....
的頭像 AB32VG1評測 發表于 10-28 11:48 ? 4196次 閱讀
RISC-V架構開發板AB32VG1測評之GPIO點燈

解決醫療電子設備干擾問題的方案

我們經常只說醫療電子設備要散熱的問題,其實醫療儀器的干擾與抗干擾才是更讓人很頭疼的問題。一方面醫療電....
發表于 10-26 15:06 ? 84次 閱讀

Error: Unable to reset MCU!

出現Error: Unable to reset MCU!的解決方法
發表于 10-25 21:06 ? 45次 閱讀
Error: Unable to reset MCU!

【RTT大賽作品連載】AB32VG1開箱、搭建環境、演示、點燈

【AB32VG1】開箱、搭建環境、演示、點燈,為下面做好準備。
的頭像 硬核造拆物 發表于 10-25 16:47 ? 2513次 閱讀
【RTT大賽作品連載】AB32VG1開箱、搭建環境、演示、點燈

給樹莓派添加開關機鍵

給樹莓派添加開、關機鍵聲明本文由u013062709原創,禁止二次修改發布。轉載及引用內容請注明出處....
發表于 10-21 15:51 ? 47次 閱讀
給樹莓派添加開關機鍵
免费少妇a级毛片