STM32F28335:按键实验

news2024/12/22 1:47:44

一个简单的按键实验:

每一个按键的功能是不一样的

其中不知道为什么key3出现了问题,可是查不出原因,就先放在这里了

按键采用行列扫描的方式判断

大家可以自己看资料

看管脚和资料是程序猿的基本功

代码:

key的驱动

keys.c

/*
 * key.c
 *
 *  Created on: 2024年8月5日
 *      Author: Administrator
 */



#include<keys.h>

void KEY_Init(void)
{
	EALLOW;//关闭写保护

		SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // 开启GPIO时钟

		//LED1端口配置
		GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;//设置为通用GPIO功能
		GpioCtrlRegs.GPADIR.bit.GPIO12=0;//设置GPIO方向为输入
		GpioCtrlRegs.GPAPUD.bit.GPIO12=0;//使能GPIO上拉电阻

		GpioCtrlRegs.GPAMUX1.bit.GPIO13=0;//设置为通用GPIO功能
		GpioCtrlRegs.GPADIR.bit.GPIO13=0;//设置GPIO方向为输入
		GpioCtrlRegs.GPAPUD.bit.GPIO13=0;//使能GPIO上拉电阻

		GpioCtrlRegs.GPAMUX1.bit.GPIO14=0;//设置为通用GPIO功能
		GpioCtrlRegs.GPADIR.bit.GPIO14=0;//设置GPIO方向为输入
		GpioCtrlRegs.GPAPUD.bit.GPIO14=0;//使能GPIO上拉电阻

		GpioCtrlRegs.GPBMUX2.bit.GPIO48=0;//设置为通用GPIO功能
		GpioCtrlRegs.GPBDIR.bit.GPIO48=1;//设置GPIO方向为输出
		GpioCtrlRegs.GPBPUD.bit.GPIO48=0;//使能GPIO上拉电阻

		GpioCtrlRegs.GPBMUX2.bit.GPIO49=0;//设置为通用GPIO功能
		GpioCtrlRegs.GPBDIR.bit.GPIO49=1;//设置GPIO方向为输出
		GpioCtrlRegs.GPBPUD.bit.GPIO49=0;//使能GPIO上拉电阻

		GpioCtrlRegs.GPBMUX2.bit.GPIO50=0;//设置为通用GPIO功能
		GpioCtrlRegs.GPBDIR.bit.GPIO50=1;//设置GPIO方向为输出
		GpioCtrlRegs.GPBPUD.bit.GPIO50=0;//使能GPIO上拉电阻





		EDIS;//开启写保护

		GpioDataRegs.GPBSET.bit.GPIO48=1;//设置GPIO输出高电平
		GpioDataRegs.GPBSET.bit.GPIO49=1;//设置GPIO输出高电平
		GpioDataRegs.GPBSET.bit.GPIO50=1;//设置GPIO输出高电平
	}



char KEY_Scan(char mode)
{

	KEY_L1SET_L;
	KEY_L2SET_H;
	KEY_L3SET_H;



	if(keyh1==0||keyh2==0||keyh3==0)
	{
		DELAY_US(10000);
				if(keyh1==0)
				{
					mode=KEY1_PRESS;
				}
				else if(keyh2==0)
				{
					mode=KEY4_PRESS;
				}
				else if(keyh3==0)
				{
					mode=KEY7_PRESS;
				}
	}

	KEY_L1SET_H;
	KEY_L2SET_L;
	KEY_L3SET_H;

	if(keyh1==0||keyh2==0||keyh3==0)
	{
		DELAY_US(10000);
				if(keyh1==0)
				{
					mode=KEY2_PRESS;
				}
				else if(keyh2==0)
				{
					mode=KEY5_PRESS;
				}
				else if(keyh3==0)
				{
					mode=KEY8_PRESS;
				}
	}

	KEY_L1SET_H;
	KEY_L2SET_H;
	KEY_L3SET_L;


	if(keyh1==0||keyh2==0||keyh3==0)
	{
		DELAY_US(10000);

				if(keyh1==0)
				{
					mode=KEY3_PRESS;
				}
				else if(keyh2==0)
				{
					mode=KEY6_PRESS;
				}
				else if(keyh3==0)
				{
					mode=KEY9_PRESS;
				}
	}

return mode;
}

key.h

/*
 * key.h
 *
 *  Created on: 2024年8月5日
 *      Author: Administrator
 */

#ifndef KEYS_H_
#define KEYS_H_

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File


#define KEY_L1SET_H (GpioDataRegs.GPBSET.bit.GPIO48=1)//设置GPIO输出高电平
#define KEY_L1SET_L (GpioDataRegs.GPBCLEAR.bit.GPIO48=1)//设置GPIO输出低电平

#define KEY_L2SET_H (GpioDataRegs.GPBSET.bit.GPIO49=1)//设置GPIO输出高电平
#define KEY_L2SET_L (GpioDataRegs.GPBCLEAR.bit.GPIO49=1)//设置GPIO输出低电平

#define KEY_L3SET_H (GpioDataRegs.GPBSET.bit.GPIO50=1)//设置GPIO输出高电平
#define KEY_L3SET_L (GpioDataRegs.GPBCLEAR.bit.GPIO50=1)//设置GPIO输出低电平

#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY5_PRESS 5
#define KEY6_PRESS 6
#define KEY7_PRESS 7
#define KEY8_PRESS 8
#define KEY9_PRESS 9

#define keyh1 (GpioDataRegs.GPADAT.bit.GPIO12)//管脚信号
#define keyh2 (GpioDataRegs.GPADAT.bit.GPIO13)//管脚信号
#define keyh3 (GpioDataRegs.GPADAT.bit.GPIO14)//管脚信号

void KEY_Init();
char KEY_Scan(char mode);

#endif /* KEYS_H_ */

leds文件夹:

leds.c

/*
 * leds.c
 *
 *  Created on: 2024年8月2日
 *      Author: Administrator
 */

#include<leds.h>


/*******************************************************************************
* 函 数 名         : LED_Init
* 函数功能		   : LED初始化函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void LED_Init(void)
{
	EALLOW;//关闭写保护

	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // 开启GPIO时钟

	//LED1端口配置
	GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPCMUX1.bit.GPIO67=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO67=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPCPUD.bit.GPIO67=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPCMUX1.bit.GPIO66=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO66=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPCPUD.bit.GPIO66=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPCMUX1.bit.GPIO65=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO65=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPCPUD.bit.GPIO65=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPCMUX1.bit.GPIO64=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO64=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPCPUD.bit.GPIO64=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPAMUX1.bit.GPIO10=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPADIR.bit.GPIO10=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPAPUD.bit.GPIO10=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPADIR.bit.GPIO11=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPAPUD.bit.GPIO11=0;//使能GPIO上拉电阻

	GpioDataRegs.GPCSET.bit.GPIO68=1;//设置GPIO输出高电平
	GpioDataRegs.GPCSET.bit.GPIO67=1;//设置GPIO输出高电平
	GpioDataRegs.GPCSET.bit.GPIO66=1;//设置GPIO输出高电平
	GpioDataRegs.GPCSET.bit.GPIO65=1;//设置GPIO输出高电平
	GpioDataRegs.GPCSET.bit.GPIO64=1;//设置GPIO输出高电平
	GpioDataRegs.GPASET.bit.GPIO10=1;//设置GPIO输出高电平
	GpioDataRegs.GPASET.bit.GPIO11=1;//设置GPIO输出高电平

	EDIS;//开启写保护
}

led.h代码

/*
 * leds.h
 *
 *  Created on: 2024年8月2日
 *      Author: Administrator
 */

#ifndef LEDS_H_
#define LEDS_H_

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File





#define LED1OFF (GpioDataRegs.GPCSET.bit.GPIO68=1)
#define LED1ON (GpioDataRegs.GPCCLEAR.bit.GPIO68=1)
#define LED1TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO68=1)

#define LED2OFF (GpioDataRegs.GPCSET.bit.GPIO67=1)
#define LED2ON (GpioDataRegs.GPCCLEAR.bit.GPIO67=1)
#define LED2TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO67=1)

#define LED3OFF (GpioDataRegs.GPCSET.bit.GPIO66=1)
#define LED3ON (GpioDataRegs.GPCCLEAR.bit.GPIO66=1)
#define LED3TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO66=1)

