久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

STM32庫(kù)開發(fā)之按鍵控制LED燈

作者:寒竹子   來源:用戶上傳   點(diǎn)擊數(shù):  更新時(shí)間:2014年05月18日   【字體:

 /*****************主要的用戶自己編寫的文件*********************/

/**
  ***********************************************************************
  * @file     : main.c
  * @author   : xr
  * @date     : 2014年5月14日08:23:25
  * @version  : V1.0
  * @brief    : 采用輪詢方式檢測(cè)按鍵 STM32F103VE T6 MCU
  ***********************************************************************
  * @attention 
  * 實(shí)驗(yàn)平臺(tái)  : 野火ISO-MINI-STM32開發(fā)板
  * 實(shí)驗(yàn)現(xiàn)象  : 按下按鍵K2,實(shí)現(xiàn)LED1小燈的亮滅反轉(zhuǎn) 
  *             按下按鍵K3,實(shí)現(xiàn)LED2小燈的亮滅反轉(zhuǎn)
  ***********************************************************************
  */
#include "stm32f10x.h" /* 上帝之手 STM32庫(kù)頭文件 */
#include "led.h"
#include "key.h"
 
 
/**
  * @brief    : 主函數(shù)
  * @param    : 無
  * @retval   : 無
  */
int main(void)
{
    ConfigLed();      /* 初始化LED控制端口 */  
    ConfigKey();      /* 初始化按鍵控制端口 */
    
    LED1( ON );       /* 開始時(shí)點(diǎn)亮LED1 */
    LED2( ON );       /* 開始時(shí)點(diǎn)亮LED2 */
    
    while (1)
    {
        /* add your codes ^_^ */
        /* 檢測(cè)按鍵K2是否按下 */
        if ( KeyScan( GPIOA, GPIO_Pin_0 ) == KEY_ON )
        {
            /* LED1反轉(zhuǎn) 讀取GPIOB 0端口位的值并用1減去之后再寫入此位即LED1的控制位 */
            GPIO_WriteBit( GPIOB,  GPIO_Pin_0,  (BitAction)(1 -  GPIO_ReadOutputDataBit( GPIOB, GPIO_Pin_0 )));
        }
        /* 檢測(cè)按鍵K3是否按下 */
        if ( KeyScan( GPIOC, GPIO_Pin_13 ) == KEY_ON )
        {
            /* LED2反轉(zhuǎn) */
            GPIO_WriteBit( GPIOC, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit( GPIOC, GPIO_Pin_4 )));
        }
    }
}
 
/**********************************************END OF FILE******************/
 
/**
  ***************************************************************
  * @file    led.h
  * @author  xr
  * @date    2014年5月17日13:00:58
  * @brief   LED小燈驅(qū)動(dòng)頭文件
  ***************************************************************
  * @attention
  * 實(shí)驗(yàn)平臺(tái)        : 野火ISO-MINI開發(fā)板
  * LED小燈硬件連接 : -------------------
  *                   | LED1 ---- PB0   |
  *                   | LED2 ---- PC4   |
  *                   | LED3 ---- PC3   | 
  *                   -------------------  
  ***************************************************************
  */
#ifndef _LED_H_
#define _LED_H_
 
#include "stm32f10x.h" /* 使用stm32庫(kù) */
 
/* 控制小燈: 1 滅 0 亮 */
#define ON 0
#define OFF 1
 
/* 帶參宏 */
#define LED1(a) if (a) \
                    GPIO_SetBits( GPIOB, GPIO_Pin_0 ); \
                 else \
                    GPIO_ResetBits( GPIOB, GPIO_Pin_0 )
#define LED2(a) if (a) \
                    GPIO_SetBits( GPIOC, GPIO_Pin_4 ); \
                else \
                    GPIO_ResetBits( GPIOC, GPIO_Pin_4 )
#define LED3(a) if (a) \
                   GPIO_SetBits( GPIOC, GPIO_Pin_3 ); \
                else \
                   GPIO_ResetBits( GPIOC, GPIO_Pin_3 )
 
void ConfigLed(void);
 
#endif /* _LED_H_ */
/*******************************************************END OF FILE*****/
/**
  ***************************************************************
  * @file    led.c
  * @author  xr
  * @date    2014年5月17日13:00:58
  * @brief   LED小燈驅(qū)動(dòng)
  ***************************************************************
  * @attention
  * 實(shí)驗(yàn)平臺(tái)        : 野火ISO-MINI開發(fā)板
  * LED小燈硬件連接 : -------------------
  *                   | LED1 ---- PB0   |
  *                   | LED2 ---- PC4   |
  *                   | LED3 ---- PC3   | 
  *                   -------------------  
  ***************************************************************
  */
#include "led.h"
 
/**
  * @brief  :  配置LED小燈的GPIO端口
  * @param  :  無
  * @retval :  無
  */
