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

Stm32f103c8t6(proteus仿真)學(xué)習(xí)——3.按鍵控制LED燈

這篇具有很好參考價(jià)值的文章主要介紹了Stm32f103c8t6(proteus仿真)學(xué)習(xí)——3.按鍵控制LED燈。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、按鍵控制原理圖

按鍵:button
電阻:res
proteus 按鍵,STM32F103,stm32,單片機(jī),proteus,嵌入式硬件,學(xué)習(xí)

二、按鍵代碼

1. led.c文件的代碼

先配置LED燈的GPIO

//LED 初始化函數(shù)
void Led_Init(void){
	//聲明一個(gè)結(jié)構(gòu)體,名字是GPIO_InitStructure
	GPIO_InitTypeDef GPIO_InitStructure;
	//使能GPIOA的時(shí)鐘,ENABLE代表使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA
	//設(shè)置引腳為推挽輸出Out_PP
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	//定義引腳為 0號(hào)引腳 和 1號(hào)引腳
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1; 
	 //設(shè)置引腳的速度50MHz
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 
	 //初始化GPIO,初始化哪個(gè)引腳就對(duì)應(yīng)哪個(gè)
	GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA,所以引腳對(duì)應(yīng)PA0和PA1
	//初始化時(shí)LED應(yīng)為熄滅狀態(tài),所以要拉高LED引腳的電平
	GPIO_SetBits(GPIOA,GPIO_Pin_0 | GPIO_Pin_1); //PA0 和 PA1引腳拉高電平
}

編寫(xiě)LED亮滅的函數(shù)

//LED燈狀態(tài)函數(shù)
void Ledx_state(int x , int t){ //x表示第幾個(gè)LED,t==1表示點(diǎn)亮,t==0表示熄滅
	if(x==1){  //x==1對(duì)應(yīng)LED1
		if(t==1)GPIO_ResetBits(GPIOA,GPIO_Pin_0); //LED1點(diǎn)亮
		if(t==0)GPIO_SetBits(GPIOA,GPIO_Pin_0); //LED1熄滅
	}
	if(x==2){ //x==2對(duì)應(yīng)LED2
		if(x==1)GPIO_ResetBits(GPIOA,GPIO_Pin_1); //LED2點(diǎn)亮
		if(x==0)GPIO_SetBits(GPIOA,GPIO_Pin_1); //LED2熄滅
	}
}

實(shí)現(xiàn)按下按鍵LED燈的狀態(tài)取反

//*****  實(shí)現(xiàn)按下按鍵LED燈的狀態(tài)取反  *****//
void Led1_Turn(void){
	//如果PA0的輸出寄存器的值為0,證明LED1為點(diǎn)亮狀態(tài) 
	if(GPIO_ReadOutputDataBit(GPIOA , GPIO_Pin_0)==0){
		//取反,PA0置高電平,LED1熄滅
		GPIO_SetBits(GPIOA , GPIO_Pin_0);
	}
	else{     //PA0的輸出寄存器的值為1,證明LED1為熄滅狀態(tài) 
		//取反,PA0置低電平,LED1點(diǎn)亮
		GPIO_ResetBits(GPIOA , GPIO_Pin_0);
	}
}
void Led2_Turn(void){
	//如果PA1的輸出寄存器的值為0,證明LED2為點(diǎn)亮狀態(tài) 
	if(GPIO_ReadOutputDataBit(GPIOA , GPIO_Pin_1)==0){
		//取反,PA1置高電平,LED2熄滅
		GPIO_SetBits(GPIOA , GPIO_Pin_1);
	}
	else{     //PA1的輸出寄存器的值為1,證明LED2為熄滅狀態(tài) 
		//取反,PA1置低電平,LED2點(diǎn)亮
		GPIO_ResetBits(GPIOA , GPIO_Pin_1);
	}
}

led.c總代碼