#define LED4OFF (GpioDataRegs.GPCSET.bit.GPIO65=1)
#define LED4ON (GpioDataRegs.GPCCLEAR.bit.GPIO65=1)
#define LED4TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO65=1)

#define LED5OFF (GpioDataRegs.GPCSET.bit.GPIO64=1)
#define LED5ON (GpioDataRegs.GPCCLEAR.bit.GPIO64=1)
#define LED5TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO64=1)

#define LED6OFF (GpioDataRegs.GPASET.bit.GPIO10=1)
#define LED6ON (GpioDataRegs.GPACLEAR.bit.GPIO10=1)
#define LED6TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO10=1)

#define LED7OFF (GpioDataRegs.GPASET.bit.GPIO11=1)
#define LED7ON (GpioDataRegs.GPACLEAR.bit.GPIO11=1)
#define LED7TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO11=1)

void LED_Init(void);

#endif /* LEDS_H_ */

main.c文件

/*
 * main.c
 *
 *  Created on: 2018-3-21
 *  Author: Administrator
 */


#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include<leds.h>
#include <keys.h>

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,通过循环占用CPU,达到延时功能
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void delay(void)
{
    Uint16 		i;
	Uint32      j;
	for(i=0;i<32;i++)
		for (j = 0; j < 100000; j++);
}



/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main()
{
	InitSysCtrl();//系统时钟初始化,默认已开启F28335所有外设时钟

	LED_Init();
	KEY_Init();

	char MODE1=10;
	char MODE2=12;
	char mode1=11;
	int flag=0;
	char mode;

	LED1OFF;
		LED2OFF;
		LED3OFF;
		LED4OFF;
		LED5OFF;
		LED6OFF;
		LED7OFF;

	while(1)
	{
		mode1=KEY_Scan(mode);

		if(mode1==1)
			{
				LED1TOGGLE;
				LED2OFF;
				LED3OFF;
				LED4OFF;
				LED5OFF;
				LED6OFF;
				LED7OFF;
				DELAY_US(200000);
			}
		if(mode1==2)
			{
				LED2TOGGLE;
				LED1OFF;
				LED3OFF;
				LED4OFF;
				LED5OFF;
				LED6OFF;
				LED7OFF;
				DELAY_US(200000);
			}
		if(mode1==3)
			{
				LED3TOGGLE;
				LED2OFF;
				LED1OFF;
				LED4OFF;
				LED5OFF;
				LED6OFF;
				LED7OFF;
				DELAY_US(200000);
			}

		if(mode1==4)
			{
				LED4TOGGLE;
				LED2OFF;
				LED3OFF;
				LED1OFF;
				LED5OFF;
				LED6OFF;
				LED7OFF;
				DELAY_US(200000);
			}
		if(mode1==5)
			{
				LED5TOGGLE;
				LED2OFF;
				LED3OFF;
				LED4OFF;
				LED1OFF;
				LED6OFF;
				LED7OFF;
				DELAY_US(200000);
			}
		if(mode1==6)
			{
				LED6TOGGLE;
				LED2OFF;
				LED3OFF;
				LED4OFF;
				LED5OFF;
				LED1OFF;
				LED7OFF;
				DELAY_US(200000);
			}
		if(mode1==7)
			{
				LED7TOGGLE;
				LED2OFF;
				LED3OFF;
				LED4OFF;
				LED5OFF;
				LED6OFF;
				LED1OFF;
				DELAY_US(200000);
			}
		if(mode1==8)
			{
			LED1OFF;
							LED2OFF;
							LED3OFF;
							LED4OFF;
							LED5OFF;
							LED6OFF;
							LED7OFF;

				DELAY_US(200000);
				LED1ON;
								LED2ON;
								LED3ON;
								LED4ON;
								LED5ON;
								LED6ON;
								LED7ON;
								DELAY_US(200000);
			}
		if(mode1==9)
			{
			LED1OFF;
			DELAY_US(200000);
			LED1ON;
			DELAY_US(200000);
			LED2OFF;
			DELAY_US(200000);
			LED2ON;
			DELAY_US(200000);
			LED3OFF;
			DELAY_US(200000);
			LED3ON;
			DELAY_US(200000);
			LED4OFF;
			DELAY_US(200000);
			LED4ON;
			DELAY_US(200000);
			LED5OFF;
			DELAY_US(200000);
			LED5ON;
			DELAY_US(200000);
			LED6OFF;
			DELAY_US(200000);
			LED6ON;
			DELAY_US(200000);
			LED7OFF;
			DELAY_US(200000);
			LED7ON;
			DELAY_US(200000);
			}

	}

}

演示视频:

STM32F28335的按键实验

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】Java泛型、集合、UML统一建模语言、final关键字

昨天在昆仑巢&#xff0c;下午练习Spring Boot的过滤器Filter。 昨天傍晚开始阅读《疯狂Java讲义(第2版)》&#xff0c;熟悉了UML建模语言、Final修饰符、List集合和泛型。 1.UML建模语言: 13种图&#xff0c;常用的包括用例图、类图、组件图、部署图、顺序图、活动图和状态机…

【ai】 时间序列分析的python例子

时间序列分析 :分析和理解随时间变化的数据序列 在gcc的趋势滤波后,需要对排队延迟梯度进行检测及调整,参考的是一个阈值, 调整阈值时就使用了时间序列分析技术: 时间序列分析是统计学和数据分析中的一种技术,用于分析和理解随时间变化的数据序列。时间序列数据具有时间上…

活动易企秀H5场景秀源码系统 带完整的安装代码包以及搭建教程

在数字化营销飞速发展的今天&#xff0c;H5页面以其独特的互动性、高度的传播性和良好的兼容性成为众多企业及个人宣传推广的首选。而“活动易企秀H5场景秀”作为一款广受欢迎的在线H5创作工具&#xff0c;凭借其丰富的模板、简易的操作流程&#xff0c;让非技术背景的用户也能…

MySQL笔记(八):事务

一、事务 事务用于保证数据的一致性&#xff0c;它由一组相关的dml组成&#xff0c;该组的dml语句要么全部成功&#xff0c;要么全部失败&#xff1a;转账。 事务和锁&#xff1a;当执行事务操作时&#xff08;dml语句&#xff09;,mysql会在表上加锁&#xff0c;防止其他用户…

【Mysql】第十四章 使用C语言链接(环境配置+连接库+sql函数)

文章目录 1.下载库2.上传库3.编译库4.连接库创建对象-mysql_init连接数据库-mysql_real_connect关闭数据库连接-mysql_close 5.sql函数设置编码格式-mysql_set_character_set发送请求-mysql_query获取查询结果-mysql_store_result获取查询结果的行数-mysql_num_rows获取查询结果…

案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)

文章目录 一、 项目前期准备1.数据库准备2.导入依赖3.pojo包处理4.dao包处理5.service包处理6.controller包处理7.加密工具类的使用8.页面文件的导入 总结 一、 项目前期准备 1.数据库准备 创建schedule_system数据库并执行如下语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHE…

国产AI大模型:从萌芽到繁盛,未来可期

I一、AI****大模型的起源 自1950年图灵提出著名的“图灵测试”以来&#xff0c;人工智能领域经历了从学术探索到实际应用的转变。1956年达特茅斯会议上“人工智能”一词的首次提出&#xff0c;标志着AI正式成为学术研究的焦点。进入21世纪&#xff0c;随着计算能力的显著提升和…

【Pyspark-驯化】一文搞懂Pyspark中的withColumnRenamed函数的使用技巧

【Pyspark-驯化】一文搞懂Pyspark中的withColumnRenamed函数的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取…

常见的中间件漏洞:Tomcat

Tomcat简介 tomcat是一个开源而且免费的isp服务器&#xff0c;默认端口:8080&#xff0c;属于轻量级应用服务器。它可以实现JavaWeb程序的装载&#xff0c;是配置JSP(Java Server Page)和JAVA系统必备的一款环境。在历史上也披露出来了很多的漏洞&#xff0c;这里我们讲几个经典…

.NET_WPF_使用Livecharts数据绑定图表

相关概念 LiveCharts 是一个开源的图表库&#xff0c;适用于多种 .NET 平台&#xff0c;包括 WPF、UWP、WinForms 等。LiveCharts 通过数据绑定与 MVVM 模式兼容&#xff0c;使得视图模型可以直接控制图表的显示&#xff0c;无需直接操作 UI 元素。这使得代码更加模块化&#x…

JavaEE: Thread类以及线程状态

文章目录 Thread类等待一个线程 - join()获取当前线程的引用sleep 线程状态 Thread类 等待一个线程 - join() 操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程. 线程等待就是在确定两个线程的"结束顺序”. 我们无法确定两个线程调度执行的顺序,但…

物理动力系统的强化学习:一种替代方法

物理动力系统的强化学习&#xff1a;一种替代方法 一、物理和非线性动力学 控制理论通过经典的、鲁棒的和最优的方法&#xff0c;使现代文明成为可能。炼油、电信、现代制造业等都依赖于它们。控制理论建立在物理方程提供的洞察力之上&#xff0c;例如从牛顿定律和麦克斯韦方程…

干货分享 | TSMaster 测试报告生成器操作指南

用户在基于 TSMaster 软件开发测试用例时&#xff0c;或需要使用 TSMaster 生成 HTML 报告时&#xff0c;需要使用 TSMaster 测试报告生成器。 1、Test_Report 说明 Test_Report 是目前 TSMaster 为客户提供的一套测试报告模板&#xff0c;里面集成了测试报告的打印输出、图片…

android13去掉安全模式 删除安全模式

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题排查 3.修改方法 3.1方法1 3.2方法2 4.测试 5.彩蛋 1.前言 Android设备上的安全模式是一种诊断模式,当设备无法正常启动时,它会启动到这个模式。在这个模式下,只有系统自带的程序和服务会被运行,所有的第三方…

谷粒商城实战笔记-139-商城业务-nginx-搭建域名访问环境一(反向代理配置)

文章目录 一&#xff0c;管理员身份修改hosts文件二&#xff0c;配置Nginx反向代理product服务1&#xff0c;Nginx配置文件简介2&#xff0c;配置Nginx将gulimall.com的请求转发到product服务 本节的主要内容是讲述如何实现通过域名 gulimall.com访问谷粒商城系统。 主要实现思…

IDEA右键新建时没有Java Class选项

项目场景&#xff1a; IDEA右键新建时没有Java Class选项 问题描述 IDEA右键新建时没有Java Class选项 原因分析&#xff1a; 提示&#xff1a;这里填写问题的分析&#xff1a; 例如&#xff1a;Handler 发送消息有两种方式&#xff0c;分别是 Handler.obtainMessage()和 Ha…

InstantMesh 论文学习

论文链接&#xff1a;https://arxiv.org/abs/2404.07191 代码链接&#xff1a;https://github.com/TencentARC/InstantMesh 解决了什么问题&#xff1f; 这项技术可以从单个视角的2D图像中生成3D模型&#xff0c;这有助于简化3D内容的创建过程。3D资产的生成可以应用于虚拟现…

Pytorch人体姿态骨架生成图像

ControlNet是一个稳定扩散模型&#xff0c;可以复制构图和人体姿势。ControlNet解决了生成想要的确切姿势困难的问题。 Human Pose使用OpenPose检测关键点&#xff0c;如头部、肩膀、手的位置等。它适用于复制人类姿势&#xff0c;但不适用于其他细节&#xff0c;如服装、发型和…

Altium designer学习笔记03 -原理图绘制

原理图绘制 1. 原理图页大小设置2.原理图格点的设置3. 原理图模板的应用4. 元件的放置5.元件属性的编辑6.元件的选择、移动、旋转、镜像6.1 元件的选择6.2 元件的移动6.3 元件的旋转6.3 元件的镜像 7.元件的复制/剪切/粘贴8.元件的排列与对齐9.绘制导线的导线属性设置10.放置网…

基于Comsol进行薄膜型声学超表面设计与可调节性研究

研究背景&#xff1a; 在隔声领域&#xff0c;高频噪声属于易于隔离的频段噪声&#xff0c;使用隔音板或隔音墙便可达到良好的隔声效果。而低频噪声由于具有波长大、穿透性强、传播距离远等特点&#xff0c;根据质量作用定律&#xff0c;传统的隔声材料需要通过不断增加材料的…