按键控制LED和光敏传感器控制蜂鸣器

按键控制LED

把两个按键分别接在PB11、PB1上面,两个LED接在PA1和PA2上面

main.c#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"uint8_t keynum;
//全局变量,用来存键码的返回值,与局部变量作用域不同
//局部变量只能在本函数使用,全局变量每个函数都可使用
//在函数里优先使用自己的局部变量,如果没有才会使用外部的全局变量int main(void)
{LED_Init();  //完成led的初始化,默认低电平Key_Init();  //初始化按键while(1){keynum = key_Getnum();  //不断读取键码值,放在keynum变量里if(keynum == 1)   //按键1按下{LED1_Turn();  //电平翻转,led状态取反,需用到GPIO_readoutput函数}if(keynum == 2)   //按键2按下{LED2_Turn();}}
}
Led.c#include "stm32f10x.h"                  // Device headervoid LED_Init(void)   
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //打开时钟GPIO_InitTypeDef GPIO_InitStructure;              //结构体变量名GPIO_InitStructAGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  //GPIO-MODE_OUT_OD 开漏输出  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;  //用按位或选择多个引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);          //使用的是地址传递,将指定的GPIO外设初始化好GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);  //初始化led是高电平,熄灭状态
}void LED1_ON(void)   //点亮LED1
{GPIO_ResetBits(GPIOA, GPIO_Pin_1);   //低电平点亮
}void LED1_OFF(void)   //熄灭LED1
{GPIO_SetBits(GPIOA, GPIO_Pin_1);    //高电平熄灭
}void LED1_Turn(void)       //LED1状态取反,电平翻转
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)   //GPIO_ReadOutputDataBit,来读取端口输出的是什么{GPIO_SetBits(GPIOA, GPIO_Pin_1);  //状态取反,0变1}else{GPIO_ResetBits(GPIOA, GPIO_Pin_1);  //状态取反,1变0}
}void LED2_ON(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_2);
}void LED2_OFF(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_2);
}void LED2_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0){GPIO_SetBits(GPIOA, GPIO_Pin_2);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_2);}
}
Led.h
#ifndef __LED_H
#define __LED_Hvoid LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED1_Turn(void);
void LED2_Turn(void);#endif
Key.c#include "stm32f10x.h"                  // Device header
#include "Delay.h"
void Key_Init(void)  //按键初始化函数
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //打开时钟GPIO_InitTypeDef GPIO_InitStructure;           //结构体变量名GPIO_InitStructBGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //GPIO_Mode_IPU上拉输入,按键未按时默认高电平GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}uint8_t key_Getnum(void)  //读取按键值的函数
{uint8_t keynum = 0;   //按键键码,没有按下,就返回0,局部变量if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0)  //读取GPIO端口,返回值就是输入数据寄存器的某一位值,等于0代表按键按下{Delay_ms(20);  //按键按下消抖20mswhile(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0); //松开按键Delay_ms(20);  //消抖keynum = 1;    //键码为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;
}
Key.h#ifndef __KEY_H
#define __KEY_Hvoid Key_Init(void);
uint8_t key_Getnum(void);#endif

光敏传感器控制蜂鸣器

Main.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"int main(void)
{Buzzer_Init();  //初始化蜂鸣器LightSensor_Init();  //初始化光敏传感器while(1){if(LightSensor_Get() == 1)  //光线暗,指示灯不亮{Buzzer_ON();  //蜂鸣器响}else{Buzzer_OFF();  //蜂鸣器不响}}
}
Buzzer.c
#include "stm32f10x.h"                  // Device headervoid Buzzer_Init(void)   //初始化蜂鸣器函数
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //开启时钟GPIO_InitTypeDef GPIO_InitStructure;   //定义结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  //开漏输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_12);
}void Buzzer_ON(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}void Buzzer_OFF(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_12);
}void Buzzer_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12) == 0){GPIO_SetBits(GPIOB, GPIO_Pin_12);}else{GPIO_ResetBits(GPIOB, GPIO_Pin_12);}
}
Buzzer.h
#ifndef __BUZZER_H
#define __BUZZER_Hvoid Buzzer_Init(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);
void Buzzer_Turn(void);#endif
LightSensor.c
#include "stm32f10x.h"                  // Device headervoid LightSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}
LightSensor.h
#ifndef __LIGHTSENSOR_H
#define __LIGHTSENSOR_Hvoid LightSensor_Init(void);
uint8_t LightSensor_Get(void);#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/476061.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下HTTP隧道技术的应用场景与优势分析