void ConfigLed(void)
{
    GPIO_InitTypeDef GPIO_InitStruct; /* 定義GPIO_InitTyPeDef結(jié)構(gòu)體變量 */
    
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE ); /* 開啟APB2總線上的GPIOB和GPIOC時(shí)鐘 */
    
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; /* 設(shè)置引腳為通用強(qiáng)推挽輸出 */
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; /* 設(shè)置輸出為50MHZ */
    
    /* 調(diào)用庫(kù)函數(shù)初始化GPIOB端口 */
    GPIO_Init  ( GPIOB, &GPIO_InitStruct );
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3; /* 選擇3,4引腳 */
    /* 調(diào)用庫(kù)函數(shù)初始化GPIOC的34引腳 */
    GPIO_Init  (GPIOC, &GPIO_InitStruct );
    
    /* 關(guān)閉LED */
    GPIO_SetBits  ( GPIOB,  GPIO_Pin_0 );
    GPIO_SetBits  ( GPIOC,  GPIO_Pin_4 | GPIO_Pin_3 );
}
/*************************************************END OF FILE***********/
/**
  ***************************************************************
  * @file    key.h
  * @author  xr
  * @date    2014年5月17日13:00:58
  * @brief   按鍵驅(qū)動(dòng)頭文件
  ***************************************************************
  * @attention
  * 實(shí)驗(yàn)平臺(tái)        : 野火ISO-MINI開發(fā)板
  * 按鍵硬件連接    : ------------------
  *                   | K2 ----  PA0   |
  *                   | K3 ----  PC13  | 
  *                   ------------------  
  ***************************************************************
  */
#ifndef _KEY_H_
#define _KEY_H_
 
#include "stm32f10x.h"
 
#define KEY_ON  0
#define KEY_OFF 1
 
void ConfigKey( void );
uint8_t KeyScan( GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin_x );
 
#endif /* _KEY_H_ */
/**********************************************END OF FILE*******/
/**
  ***************************************************************
  * @file    key.c
  * @author  xr
  * @date    2014年5月17日13:00:58
  * @brief   按鍵驅(qū)動(dòng)
  ***************************************************************
  * @attention
  * 實(shí)驗(yàn)平臺(tái)        : 野火ISO-MINI開發(fā)板
  * 按鍵硬件連接    : ------------------
  *                   | K2 ----  PA0   |
  *                   | K3 ----  PC13  | 
  *                   ------------------  
  ***************************************************************
  */
#include "key.h"
 
/**
  * @brief   :  不精確延時(shí)
  * @param   :  nCounter
  * @retval  :  無
  */
static void KeyDelay( uint32_t nCounter )
{
    while ( nCounter-- );
}
 
/**
  * @brief   : 配置按鍵用到的I/O口
  * @param   : 無
  * @retval  : 無
  */
void ConfigKey( void )
{
    GPIO_InitTypeDef GPIO_InitStructure; /* 定義初始化端口的結(jié)構(gòu)體變量 */
    /* 開啟按鍵2的時(shí)鐘 */
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    //輸入模式不需要配置端口的輸出速率GPIO_Speed
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  /* 配置按鍵的引腳為上拉 */
    
    /* 調(diào)用庫(kù)函數(shù)初始化key引腳 */
    GPIO_Init( GPIOA, &GPIO_InitStructure );
}
 
/**
  * @brief  : 按鍵按下檢測(cè)
  * @param  : 端口 : GPIOx  端口位 : GPIO_Pin_x
  * @retval : 按鍵的狀態(tài) : 按下 彈起
  */
uint8_t KeyScan( GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin_x )
{
    /* 檢測(cè)是否有按鍵按下 */
    if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON )
    {
        KeyDelay(0x57E40);  /* 延時(shí)消抖 延時(shí)大約5ms */
        if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON )
        {
            while ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON ); /* 等待按鍵釋放 */
            return KEY_ON;
        }
        else
        {
            return KEY_OFF;
        }
    }
    return KEY_OFF;
}
 
/**************************************************END OF FILE*******/
關(guān)閉窗口
主站蜘蛛池模板: 国产一区二区三区精品久久久 | 欧美日韩福利视频 | 精品欧美激情精品一区 | 亚洲精品在线观看网站 | 日本欧美国产 | 精品久久久久久中文字幕 | 在线观看av网站 | 欧美理论片在线观看 | 久久久久成人精品免费播放动漫 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 国产成人福利 | 91av在线影院 | 欧美视频在线播放 | 成年视频在线观看福利资源 | 亚洲另类自拍 | 国产精品精品久久久久久 | 国产一区二区三区免费 | 激情伊人网 | 亚洲第1页 | 999精品视频在线观看 | 盗摄精品av一区二区三区 | 粉嫩一区二区三区性色av | 国产一级一级 | 亚洲成人免费视频 | 亚洲国产成人久久久 | www.黄色片视频 | 国产 日韩 欧美 中文 在线播放 | 欧美极品在线观看 | 最新日韩在线视频 | 国产97碰免费视频 | 国产精品免费一区二区三区四区 | 久久亚洲国产 | 天天拍天天操 | 国产成人精品免费视频大全最热 | 日韩福利| 99久久免费精品视频 | 在线第一页 | 亚洲欧洲综合av | 色婷婷精品国产一区二区三区 | 99成人在线视频 | 麻豆国产一区二区三区四区 |