欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STM32之按鍵 [打印本頁]

作者: 51黑tt    時(shí)間: 2016-3-4 20:19
標(biāo)題: STM32之按鍵
正式開始學(xué)習(xí)STM32了!!!!!要堅(jiān)持下去
開發(fā)板:基于STM103C8T6的迷你彩屏開發(fā)板
燒些工具:Jlink8
學(xué)習(xí)一個(gè)芯片我們大多先以控制它的GPIO口開始的,今天我就開進(jìn)行按鍵和LED。
這里我利用了網(wǎng)上別人寫的一個(gè)SYSTEM文件夾,里面有delay,sys,usart三個(gè)子文件夾
這里面是STM103F103C系列的底層驅(qū)動(dòng)函數(shù),以后不再述說。
我的兩個(gè)LED接的是PA9,10;兩個(gè)按鍵的接的是PA11,12
先上我的代碼
先是led.h
#ifndef LED_H
#define LED_H
#include"sys.h"  //I/O口相關(guān)函數(shù)的文件
#define LED0 PAout(9)  //PAout是輸出
#define LED1 PAout(10)
void LED_Init(void);
#endif

led.c
#include<stm32f10x_lib.h>
#include"led.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<2;    //使能PORTA時(shí)鐘
GPIOA->CRH&=0xFFFFF00F;   //  清除PA9,10所在口的設(shè)置
GPIOA->CRH|=0x00000330;   // 設(shè)置PA,9,10推挽輸出
GPIOA->ODR|=1<<9;   //  PA9輸出高
GPIOA->ODR|=1<<10;    //PA10輸出高
}

key.h
#ifndef KEY_H
#define KEY_H
#include"sys.h"
#define KEY0 PAin(11)  //PAin是輸入
#define KEY1 PAin(12)
void KEY_Init(void);  //按鍵初始化函數(shù)
u8 KEY_Scan(void); //按鍵檢測(cè)函數(shù)
#endif

key.c
#include<stm32f10x_lib.h>
#include"key.h"
#include"delay.h"  //延時(shí)相關(guān)的函數(shù)集
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA時(shí)鐘
GPIOA->CRH&=0XFFF00FFF; //清除設(shè)置
GPIOA->CRH|=0X00044000;//設(shè)置為浮空輸入,當(dāng)然這里設(shè)置上/下拉輸入也是可以的
}
u8 KEY_Scan(void)
{
static u8key_up=1;//按鍵按松開標(biāo)志
if(key_up&&(KEY0==0||KEY1==0))
{
  delay_ms(10);//去抖動(dòng)
  key_up=0;
  if(KEY0==0)
  {
   return1;
  }
  else if(KEY1==0)
  {
   return2;
  }
  
}
elseif(KEY0==1&&KEY1==1)
   key_up=1;   
  
return 0;// 無按鍵按下
}

主函數(shù)
#include<stm32f10x_lib.h>
#include"delay.h"
#include"usart.h"
#include"led.h"
#include"sys.h"
#include"key.h"
int main(void)
{
u8 t=0;
Stm32_Clock_Init(9);  //系統(tǒng)是時(shí)鐘設(shè)置
delay_init(72);   //延時(shí)初始化
LED_Init();
KEY_Init();
LED0=1;
LED1=1;
  while(1)
  {
   t=KEY_Scan();//得到鍵值
    if(t!=0)
  {        
   switch(t)
   {   
    case1:
     LED0=!LED0;
     break;
    case2:
     LED1=!LED1;
     break;
  
   }
  }
  else
   delay_ms(10);
}
}

總結(jié):我開始編譯通過,但是燒寫進(jìn)板子后按鍵視乎不起作用,檢查了半天,看寄存器都對(duì)的,后來才發(fā)現(xiàn)按鍵的宏定義錯(cuò)誤了 錯(cuò)誤:#define KEY0 PAout(11);  正確:#define KEY0PAin(11);因?yàn)榘存I是要檢測(cè)IO口的狀態(tài)故是輸入,而LED類的是輸出,這個(gè)需要注意!!!






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1