基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用

本文主要是介绍基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用

  • STC12C5A60S2系列1T 8051单片机管脚图
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
      • 基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值功能

STC12C5A60S2系列1T 8051单片机管脚图

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

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

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

基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值功能

main.c

#include "STC12C5A60S2.h"  
#include "Timer0.h"
#include "Key.h"
#include "Digitron.h"
sbit LED = P1^2;//位定义LED灯为单片机P1.2脚void main()//主函数
{Timer0Init();//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHzDigitronBootDisplay();//数码管开机显示函数while(1)//主循环{KeyScanResult();//按键扫描结果函数}} 

Key.c

#include "Key.h"
#include "Timer0.h"
#define	uchar unsigned char	//定义无符号字符
#define	uint  unsigned int	//定义无符号整形
#define KeyPressDeshakeTime 10//自定义按键按下消抖时间为10ms	
#define KeyLongPressDelayTime 100//自定义按键长按延时时间为100ms
uchar SetKeyFlag = 0;定义设置按键标志位变量为0
uchar SetKeyPressLcokFlag = 0;定义设置按键按下锁定标志位变量为0
uchar AddKeyPressLcokFlag = 0;//定义增加按键锁定标志位变量为0
uchar AddKeyShortPressLcokFlag = 0;//定义增加按键短按按下锁定标志位变量为0
uchar AddKeyLongPressLcokFlag = 0;//定义增加按键长按按下锁定标志位变量为0
uchar DecKeyPressLcokFlag = 0;//定义减少按键锁定标志位变量为0
uchar DecKeyShortPressLcokFlag = 0;//定义减少按键短按按下锁定标志位变量为0
uchar DecKeyLongPressLcokFlag = 0;//定义减少按键长按按下锁定标志位变量为0
//uchar KeyTypePressCount = 0;//定义按键类型按下计数变量为0
//uchar KeyTypePressCountFlag = 0;//定义按键类型按下计数标志位变量为0
//uchar ClearKeyPressFlag = 0;//定义清零按键按下标志位变量为0
//uchar SetKeyFlag = 0;//定义设置按键标志位变量为0
//uchar SetKeyPressCountFlag = 1;//定义设置按键按下计数标志位变量为1
//uchar SetKeyShortPressLcokFlag = 0;//定义设置按键短按按下锁定标志位变量为0
//uchar SetKeyShortPressCount = 0;//定义设置按键短按按下计数变量为0
//uchar SetKeyShortPressFlag = 0;//定义设置按键短按按下标志位变量为0
//uchar SetKeyShortPressCountFlag = 0;//定义设置按键短按按下计数标志位变量为0
//uchar SetKeyLongPressCount = 0;//定义设置按键长按按下计数变量为0
//uchar SetKeyLongPressLcokFlag = 0;//定义设置按键长按按下锁定标志位变量为0
uchar SetKeyLongPressFlag = 0;//定义设置按键长按按下标志位变量为0
uint  SetKeyLongPressCountFlag = 0;//定义设置按键长按按下计数标志位变量为0
uint  KeyPressDelayTime = 0;//定义按键按下延时时间变量为0
uint  KeyLiftDelayTime = 0;//定义按键弹起延时时间变量为0
uint  KeyPressNumber = 0;//定义按键按下数值变量为0
uint  KeyType = 0;//定义按键类型变量为0
//  uint KeyScan ()//带按键返回值的按键扫描函数
//  void SetKeyScan()//设置按键扫描函数
//{
//   if(SetKey == 0)//设置按键按下
// {	  
//	  KeyPressDelayTime++;//按键按下延时时间变量自加
//	  if(KeyPressDelayTime > KeyLongPressDelayTime)//判断按键按下延时时间变量是否大于按键长按延时时间
//  {
//     KeyPressDelayTime = 0;//按键按下延时时间变量清0
//	   SetKeyLongPressFlag = 1;//设置按键长按按下标志位变量置1 
//		 KeyType = 1;//此处是设置按键长按	长按后立马启动立马触发进入长按触发位
//		 SetKeyPressLcokFlag = 1;设置按键按下锁定标志位变量置1 此处是设置按键长按	长按后立马启动立马触发进入长按触发位
//		 if(SetKeyLongPressCountFlag == 1)//判断设置按键长按按下计数标志位变量是否为1 此处是设置按键第2次长按 为了让设置按键在第2次长按触发过程中先动作
//	 {
//		  SetKeyFlag = 0;//设置按键标志位变量置0 此处是设置按键第2次长按后立马启动立马触发关断功能
//     }
//   }
//  }
//	 else//设置按键弹起或没按下
// {
//    KeyPressDelayTime = 0;//按键按下延时时间变量清0 重启下一步按键按下延时操作
//		KeyLiftDelayTime++;//按键弹起延时时间变量自加
//		if(KeyLiftDelayTime > KeyPressDeshakeTime)//判断按键弹起延时时间变量是否大于按键按下消抖时间
//  { 
//		 KeyLiftDelayTime = 0;//按键弹起延时时间变量清0 重启下一步按键弹起延时操作
//		 if(SetKeyLongPressFlag == 1)//判断设置按键长按按下标志位变量是否为1 表示设置按键长按按下过 
//	 {	 
//		  SetKeyLongPressFlag = 0;//设置按键长按按下标志位变量置0 为了重启下一步设置按键长按按下操作
//		  KeyType = 0;//为了跳出设置按键长按 让设置按键可以进行下一步再次长按
//		  SetKeyLongPressCountFlag++;//设置按键长按按下计数标志位变量自加 对于按键计数或按键类型触发操作 建议要放在按键弹起后再计数或触发 此处就是
//	   }
//	 }
//	}
//   if(SetKeyLongPressCountFlag > 1)//设置按键长按按下计数变量是否大于1 此处是设置按键第2次长按后松手 
// {
//    SetKeyFlag = 0;//设置按键标志位变量清0 触发关机
//		KeyType = 0;//按键类型清0 为了跳出设置按键长按 让设置按键可以进行下一步再次长按
//	  SetKeyLongPressCountFlag = 0;//设置按键长按按下计数标志位变量清0 让设置按键可以进行下一步长按
//	  SetKeyPressLcokFlag = 0;//设置按键按下锁定标志位变量清0 为了重启下一步设置按键长按按下操作 也是重启其他操作的基础
//   }  
// }void KeyScan ()//按键扫描函数
{  	  if(SetKey == 0)//设置按键按下{	  KeyPressDelayTime++;//按键按下延时时间变量自加if(KeyPressDelayTime > KeyLongPressDelayTime)//判断按键按下延时时间变量是否大于按键长按延时时间{KeyPressDelayTime = 0;//按键按下延时时间变量清0SetKeyLongPressFlag = 1;//设置按键长按按下标志位变量置1 KeyType = 1;//此处是设置按键长按	长按后立马启动立马触发进入长按触发位SetKeyPressLcokFlag = 1;设置按键按下锁定标志位变量置1 此处是设置按键长按	长按后立马启动立马触发进入长按触发位if(SetKeyLongPressCountFlag == 1)//判断设置按键长按按下计数标志位变量是否为1 此处是设置按键第2次长按 为了让设置按键在第2次长按触发过程中先动作{SetKeyFlag = 0;//设置按键标志位变量置0 此处是设置按键第2次长按后立马启动立马触发关断功能}}}else if((SetKeyPressLcokFlag == 1) && (AddKey == 0) && (AddKeyPressLcokFlag == 0))//设置按键长按后立马启动立马触发 增加按键才能按下{	  DecKeyPressLcokFlag = 1;//减少按键按下锁定标志位变量置1 防止增加按键按下时 有减少按键按下 从而实现增加减少按键互不干扰KeyPressDelayTime++;//按键按下延时时间变量自加if((AddKeyShortPressLcokFlag == 0) && (AddKeyLongPressLcokFlag == 0))//增加按键短按按下锁定标志位变量为0与增加按键长按按下锁定标志位变量为0 一是为了增加按键第1次能短按 二是为了增加按键第1次短按后 如果不松手一直按着 会激活增加按键短按锁定标志位置1 跳出增加按键短按 进入增加按键长按 三是为了增加按键长按后松手 防止进入短按 从而实现短按与长按互不干扰 {	 if(KeyPressDelayTime > KeyPressDeshakeTime)//判断按键按下延时时间变量是否大于按键按下消抖时间{KeyPressDelayTime = 0;//按键按下延时时间变量清0 为了跳出设置按键短按延时 进入设置按键长按延时AddKeyShortPres

这篇关于基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861662

相关文章

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys