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

太原建设网站的公司seo网站培训班

太原建设网站的公司,seo网站培训班,重庆电商网站建设费用,需要证书的建筑公司网站前言: 通过触摸按键控制LED灯以及继电器,具体实现功能如下: 1、触摸按键1单击与长按,控制LED1; 2、触摸按键2单击与长按,控制LED2; 3、触摸按键3单击与长按,控制LED3; 4、触摸按键4单击与长…

前言:

通过触摸按键控制LED灯以及继电器,具体实现功能如下:

1、触摸按键1单击与长按,控制LED1;

2、触摸按键2单击与长按,控制LED2;

3、触摸按键3单击与长按,控制LED3;

4、触摸按键4单击与长按,控制继电器;


目录

1.硬件电路

 1.1触摸按键

1.2 继电器

2.外部中断 /事件控制器(EXIT)

3.软件程序

3.1按键检测函数 

3.2回调函数

3.3继电器按键检测函数

4.结果演示



1.硬件电路

 1.1触摸按键

原理图如下所示:

 

其中,驱动芯片TTP224N,我们可以看到该芯片有四种基本参数,可以是快速单击模式;多键模式,最长输出时间为16s,还有直接模式cmos输出,低电平有效。其引脚输出是高电平, 所以 外部中断管脚默认也为高电平,当触摸按键被触摸时候,芯片引脚内部自动节点,外部管脚被自动拉低,所以,按键触发中断采用的是下降沿触发。图解如下:

1.2 继电器

原理图如下: 

 

 继电器,使用5v上拉,默认断开状态,触摸按键并没有上拉,所以采用推挽输出,默认低电平,按下之后,三极管导通,构成回路,继电器吸合。图解如下:

2.外部中断 /事件控制器(EXIT)

外部中断/事件控制器由 19 个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以被独立的屏蔽。挂起寄存器保持着状态线的中断要求。

主要特性:
● 每个中断/事件都有独立的触发和屏蔽;
● 每个中断线都有专用的状态位;
● 支持多达 19 个中断/事件请求;
● 检测脉冲宽度低于 APB2 时种宽度的外部信号。参见数据手册中电气特性部分的相关参数。

框图如下:


 

 从框图中,我们可以看到,外部中断可以边沿检测电路触发,也可由软件触发,当请求挂起,和中断屏蔽都不相应,可使能NVIC中断控制器。

3.软件程序

 程序框架不会改变,只是配置完cubemax,按键端口,中断优先级(这个在上一章串口终端都介绍过)会自动生成,相应的源文件,我们只需要在我们自己的应用文件中新增继电器源文件,以及按键源文件就可以,如下图所示:

我们想要使用HLA库里面的中断函数,我们就要了解,他的参数设置,以及函数功能,如下所示:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);//回调函数

 

3.1按键检测函数 

封装一个按键结构体,包含 标志位,按键单击和长按以及按键检测函数。

typedef struct
{uint8_t  volatile KEY_Flag;  //按键标志位uint8_t  Click;              //单击uint8_t  Press;              //长按void (*KEY_Detect)(void);    //按键检测
} KEY_t;/* extern variables-----------------------------------------------------------*/
extern KEY_t   KEY1;
extern KEY_t   KEY2;
extern KEY_t   KEY3;
extern KEY_t   KEY4;

函数实现

初始化结构体内容及指针指向

//结构体定义
KEY_t  KEY1 = {FALSE,FALSE,FALSE,KEY1_Detect};      
KEY_t  KEY2 = {FALSE,FALSE,FALSE,KEY2_Detect}; 
KEY_t  KEY3 = {FALSE,FALSE,FALSE,KEY3_Detect}; 
KEY_t  KEY4 = {FALSE,FALSE,FALSE,KEY4_Detect}; 

 函数部分

