基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.16)

 电路板原理图

触摸脚选择:PB1、PB2、PB3、PB4、PB5

这里我感觉触摸脚PB5应该是PB0。

程序结构

程序逻辑

其实就是在HS16F3211_TkLib.c中存在与触摸相关的函数,然后在

每个按键封装一个专门对这个按键按下或者松开不同的状态执行不同的操作。

在main.c里的while循环里会不停地执行这个按键查询函数。

程序拆解

GPIO初始化

//****GPIO设置****//
// 触摸脚和CMOD脚必须设置成输出低模式,不能复用
// 触摸脚和CMOD脚必须设置成输出低模式,不能复用
// 触摸脚和CMOD脚必须设置成输出低模式,不能复用
void GPIO_Init(void)
{
	// option注意事项
	OPTION = 0b00000010; //     option赋值非零正常赋值
						 //  	这个寄存器可以同时控制PB与PA
						 //     Bit7 INT1EDG, 外部中断 1 触发方式 0 INT1 引脚下降沿触发
						 // 	Bit6 INTEDG, 外部中断 触发方式 0 INT 引脚下降沿触发
						 // 	Bit5 T0CS, TMR0 时钟源选择位 0 内部指令时钟
						 // 	Bit4 T0SE, TMR0 时钟源边沿选择位 0 T0CKI 引脚下降沿触发计数
						 // 	Bit3 PSA, 预分频分配位 0 预分频器分配给 TMR0
						 // 	Bit2:0 PS[2:0], 预分频配置 010 '8 分频

	// PORTA注意事项	//
	PORTA = 0b00000000; // 0010 0001
	IOSTA = 0b00000000; // IOSTA赋值非零正常赋值(0-OUT;1-IN)
	// PORTA = 0b00000000;	//数据寄存器

	// PORTB注意事项	//
	PORTB = 0b00000000; // 数据寄存器
	IOSTB = 0b00000000; // IOSTB赋值非零正常赋值(0-OUT;1-IN)
	// PORTB = 0b00000000;	//数据寄存器

	// UP_PULL	:bit对应关系对照手册
	// 输入状态下配置端口上拉
	// bit对应关系包含PORTB7~PORTB4、PORTB2~PORTB0;
	PHCON = 0b11111111; // 1111 -111 :1-DIS;0-EN

	// DOWN_PULL	:bit对应关系对照手册
	// 输入状态下配置端口下拉
	// bit对应关系包含PORTB2~PORTB0和PORTA3~PORTA0;
	PDCON = 0b11111111; //-111 1111 :1-DIS;0-EN

	// OPEN_DRAIN	:bit对应关系对照手册
	// 输出状态下配置端口开漏(Open Drain Output)
	// 开漏输出无法真正输出高电平,即高电平没有驱动能力,需要借助外部上拉电阻完成对外驱动;
	// 端口设置开漏输出时,该端口需外接上拉电阻才能实现输出逻辑1的能力。
	ODCON = 0b00000000; // 1111 -111 :1-EN;0-DIS

	// WUCON:bit对应关系对照手册
	// 输入状态下配置PORTB输入状态变化唤醒控制寄存器
	// 睡眠状态下有效
	WUCON = 0b00000000; // 0000 0000	:1-EN;0=DIS
}

OPTION的宏定义

//OPTION_REG

volatile unsigned char           OPTION_REG          @ 0x081;

#define     OPTION  OPTION_REG

OPTION的使用

OPTION = 0b00000010;

根据这个宏定义我们可以知道,其实对这个OPTION这个变量赋值其实就是在操作OPTION_REG这个寄存器。

这里的作用其实主要就是预分频比率为1:8;
预分频器分配给TMR0;
TMR0时钟源边沿选择位,TOCK1引脚下降沿触发计数;
TMR0时钟源选择为内部指令时钟;
PB0外部中断触发方式选择引脚下降触发中断;
PB1外部中断触发方式选择引脚下降触发中断;

其他寄存器以此类推就行

短按按键控制GPIO水平翻转

观察源码,在while循环里找到按键扫描函数

	if((TKey_Signal.oneBit.b0==1) && (Pre_TKey_Release.oneBit.b0==1))
	{
		Pre_TKey_Release.oneBit.b0=0;
		//-----------------------------------------//
		//松键状态下,检测到有手指标志,执行一次;
		//松键状态下,检测到有手指标志,执行一次;
		//-----------------------------------------//
		//User can add code
		//按键按下执行-在这里
		F_User_Tkey0 = 1;
		//PB ^= 0x40;		//翻转 PB6 的输出电平
		//-----------------------------------------//
	}
	else if(TKey_Signal.oneBit.b0==0)	
	{
		Pre_TKey_Release.oneBit.b0=1;	//无手指 执行
		//-----------------------------------------//
		if(F_User_Tkey0==1)	//松键执行-在这里
		{
			F_User_Tkey0=0;
			PA ^= 0x02;		//翻转 PB6 的输出电平
			#if(IS_SLEEP_MODE == 1)	
				F_User_Sleep = ~F_User_Sleep;		//测试使用,用户需要注释,自行根据程序给出该标志位
			#endif
		}
		//-----------------------------------------//
	}
}

其实就是按键按下会让PA引脚的数据寄存器的值与0x02进行异或,异或就是相同取0不同取1,这样就可以让PA2电平一直翻转。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol

Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol 0. 版本0.1 AccessControlEnumerable.sol 1. 目标合约2. 代码精读2.1 supportsInterface(bytes4 interfaceId)2.2 _grantRole(bytes32 role, address account)2.3 _revokeRole(bytes32 role, addre…

ERP智能管理系统:智能化的未来之路

ERP智能管理系统:智能化的未来之路 科技飞速发展,人工智能(AI)和大数据等先进技术的应用正在改变着企业的运营模式。其中,ERP智能管理系统在帮助企业实现智能化运营、提高效率、降低成本等方面发挥着越来越重要的作用。本文将为您详细介绍ERP…

有什么好用的后勤管理软件?学校后勤服务要怎么提升满意度?

后勤服务是院校管理中的重要一环,直接影响到师生的工作、学习和生活质量。师生作为学校的核心用户,对后勤服务的质量和满意度有着深刻的体验和感受。因此,他们的评价对于提升学校品牌形象、提高服务质量以及改进学校管理具有至关重要的作用。…

《rPPG》——(1)PyTorch——Windows环境配置

《rPPG》——(1)PyTorch——Windows环境配置 如何查看电脑是否已安装Python环境以及Python版本 anaconda对应python3.8的版本号是多少? 截止到我的知识截止日期(2022年1月),Anaconda支持Python 3.8的版本号是Anacond…

易点易动固定资产管理系统场景应用二:集成本地OA/BPM系统

在企业的日常运营中,固定资产管理是一项重要的任务。为了实现高效的工作流程和准确的审批流程,易点易动固定资产管理系统提供了与本地OA/BPM系统的集成功能。本文将重点介绍易点易动固定资产管理系统在集成本地OA/BPM系统方面的应用场景,以帮…

html实现图片裁剪处理(附源码)

文章目录 1.设计来源1.1 主界面1.2 裁剪界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134455169 html实现图片裁剪处理(附源码),支持图片放大缩小&#…

Snipaste 截图悬浮工具【实用教程】

下载安装 Snipaste windows64位版本下载链接:https://pan.baidu.com/s/1i2L3JHxOGqkmX3lj2fUVHA?pwdeut6 无需安装,解压后即可使用 其他版本见官网 https://zh.snipaste.com/download.html 启动 Snipaste 双击解压后文件夹 Snipaste-2.8.8-Beta-x64 中…

亲测一款超实用的在线制作产品册工具,一看就会

最近,我一直在寻找一款简单易用的在线制作产品册工具,终于让我找到了一个超实用的神器!这款工具不仅功能强大,而且操作简单,一看就会。 首先,这款工具提供了丰富的模板和素材,用户可以根据自己的…

linux网络编程之TCP协议编程

Linux网络编程之TCP协议编程 tcp协议编程模型socket函数sockaddr_inbindlistenconnect 应用服务端代码客服端代码 TCP协议编程) tcp协议编程模型 Server 1.创建socket (socket函数) 2.确定服务器协议地址簇 (struct sockaddr) 3.绑定 (bind) 4.监听 ( listen) 5.接受客户端连接…

编译安装redis及配置多实例

yum安装是这种十分简单的方法我们就不在提及了,今天我们来做一下redis的编译安装 Redis源码包官方下载链接:http://download.redis.io/releases/ 一、编译安装: 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…

Appium移动自动化测试--安装Appium

Appium 自动化测试是很早之前就想学习和研究的技术了,可是一直抽不出一块完整的时间来做这件事儿。现在终于有了。 反观各种互联网的招聘移动测试成了主流,如果再不去学习移动自动化测试技术将会被淘汰。 web自动化测试的路线是这样的:编程语…

java:IDEA中的Scratches and Consoles

背景 IntelliJ IDEA中的Scratches and Consoles是一种临时的文件编辑环境,用于写一些文本内容或者代码片段。 其中,Scratch files拥有完整的运行和debug功能,这些文件需要指定编程语言类型并且指定后缀。 举例:调接口 可以看到…

干扰项目成本估算精准度的5大因素

干扰项目成本估算精准度的因素有很多,这些因素可能导致成本估算的不准确性,增加成本偏差和额外的成本投入,从而对项目的进度和预算产生影响。因此,在进行项目成本估算时,需要充分考虑这些因素,并采取相应的…

API接口怎么对接电商平台获取商品详情数据

对于api接口的对接,你可以按照以下步骤进行操作: 1. 确定需求:首先要明确你的对接需求,即想要通过对接api接口实现什么功能,例如获取数据、实现支付等。 2. 寻找文档:在对接之前,要找到相关ap…

虚拟机配置网络ip,主打一个详细

文章目录 一、前言二、安装vim编辑器三、检查联网状态1. 使用ping命令 四、查看ip五、ens33网卡六、开机启动ens33网卡七、获取子网地址和子网掩码八、配置网关与子网掩码1. 编辑虚拟网络信息2. 配置网关3. 配置ens33网卡信息 九、动态ip配置十、静态ip配置 一、前言 本文主要…

面试题 Android 如何实现自定义View 固定帧率绘制

曾经遇到的面试题, 如何实现自定义View 1s内固定帧率的绘制. 当时对Android理解不深, 考虑的不全面, 直接回答了在onDraw结束时通过postDelay发送一个(1000 / 帧数)ms的延时消息触发invalidate进行下一次绘制. 但实际上这样做存在明显的问题 实际上1s绘制的帧数是不符合期望帧…

main函数的数组参数是干嘛用的

今天在看项目代码的时候,突然看到项目中用到了main函数的参数args,在这之前我还没怎么注意过这个参数,一时间居然不知道这个参数是干嘛的! 虽然也写过一些java和scala,但是确实没遇到过会用这个参数的情况。 网上就查…

国鑫受邀出席2023松山湖软件和信息服务业高质量发展大会

为推动粤港澳大湾区的软件和先进制造产业的融合发展,“2023松山湖软件和信息服务业高质量发展大会”于今日在松山湖畔隆重举办,会议以“推动软件和制造业深度融合发展,打造软件和信息服务业集聚高地”为主题,聚焦工业软件应用、智…

springboot引入redisson分布式锁及原理

1.引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version> </dependency>2.配置类创建bean /*** author qujingye* Classname RedissonConfig* Description TOD…

数据结构与集合源码

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…