網(wǎng)站怎么做下載連接重慶seo網(wǎng)絡(luò)推廣平臺(tái)
原理部分
1.LED部分使用的是這樣的連接方式
2.傳感器模塊的電路圖
濾波電容如果接地,一般用于濾波,在分析電路時(shí)就不用考慮。下面這個(gè)電路就是看A端和B端哪端的拉力大,就能把電壓值對(duì)應(yīng)到相應(yīng)的電壓值
比較器部分
如果A端電壓>B端電壓,接VCC,反之接地
傳感器需要上拉或下拉驅(qū)動(dòng),一般用下拉驅(qū)動(dòng)
3.按鍵需要消除抖動(dòng)
4.連接示意圖
代碼編寫(xiě)
1.思路
首先實(shí)現(xiàn)LED亮滅,隨后實(shí)現(xiàn)按鍵1控制LED亮滅,最后實(shí)現(xiàn)2個(gè)按鍵各自控制兩個(gè)ledd的亮滅
2.按照江科大老師給的電路連接接圖進(jìn)行連接
注意:?
? ??由于連接圖中兩個(gè)LED,一個(gè)連接的GPIO口為A1,一個(gè)連接的GPIO口為A2,所以需要分別定義
? ? GPIO口默認(rèn)為低電平
3.復(fù)制之前已經(jīng)構(gòu)建好的模板庫(kù)
4.新建hardware文件夾并將路徑聯(lián)系到工程中,在hardware中新建led.c,led.h;key.c,‘key.h文件
5.led.h代碼如下所示:
#ifndef _LED__H
#define _LED__H
void led_Init(void);
void led1_on(void);
void led1_off(void);
void led2_on(void);
void led2_off(void);
void turn_1(void);
void turn_2(void);
#endif
6.led.c代碼如下所示:
#include "stm32f10x.h"?
void led_Init(void)
{
?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);?? ?//開(kāi)啟GPIOB的時(shí)鐘
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//使用各個(gè)外設(shè)前必須開(kāi)啟時(shí)鐘,否則對(duì)外設(shè)的操作無(wú)效
?? ?
?? ?/*GPIO初始化*/
?? ?GPIO_InitTypeDef GPIO_InitStructure;?? ??? ??? ??? ??? ?//定義結(jié)構(gòu)體變量
?? ?
?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;?? ??? ?//GPIO模式,賦值為推挽輸出模式
?? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2; ? ?//GPIO引腳,賦值為第1,2號(hào)引腳
?? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;?? ??? ?//GPIO速度,賦值為50MHz
?? ?
?? ?GPIO_Init(GPIOA, &GPIO_InitStructure);?? ??? ??? ??? ??? ?//將賦值后的構(gòu)體變量傳遞給GPIO_Init函數(shù)
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//函數(shù)內(nèi)部會(huì)自動(dòng)根據(jù)結(jié)構(gòu)體的參數(shù)配置相應(yīng)寄存器
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//實(shí)現(xiàn)GPIOB的初始化
?? ?//LED默認(rèn)為滅,SetBits是滅,ReSetBits是亮
?? ?GPIO_SetBits(GPIOA, GPIO_Pin_1|GPIO_Pin_2);
}
void led1_on(void)
{
?? ?GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
void led1_off(void)
{
?? ?GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
void led2_on(void)
{
?? ?GPIO_ResetBits(GPIOA, GPIO_Pin_2);
}
void led2_off(void)
{
?? ?GPIO_SetBits(GPIOA, GPIO_Pin_2);
}
void turn_1(void)
{
?? ?if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)==0)
?? ?{
?? ??? ?GPIO_SetBits(GPIOA, GPIO_Pin_1);
?? ?}
?? ?else
? ?{
?? ? GPIO_ResetBits(GPIOA, GPIO_Pin_1);
? ?}
}
void turn_2(void)
{
?? ?if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2)==0) ? //獲取輸出寄存器的狀態(tài),如果當(dāng)前引腳輸出低電平
?? ?{
?? ??? ?GPIO_SetBits(GPIOA, GPIO_Pin_2); ? //設(shè)置PA2引腳為高電平
?? ??? ?
?? ?}
?? ?else
? ?{
?? ? ?GPIO_ResetBits(GPIOA, GPIO_Pin_2); ?//設(shè)置PA2引腳為高電平
? ?}
}
7.key.h代碼如下所示:
#ifndef _KEY__H
#define _KEY__H
void key_Init(void);
uint8_t key(void);
#endif
8.key.c代碼如下所示:
#include "stm32f10x.h"?
#include "Delay.h"
void key_Init(void)
{
?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);?? ?//開(kāi)啟GPIOB的時(shí)鐘
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//使用各個(gè)外設(shè)前必須開(kāi)啟時(shí)鐘,否則對(duì)外設(shè)的操作無(wú)效
?? ?
?? ?/*GPIO初始化*/
?? ?GPIO_InitTypeDef GPIO_InitStructure;?? ??? ??? ??? ??? ?//定義結(jié)構(gòu)體變量
?? ?
?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;?? ??? ?//GPIO模式,賦值為推挽輸出模式
?? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_11; ? ?//GPIO引腳,賦值為第1,2號(hào)引腳
?? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;?? ??? ?//GPIO速度,賦值為50MHz
?? ?
?? ?GPIO_Init(GPIOB, &GPIO_InitStructure);?? ??? ??? ??? ??? ?//將賦值后的構(gòu)體變量傳遞給GPIO_Init函數(shù)
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//函數(shù)內(nèi)部會(huì)自動(dòng)根據(jù)結(jié)構(gòu)體的參數(shù)配置相應(yīng)寄存器
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//實(shí)現(xiàn)GPIOB的初始化
?? ?
?? ?
}
uint8_t key(void)
{
?? ?uint8_t keynum=0;
?? ?if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0)
?? ?{
?? ??? ?Delay_ms(20);
?? ??? ?while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0);
?? ??? ?Delay_ms(20);
?? ??? ?keynum=1;
?? ?}
?? ?if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0)
?? ?{
?? ??? ?Delay_ms(20);
?? ??? ?while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0);
?? ??? ?Delay_ms(20);
?? ??? ?keynum=2;
?? ?}
?? ?return keynum;
}
9.main.c代碼
#include "stm32f10x.h" ? ? ? ? ? ? ? ? ?// Device header
#include "Delay.h"
#include "led.h"
#include "key.h"
uint8_t keynum=0;
int main()
{
? ?
? ?led_Init();
? ?key_Init();
?? ?while (1)
?? ?{
?? ??? ?keynum=key();
?? ??? ?if(keynum==1)
?? ??? ?{
?? ??? ??? ?turn_1();
?? ??? ?}
?? ??? ?if(keynum==2)
?? ??? ?{
?? ??? ??? ?turn_2();
?? ??? ?}
?? ?}
}
?