亲爱的Linux侠们,今天我们来聊一聊Linux下HTTP隧道技术的应用场景与优势。在这个网络时代,HTTP隧道技术就如同一位神秘的“魔法师”,为我们解决了许多棘手的网络问题。 首先,让我们来看看HTTP隧道技术在哪些场景下能大展身手。 …

深度学习之pytorch实现线性回归

度学习之pytorch实现线性回归 pytorch用到的函数torch.nn.Linearn()函数torch.nn.MSELoss()函数torch.optim.SGD() 代码实现结果分析 pytorch用到的函数 torch.nn.Linearn()函数 torch.nn.Linear(in_features, # 输入的神经元个数out_features, # 输出神经元个数biasTrue # 是…

刷题Day2

🌈个人主页:小田爱学编程 🔥 系列专栏:刷题日记 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ 😁 喜欢…

2024.2.18 C++QT 作业

思维导图 练习题 1>定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std;class Animal { public:virtual void perform() {cout << "这是一个动…

Github 2024-02-18 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-18统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5PowerShell项目1Rust项目1PHP项目1Jupyter Notebook项目1TypeScript项目1 Black&#xff1a;不妥…

GZ036 区块链技术应用赛项赛题第6套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷&#xff08;6卷&#xff09; 任 务 书 参赛队编号&#xff1a; 背景描述 近年来&#xff0c;食品安全问题层出不穷&#xff0c;涉及到各种食品类别&#xff0c;如肉类、水果、蔬菜等。食品安全事…

宝塔安装MySQL、设置MySQL密码、设置navicat连接

1、登录宝塔面板进行安装 2、设置MySQL连接密码 3、安装好了设置navicat连接 登录MySQL [roothecs-394544 ~]# mysql -uroot -p Enter password: 切换到MySQL数据 mysql> use mysql Database changed mysql> 查询用户信息 mysql> select host,user from user; ---…

尾矿库排洪系统结构仿真APP助力尾矿库本质安全

1、背景介绍 尾矿库作为重大危险源之一&#xff0c;在国际灾害事故排名中位列第18位&#xff0c;根据中国钼业2019年8月刊《中国尾矿库溃坝与泄漏事故统计及成因分析》的统计&#xff0c;在46起尾矿库泄漏事故中&#xff0c;由于排洪设施导致的尾矿泄漏事故占比高达1/3&#x…

mmap映射文件使用示例

mmap 零拷贝技术可以应用于很多场景&#xff0c;其中一个典型的应用场景是网络文件传输。 假设我们需要将一个大文件传输到远程服务器上。在传统的方式下&#xff0c;我们可能需要将文件内容读入内存&#xff0c;然后再将数据从内存复制到网络协议栈中&#xff0c;最终发送到远…

企业大宽带服务器用哪里最合适

如今&#xff0c;数字经济的发展速度不断加快&#xff0c;进入数字化跑道的企业&#xff0c;每天都在大量输出、共享、存储数字内容&#xff0c;想要更高效、安全地让用户看到内容&#xff0c;企业的服务器需要满足大带宽、低延时、高并发等要求。 中小企业受限于资金、资源等…

洛谷 P1019 [NOIP2000 提高组] 单词接龙

参考代码 #include <bits/stdc.h> using namespace std; string s[25]; int vis[25], ans, now 1, n; void dfs(int k) { ans max(ans, now); for(int i 1; i < n; i) if(vis[i] < 2) { for(int j 0; j < s[k].length(); j) …

【C++】编译器如何识别重载函数

文章目录 前言 前言 我们都知道&#xff0c;函数重载即一个函数拥有了多个版本&#xff0c;我们使用时可以通过不同的数据类型区分我们调用的时哪一个重载函数&#xff0c;但编译器编译链接阶段对函数的调用时通过在符号表中寻找唯一名称来确定地址&#xff0c;c时怎么解决了符…