#include "led.h"
#include "stm32f10x.h"
void Led_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1);
}
//LED燈狀態(tài)函數(shù)
void Ledx_state(int x , int t){  //x表示第幾個(gè)LED,t==1表示點(diǎn)亮,t==0表示熄滅
	if(x==1){
		if(t==1)GPIO_ResetBits(GPIOA,GPIO_Pin_0);
		if(t==0)GPIO_SetBits(GPIOA,GPIO_Pin_0);
	}	
	if(x==2){
		if(t==1)GPIO_ResetBits(GPIOA,GPIO_Pin_1);
		if(t==0)GPIO_SetBits(GPIOA,GPIO_Pin_1);
	}
}
//*****  實(shí)現(xiàn)按下按鍵LED燈的狀態(tài)取反  *****//
void Led1_Turn(void){
	//如果PA0的輸出寄存器的值為0,證明LED1為點(diǎn)亮狀態(tài) 
	if(GPIO_ReadOutputDataBit(GPIOA , GPIO_Pin_0)==0){
		//取反,PA0置高電平,LED1熄滅
		GPIO_SetBits(GPIOA , GPIO_Pin_0);
	}
	else{     //PA0的輸出寄存器的值為1,證明LED1為熄滅狀態(tài) 
		//取反,PA0置低電平,LED1點(diǎn)亮
		GPIO_ResetBits(GPIOA , GPIO_Pin_0);
	}
}
void Led2_Turn(void){
	//如果PA1的輸出寄存器的值為0,證明LED2為點(diǎn)亮狀態(tài) 
	if(GPIO_ReadOutputDataBit(GPIOA , GPIO_Pin_1)==0){
		//取反,PA1置高電平,LED2熄滅
		GPIO_SetBits(GPIOA , GPIO_Pin_1);
	}
	else{     //PA1的輸出寄存器的值為1,證明LED2為熄滅狀態(tài) 
		//取反,PA1置低電平,LED2點(diǎn)亮
		GPIO_ResetBits(GPIOA , GPIO_Pin_1);
	}
}

2. led.h頭文件的代碼

#ifndef __LED_H
#define __LED_H

void Led_Init(void); //LED初始化
void Ledx_state(int i , int x); //LED燈狀態(tài)函數(shù)

#endif

3. key.c文件的代碼

先配置按鍵的GPIO

//按鍵 初始化函數(shù)
void Key_Init(void){
	//聲明一個(gè)結(jié)構(gòu)體,名字是GPIO_InitStructure
	GPIO_InitTypeDef GPIO_InitStructure;
	//使能GPIOA的時(shí)鐘,ENABLE代表使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
	//按鍵需要設(shè)置引腳模式為上拉模式GPIO_Mode_IPU
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉模式GPIO_Mode_IPU
	//定義引腳為 0號(hào)引腳 和 1號(hào)引腳
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1; 
	 //設(shè)置引腳的速度50MHz
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 
	 //初始化GPIO,初始化哪個(gè)引腳就對(duì)應(yīng)哪個(gè)
	GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB,所以引腳對(duì)應(yīng)PA0和PA1
	//初始化時(shí)LED應(yīng)為熄滅狀態(tài),所以要拉高LED引腳的電平
	GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1); //PB0 和 PB1引腳拉高電平
}

獲取當(dāng)前按鍵鍵值的函數(shù)

uint8_t Key_GetNum(void){  //獲取當(dāng)前按鍵鍵值
	uint8_t KeyNum = 0;
	//檢測(cè)PB0引腳是否為低電平,按鍵按下時(shí)為低電平
	if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_0)==0){  //PB0為低電平,按鍵1已按下
		delay_ms(20); //延時(shí),消抖
		//消抖,等待PB0重新變成高電平,如果一直為低電平則一直進(jìn)入死循環(huán)
		while(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_0)==0);
		delay_ms(20); //延時(shí),消抖
		KeyNum=1; //鍵值賦值為1,代表按鍵1已按下
	}
	//檢測(cè)PB1引腳是否為低電平,按鍵按下時(shí)為低電平
	if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1)==0){  //PB1為低電平,按鍵2已按下
		delay_ms(20); //延時(shí),消抖
		//消抖,等待PB1重新變成高電平,如果一直為低電平則一直進(jìn)入死循環(huán)
		while(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1)==0);
		delay_ms(20); //延時(shí),消抖
		KeyNum=2; //鍵值賦值為2,代表按鍵1已按下
	}
	return KeyNum; //返回鍵值
}

key.c總代碼

#include "key.h"
void Key_Init(void){
	GPIO_InitTypeDef GPIO_InitStructure;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置上拉模式 GPIO_Mode_IPU
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);
}
uint8_t Key_GetNum(void){ 
	uint8_t KeyNum = 0;
	if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_0)==0){
		delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_0)==0);
		delay_ms(20);
		KeyNum=1;
	}
	if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1)==0){
		delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1)==0);
		delay_ms(20);
		KeyNum=2;
	}
	return KeyNum;
}

4. key.h頭文件的代碼

#ifndef __KEY_H
#define __KEY_

#include "stm32f10x.h"                  // Device header
#include "delay.h"

void Key_Init(void); //按鍵初始化
uint8_t Key_GetNum(void); //獲取當(dāng)前按鍵按下的鍵值

#endif

5. main.c文件的代碼