static void KEY1_Detect() 
{uint8_t i = 0;if(KEY1.KEY_Flag == TRUE){//初识状态 让其为长按KEY1.Click = FALSE;KEY1.Press = TRUE;//检测按键是否为长按for(i=0;i<200;i++){HAL_Delay(10);//两秒后,如果为高电平,则说明是单击 跳出循环if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_SET){KEY1.Click = TRUE;KEY1.Press = FALSE;break; }}if(KEY1.Click == TRUE){printf("检测到触摸按键1单击\r\n");//翻转一下LED.LED_Flip(LED1);}if(KEY1.Press == TRUE){printf("检测到触摸按键1长按\r\n");//LED.LED_Flip(LED1);HAL_Delay(200);LED.LED_Flip(LED1);}//回到起始状态KEY1.KEY_Flag = FALSE;KEY1.Click = FALSE;KEY1.Press = FALSE;}
}

3.2回调函数

 对于按键检测标志位,有触摸按键 触摸时候就会触发中断进入回调函数,代码如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){case KEY1_Pin: KEY1.KEY_Flag = TRUE;	break;case KEY2_Pin: KEY2.KEY_Flag = TRUE;	break;case KEY3_Pin: KEY3.KEY_Flag = TRUE;	break;case KEY4_Pin: KEY4.KEY_Flag = TRUE;	break;default:printf("´错误,触摸按键错误\r\n\r\n");}
}

3.3继电器按键检测函数

原理跟控制led灯的按键一样,控制继电器打开,关闭,以及翻转,具体代码如下,

结构体封装:

typedef struct
{void (*Relay_ON)(void);     //打开void (*Relay_OFF)(void);    //关闭void (*Relay_Flip)(void);   //·翻转
} Relay_t;/* extern variables-----------------------------------------------------------*/
extern Relay_t  Relay;

函数实现:

static void Relay_ON(void); 
static void Relay_OFF(void);
static void Relay_Flip(void);/* Public variables-----------------------------------------------------------*/
Relay_t Relay = 
{Relay_ON,Relay_OFF,Relay_Flip
};static void Relay_ON(void)
{HAL_GPIO_WritePin(Relay_GPIO_Port,Relay_Pin,GPIO_PIN_SET);
}/** @name   Relay_OFF* @brief  关闭* @param  None* @retval None      
*/
static void Relay_OFF(void)
{HAL_GPIO_WritePin(Relay_GPIO_Port,Relay_Pin,GPIO_PIN_RESET);
}/** @name   Relay_Flip* @brief  取反* @param  None* @retval None      
*/
static void Relay_Flip(void)
{HAL_GPIO_TogglePin(Relay_GPIO_Port,Relay_Pin);
}

4.结果演示

 

 

http://www.hengruixuexiao.com/news/46964.html

相关文章:

  • 苏州网站建设kgwl西安百度网站排名优化
  • 宁波网站设计制作今日广东头条新闻
  • 新手做那些网站比较好网站开通
  • 濮阳建站建设网店运营
  • 将wordpress安装到哪个数据库?网页搜索优化seo
  • 网站没收录要怎么做seo优化培训学校
  • CQ网络科技网站建设广州网络推广哪家好
  • 织梦做的网站首页出现空白网站备案查询工信部官网
  • 专业做旅游网站做个小程序需要花多少钱
  • seo佛山长沙有实力seo优化
  • 给手机做网站的公司有哪些中国的网络营销公司
  • 万州做网站站长之家下载
  • 用香港服务器做网站违法吗百度最怕哪个部门去投诉
  • 天津做网站比较大的公司深圳网络推广培训机构
  • 专业的网站公司到哪里找网络推广主要工作内容
  • 物流网站公司搜索引擎营销推广
  • 公司网站建设的系统功能需求亚马逊提升关键词排名的方法
  • 品牌网站的愿望清单怎么做怎样建网站卖东西
  • 易语言可以做网站后端成都百度推广账户优化
  • 易龙天做的网站怎么样做小程序要多少钱
  • 酷家乐设计师接单平台抚州seo排名
  • 建设工程合同范本 政府网站seo怎么做优化方案
  • 群晖 nas做网站 推荐优化法治化营商环境
  • 长沙建设企业网站怎么建网址
  • 做的网站文字是乱码谷歌广告推广
  • 网站规划建设与管理维护答案灰色关键词排名方法
  • 网站的二维码怎么做爱站关键词搜索
  • 北京做网站建设价格刷粉网站推广便宜
  • 做网站软件war北京百度关键词排名
  • python做网站难么网站关键词