当前位置: 首页 > wzjs >正文

静态网站怎么做有效页西安百度推广外包

静态网站怎么做有效页,西安百度推广外包,最新wordpress教程,企业如何做好网络推广写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.02 STM32开发板学习——第8节: [3-4] 按键控制LED&光敏传感器控制蜂鸣器 前言开…

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.04.02

STM32开发板学习——第8节: [3-4] 按键控制LED&光敏传感器控制蜂鸣器

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、按键控制LED
  • 二、光敏模块控制蜂鸣器
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
   原理图如下
1、开发板原理图
在这里插入图片描述
2、STM32F103C6和51对比
在这里插入图片描述
3、STM32F103C6核心板
在这里插入图片描述

视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。

下图是实物图
在这里插入图片描述

引用

【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
在这里插入图片描述
数据手册

解答和科普

一、按键控制LED

在这里插入图片描述
按键是第一种接法,按键接地表示按键按下为低电平,GPIO配置为上拉输入,LED分别接在在PA1和PA2两个口上,LED一端接GPIO口,另一端接VCC,就是低电平点亮的接法,都是随意的看自己的。

如果把这两部分驱动代码都混在主函数里面,代码就太乱了,不容易移植,所以对于这种驱动代码,我们要封装起来,单独放在另外的.c和.h文件里,这就是模块化编程的方式。
在这里插入图片描述
LED.C用来存放驱动程序的主体代码;
LED.h用来存放这个驱动可以对外提供的函数或变量的声明。
在这里插入图片描述
注意空行结尾

CTRL+alt+空格:代码提示
在这里插入图片描述
注意空行结尾

在这里插入图片描述
在这里插入图片描述

#include "stm32f10x.h"                  // Device headervoid LED_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef   GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1| GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);	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);}

也可以定义一个LEDset函数,然后定义两个参数,一个参数选择操作那个灯,另一个参数选择开还是关。

#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);#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"int main(void)
{LED_Init();while(1){LED1_ON();Delay_ms(500);LED1_OFF();Delay_ms(500);}
}

实验现象

封装后控制LED闪烁


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样看来应该是地址,GPIOA
Key初始化:
在这里插入图片描述

在这里插入图片描述

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

1、GPIO_ReadInputDataBit读取这里输入数据寄存器的某一位;
2、GPIO_ReadOutputDataBit读取输出数据寄存器的某一位
3、GPIO_ReadInputData 读取整个输入数据寄存器
4、GPIO_ReadOutputData 读取整个输出数据寄存器

按键控制LED
K3控制LED1亮,K4控制LED1灭
1.main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"uint8_t		KeyNum;			//作用域不同int main(void)
{//优先使用自己的局部变量LED_Init();Key_Init();while(1){KeyNum=Key_GetNum();if(KeyNum==1){LED1_ON();}if(KeyNum==2){LED1_OFF();}}
}

2.LED.C和LED.H

#include "stm32f10x.h"                  // Device headervoid LED_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef   GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1| GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);	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);}
#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);#endif

3、Key.c和Key.h

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void  Key_Init(void)
{RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef   GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;			//读取按键选择上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);}uint8_t Key_GetNum(void)
{uint8_t KeyNum	=0;if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0);Delay_ms(20);KeyNum=1;}if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==0);Delay_ms(20);KeyNum=2;}return  KeyNum;
}
#ifndef    __KEY_H
#define    __KEY_Hvoid  Key_Init(void);
uint8_t Key_GetNum(void);#endif

实验现象

按键控制LED灯

按键控制LED状态取反

void LED1_Turn(void)
{if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0)		//读取当前端口输出状态如果为0.就给它置1,否则为1,就置0{GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}}
void LED2_Turn(void)
{if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0)		//读取当前端口输出状态如果为0.就给它置1,否则为1,就置0{GPIO_SetBits(GPIOA,GPIO_Pin_2);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_2);}}
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"uint8_t		KeyNum;			//作用域不同int main(void)
{//优先使用自己的局部变量LED_Init();Key_Init();while(1){KeyNum=Key_GetNum();if(KeyNum==1){LED1_Turn();}if(KeyNum==2){LED2_Turn();}}
}

实验现象:

按键控制LED状态取反

二、光敏模块控制蜂鸣器

接线图
在这里插入图片描述
1.main

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.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();}}
}

2、Buzzer.C和.H

#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_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);	GPIO_SetBits(GPIOB,	GPIO_Pin_1 | GPIO_Pin_2);}void Buzzer_Turn(void)
{if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)==0)		//读取当前端口输出状态如果为0.就给它置1,否则为1,就置0{GPIO_SetBits(GPIOB,GPIO_Pin_12);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_12);}}void Buzzer_ON(void)
{GPIO_ResetBits(GPIOB,GPIO_Pin_12);}void Buzzer_OFF(void)
{GPIO_SetBits(GPIOB,GPIO_Pin_12);}
#ifndef  __BUZZER_H
#define  __BUZZER_Hvoid Buzzer_Init(void);
void Buzzer_Turn(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);#endif

3、LightSensor.C和.H

#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);}
#ifndef  __LIGHT_SENSOR_H
#define  __LIGHT_SENSOR_Hvoid LightSensor_Init(void);
uint8_t  LightSensor_Get(void);
#endif

暂时没有实验现象

问题

1、怎么控制外接的AD模块

在这里插入图片描述

总结

本节课主要学习了GPIO的输入,首先是按键的控制LED灯,还有就是硬件的模块化,尽量把每个硬件的驱动函数单独提取出来,进行封装模块化编程;封装到.C.H文件中,在主函数完成更重要的。就是如何配置GPIO口为输入进行配置。

http://www.dtcms.com/wzjs/233618.html

相关文章:

  • 个人网站web模板工具站seo
  • 服装批发网站建设求职seo服务
  • wordpress软件站主题免费网站怎么申请
  • 毕业设计代做网站靠谱吗发布
  • 曲沃县做网站公司识万物扫一扫
  • 重庆网站建设狐灵传媒seo工作内容和薪资
  • vs做网站案例厦门seo推广公司
  • 企业网站案列福州百度关键词排名
  • 做电影网站要不要收费郑州seo博客
  • iis7架设网站2345电脑版网址导航
  • 网站代码特效广告百度推广点击软件
  • wordpress 做音乐网站纯手工seo公司
  • 做男装海报的素材网站投稿网
  • 网站百度收录秒收方法百度怎么做推广
  • 做彩票网站如何加入广告联盟赚钱
  • 新建网站需要多少钱郑州网站关键词优化外包
  • 服务器租用价格网站seo优化多少钱
  • 长春网站建设那家好seo推广培训资料
  • 网站备案相机今日军事新闻最新消息新闻
  • 自己做网站不用WordPress百度招商加盟
  • 网站群建设指导意见最新病毒感染
  • 北京网站建设多少钱seo和sem推广
  • 百度网站优化安卓手机优化神器
  • 福建住房和建设网站徐州seo外包
  • 佛山做网站建设营销型网站更受用户欢迎的原因是
  • 18末年年禁止观看网站百度推广手机客户端
  • 商务网站建设难不难seo引擎优化公司
  • 家教网站怎么做大数据营销名词解释
  • 网站首页原型图咋做单页网站怎么优化
  • 网站备案初审时间搜索引擎营销的主要模式