5.1 按鍵按下實(shí)現(xiàn)LED亮或者滅

#include "stm32f10x.h"
#include  "led.h"
#include  "key.h"
#include "delay.h"

uint8_t KeyNum = 0;

int main(void)
{ 
	delay_init();
	Led_Init();	
	Key_Init();
	while(1){
		KeyNum = Key_GetNum(); //獲取鍵值
		if(KeyNum == 1){
			//按下按鍵1,LED1燈亮,LED2燈滅
			Ledx_state(1 , 1);
			Ledx_state(2 , 0);			
		}
		if(KeyNum == 2){
			//按下按鍵2,LED2燈亮,LED1燈滅
			Ledx_state(1 , 0);
			Ledx_state(2 , 1);	
		}
	}

仿真效果圖:
proteus 按鍵,STM32F103,stm32,單片機(jī),proteus,嵌入式硬件,學(xué)習(xí)

5.2 按鍵按下實(shí)現(xiàn)LED狀態(tài)取反

#include "stm32f10x.h"
#include  "led.h"
#include  "key.h"
#include "delay.h"

uint8_t KeyNum = 0;

int main(void)
{ 
	delay_init();
	Led_Init();	
	Key_Init();
	
	while(1){  //按下按鍵,LED燈取反
		KeyNum = Key_GetNum(); //獲取鍵值
		if(KeyNum == 1){
			Led1_Turn();    //按下按鍵1,LED1燈狀態(tài)取反
		}
		if(KeyNum == 2){
			Led2_Turn();    //按下按鍵2,LED2燈狀態(tài)取反
		}
	}
	

仿真效果圖:
proteus 按鍵,STM32F103,stm32,單片機(jī),proteus,嵌入式硬件,學(xué)習(xí)

三、項(xiàng)目(代碼+仿真)分享鏈接

百度網(wǎng)盤(pán)
鏈接:https://pan.baidu.com/s/1pcVtAcER2mAwnQnyRL3aXQ
提取碼:p8q4文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728050.html

到了這里,關(guān)于Stm32f103c8t6(proteus仿真)學(xué)習(xí)——3.按鍵控制LED燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 功耗測(cè)評(píng) | STM32F103C8T6

    功耗測(cè)評(píng) | STM32F103C8T6

    STM32F103C8T6 MCU越來(lái)越廣泛的應(yīng)用在生產(chǎn)生活的各個(gè)領(lǐng)域,外接豐富的傳感器、功能模塊、通信模塊、顯示存儲(chǔ)等可以形成各種可樣的產(chǎn)品項(xiàng)目應(yīng)用。對(duì)于功耗要求比較高的產(chǎn)品,一般會(huì)選擇STM32L系列的MCU,但是從功耗的評(píng)測(cè)角度,邏輯上是基本相似的。 在很多應(yīng)用場(chǎng)合中都對(duì)

    2024年02月07日
    瀏覽(31)
  • STM32F103C8T6系統(tǒng)板

    STM32F103C8T6系統(tǒng)板

    1.電源部分 2.復(fù)位 3.晶振 4. 電源電路——防反接 有關(guān)二極管 漫談二極管防電源反接電路 本次采用上圖右下角的NMOS防反接電路。 電源電路——電源芯片 AMS1117是AMS公司的 ,LM1117是NS(美國(guó)國(guó)家半導(dǎo)體)的,LM1117要貴很多,所以一般的用AMS1117就可以了。 (以下分析參考STM32F10

    2024年02月02日
    瀏覽(20)
  • STM32F103C8T6板子介紹

    STM32F103C8T6板子介紹

    STM32簡(jiǎn)介 STM32是ST公司基于ARM Cortex-M內(nèi)核開(kāi)發(fā)的32位微控制器 STM32常應(yīng)用在嵌入式領(lǐng)域,如智能車(chē)、無(wú)人機(jī)、機(jī)器人、無(wú)線(xiàn)通信、物聯(lián)網(wǎng)、工業(yè)控制、娛樂(lè)電子產(chǎn)品等 STM32功能強(qiáng)大、性能優(yōu)異、片上資源豐富、功耗低,是一款經(jīng)典的嵌入式微控制器。 ?STM32F103C8T6 F1XX片上資源

    2024年02月11日
    瀏覽(22)
  • STM32F103C8T6串口通信

    STM32F103C8T6串口通信

    ? 首先來(lái)看一下需要操作的函數(shù),以及配置的步驟: 圖1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2?? Code: usart.c #include \\\"usart.h\\\" void ustart_Init(void ) { GPIO_InitTypeDef GPIO_Init_Ustar ; // 定義輸出端口TX的結(jié)構(gòu)體對(duì)象 USART_InitTypeDef USTART_Init; // 定義串口初始化結(jié)構(gòu)體對(duì)象

    2024年02月16日
    瀏覽(28)
  • STM32F103C8T6移植FreeRTOS

    STM32F103C8T6移植FreeRTOS

    根據(jù)自己開(kāi)發(fā)板型號(hào)下載地址:STM32相關(guān)內(nèi)容下載地址 SDK直接下載地址:STM32直接下載地址 下載參考博客 FreeROTS下載地址 選用V9.0.0 版本 個(gè)人創(chuàng)建目錄如下,可做參考 keil目錄 鏈接頭文件 ? 修改堆棧大小 ? 修改中斷函數(shù)名 去掉stm32f10x_it.c終端函數(shù) 增加FreeRTOS中斷 特別解釋

    2024年02月12日
    瀏覽(23)
  • [STM32F103C8T6]ADC轉(zhuǎn)換

    [STM32F103C8T6]ADC轉(zhuǎn)換

    什么是ADC轉(zhuǎn)換? ADC轉(zhuǎn)換的全稱(chēng)是: Analog-to-Digital Converter ,指模擬 / 數(shù)字轉(zhuǎn)換器 ADC的性能指標(biāo): ADC分辨率: SSA與VREF-一起接到地,DDA與VREF+接到3.3v,所以ADC轉(zhuǎn)換的范圍是0---3.3v 所以最后的ADC轉(zhuǎn)換值應(yīng)該是我們的測(cè)量值*分辨率? ? 分辨率 = 3.3v/2^12 = (3.3/4096)? ?12位的轉(zhuǎn)換器所

    2024年02月06日
    瀏覽(26)
  • STM32F103C8T6 按鍵掃描輸入

    STM32F103C8T6 按鍵掃描輸入

    第一章 STM32F103C8T6 點(diǎn)亮LED燈 系列文章目錄 前言 一、原理 ?1.按鍵類(lèi)型 ?2.按鍵消抖 3.IO口輸入配置 1)模擬輸出 2)浮空輸入模式 3)下拉輸入模式(PULL DOWN) 4)上拉輸入模式(PULL UP) 二、代碼部分 main.c key.c key.h 總結(jié) ? ? ? ? 上一章我們成功入門(mén)了STM32F103C8T6,今天我們來(lái)

    2023年04月23日
    瀏覽(30)
  • stm32f103c8t6的外部中斷

    stm32f103c8t6的外部中斷

    在單片機(jī)中存在著中斷系統(tǒng),這個(gè)系統(tǒng)的邏輯和功能在51單片機(jī)中已經(jīng)有所了解。 1.在32單片機(jī)中的內(nèi)核有一個(gè)nvic 里面存放許多優(yōu)先級(jí)的設(shè)定,外接許多中斷源,比如“exti、tim、adc、usart等”接入之后,nvic再通過(guò)中斷優(yōu)先級(jí)進(jìn)行排隊(duì),再內(nèi)接入cpu中進(jìn)行處理,這樣子大大減少

    2024年02月09日
    瀏覽(30)
  • STM32F103C8T6串口調(diào)試篇

    STM32F103C8T6串口調(diào)試篇

    項(xiàng)目開(kāi)發(fā)中,當(dāng)出現(xiàn)bug時(shí),由于不知道某個(gè)變量的值,所以很難定位問(wèn)題,針對(duì)此問(wèn)題,串口調(diào)試脫穎而出。通過(guò)串口printf()實(shí)時(shí)將需要顯示的信息打印出來(lái),這樣就很方便的定位問(wèn)題。 串口設(shè)置方法 1.購(gòu)買(mǎi)調(diào)試器pwlink2。參考STM32F103C8T6程序燒錄方法_stm32f103c8t6如何燒錄_流

    2024年02月12日
    瀏覽(24)
  • 嵌入式硬件——stm32F103C8T6

    嵌入式硬件——stm32F103C8T6

    如下圖:? ? 處理器核心:STM32F103C8T6內(nèi)置了ARM Cortex-M3處理器,這是一種高性能、低功耗的32位RISC處理器,適用于嵌入式系統(tǒng)。 時(shí)鐘速度:它可以工作在不同的時(shí)鐘速度,最高主頻可達(dá)72 MHz。 存儲(chǔ)器:包括64KB的Flash程序存儲(chǔ)器用于存儲(chǔ)程序代碼,以及20KB的SRAM用于存儲(chǔ)數(shù)據(jù)和

    2024年02月05日
    瀏覽(125)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包