C语言课设项目-51单片机-独立按键与矩阵按键

news2024/11/23 9:55:10

 (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

一、独立按键

1.按键介绍

2.独立按键原理

3.编写独立按键控制程序

二、矩阵按键

1.矩阵按键的由来

2.矩阵按键扫描原理

3.编写矩阵按键控制程序


一、独立按键

1.按键介绍

轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。我们使用的开关如下图:

2.独立按键原理

如下图所示:当k1按下以后,由于接地,IO接口和内部输入口就会变成低电平,当按键不按下且内部没有输出时,IO口默认为高电平

 按键在闭合和断开时,触点会存在抖动现象

硬件消抖电路:

3.编写独立按键控制程序

#include"reg51.h"
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led =P2^0;
 //如原理图所示:k1接的是RXD接口,而RXD接的是P3.1
sbit k1=P3^1;


void delay(u16 i)	//延时函数
{
 
 	while(i--);  //当i=1时,可以延时10微秒
}
void keypros()
{
	//判断按键是否按下
 	if(k1==0)
 	{
 	   	delay(1000);  //通过延时时间实现消抖处理
		if(k1==0)	//判断是否按下
		{  
			//对其进行循环取反实现按键控制功能
			led = ~led; 
		}
		while(!k1);//判断按键是否松开
 	}
}
void main()
{
 	while(1)  //通过循环实现按键控制LED
 	{
   		keypros();
 	}

}

二、矩阵按键

1.矩阵按键的由来

由图可得:同样是8个IO接口,独立按键只能连接8个按钮,而矩阵键盘可以连接16个接口,所以矩阵键盘经常用于按键比较多的情况

2.矩阵按键扫描原理

方法一:      逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。

方法二:     行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。

3.编写矩阵按键控制程序

//通过行列扫描实现矩阵按键
#include"reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;

u8 code smgduan[16]={0x3f,0x05,0x5b,0x4f,0x66,0x6d,
					0x7d,0x07,0x7f,0x6f,0x77,0x7c,
					0x39 , 0x5e , 0x79 , 0x71}; //共阴

u8 KeyValue;  //创建变量作为smgduan数组的下标
void delay(u16 i)
{
 	while(i--);
}

void KeyDown()
{
	
	char a = 0;
	
	//首先使高四位全部输出低电平,低四位输出高电平
	P1=0x0f;
	if(P1!=0x0f)  //说明有按键按下
	{
		delay(1000);//消除抖动
		if(P1!=0x0f) 
		{
		 	switch(P1) //对每一列进行测试
			{
			 	case(0x07):	//转换为二进制为00000111,说明P-13接口有按键按下
					KeyValue=0;
					break;
				case(0x0b): //P-12接口有按键按下
					KeyValue=1;
					break;
				case(0x0d): //P-11接口有按键按下
					KeyValue=2;
					break;
				case(0x0e): //P-10接口有按键按下
					KeyValue=3;
					break;
			}
			P1=0xf0;  //高四位输出高电平,低四位输出低电平
		 	switch(P1)	//测试每一行
			{
			//从每一列的测试跳出后,进入每一行的测试,此时的KeyValue为每一列的值,要想与每一行对应,只需要在每一行+4即可
			 	case(0x70):	//转换为二进制为01110000,说明P-17接口有按键按下
					KeyValue=KeyValue;
					break;
				case(0xb0): //P-16接口有按键按下
					KeyValue=KeyValue+4;
					break;
				case(0xd0): //P-15接口有按键按下
					KeyValue=KeyValue+8;
					break;
				case(0xe0): //P-14接口有按键按下
					KeyValue=KeyValue+16 ;
					break;
			 }
			 //按键松开的判断
			 while((a<50)&&(P1!=0xf0))
			 {
			 	delay(1000);
				a++;
			 }
		}
	}
}


void main()
{	

 	while(1)  
	{
	 	KeyDown();
		P0=~smgduan[KeyValue];
	}
}

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

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

相关文章

《暮色心迹》开机大吉,在上虞上演一场蓄谋已久的爱情对弈

4月15日&#xff0c;由秀合影视&#xff08;浙江&#xff09; 有限公司、辰耀影业文化传媒&#xff08;北京&#xff09;有限公司、浙江中创华视文化发展有限公司出品&#xff0c;浙江诺然文化传媒有限公司、北京幻想纵横网络技术有限公司、浙江知马影视服务有限公司、浙江沐阳…

最落魄的时候,身上带着《毛选》

最落魄的时候&#xff0c;包里只带《毛选》的腕儿 史玉柱&#xff1a;营销大咖&#xff0c;早年创业起伏大 东山再起的腕儿 趣讲大白话&#xff1a;成功是用心血浇灌的 【趣讲信息科技133期】 **************************** 90%的企业是销售驱动型 所以要把品牌和营销的事搞透彻…

Buyflag

拿到题目可以获取到几条关键提示如果你想要买flag你必须是CUIT的学生你必须回答正确的密码查看源码也发现有php源码提示信息要求通过POST方式传参&#xff0c;并利用isset检测是否有password字段is_numeric是检测password字段是否为数字或者数字字符串&#xff0c;如果为数字则…

集合,Collection接口,Iterator(迭代器),List接口和方法,ArrayList底层结构和源码分析

数组的不足 长度开始必须指定&#xff0c;而且一旦指定&#xff0c;不能修改保存的必须为同一类型的元素使用数组进行增加/删除元素的示意代码麻烦SuppressWarnings({"all"})抑制警告集合 可以动态保存任意多个对象&#xff0c;使用比较方便提供了一系列方便的操作对…

【零基础学习】Javascript 快速入门(完整篇)简单、适合初学者

【零基础学习】Javascript 快速入门前言&#xff1a;如何解决错误提示&#xff08;Error&#xff09;Uncaught TypeError: Cannot set properties of null (setting innerHTML)Uncaught ReferenceError: displayDate is not defined at HTMLButtonElement.onclick安装Visual St…

剪枝与重参第八课:ACNet、DBB、RepVGG重参

目录ACNet、DBB、RepVGG重参前言1. 并行多分支结构1.1. 并行多分支结构 Demo2. ACNet2.1 ACNet简述2.2 init2.3 forward2.4 swtich to deploy2.5 get_equivalent_kernel_bias2.6 Conv2d与BN的融合(重参)2.7 Conv1x3Conv3x1Conv3x3的融合(重参)2.8 模型导出2.9 完整示例代码总结…

【电路理论】KCL、KVL、线性直流电路各大方法、定理详解

博主简介&#xff1a;努力学习的22级计科生一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: 电路理论 目录一、KCL、KVL定律1.1&#xff1a;KCL1.2&#xff1a;KVL1.3&#xff1a;总结二、线性直流电路2.1&#xff1a;电阻网络等效变换2.1.1&#xff1a;电阻等效——三角&星…

【Flink】Flink基础

Flink 官网地址 &#xff08;官网介绍的非常详细&#xff0c;觉得看英文太慢的直接使用浏览器一键翻译&#xff0c;本文是阅读官方文档后进行的内容梳理笔记&#xff09; https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/python/overview/ 这 Flink API …

winForm初始

创建winForm应用程序步骤 创建项目界面设计&#xff0c;拖控件布局设置属性编写代码运行程序 设置属性 在forms框内右击属性 属性框内有 修改标题 在(属性)里的外观里的Text, 点击text后会出现相对应的提示 设置关联属性名称 查看代码 右击 设置label名称 设置textbox关联属…

38-Vue之cron表达式组件使用

cron表达式组件使用前言vue-cron-editor-buefy1. 安装vue-cron-editor-buefy包2. 使用3. 配置路由4. 运行并查看效果vcrontab1. 安装vcrontab包2. 使用3. 配置路由4. 运行并查看前言 本篇来学习下vue中如何生成cron表达式的两个包 vue-cron-editor-buefy 1. 安装vue-cron-ed…

先认识浏览器和 dom

先认识浏览器和 dom 认识浏览器使用控制台(console)初识 dom获取浏览器可见区域高度简单的操作一下 dom向页面添加一个元素innerHTML认识块模式认识坐标与定位小结认识浏览器 我们先创建一个文本文件,然后将其扩展名改成 html,或者直接创建一个 html 文档。嗯,空白的,里…

『pyqt5 从0基础开始项目实战』08. 本地数据配置文件的保存与读取之SMTP邮件报警(保姆级图文)

目录导包和框架代码简化说明绑定鼠标事件编写弹窗UI和读取配置保存配置功能读取本地配置文件编写UI界面保存设置main.py中启动弹窗UI完整代码main.pythreads.pydialog.py总结欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项…

什么是MVVM?

MVVM 是 Model-View-ViewModel 的缩写&#xff0c;是M-V-VM三部分组成。它本质上就是MVC的改进版。 M&#xff1a;Model 代表数据模型&#xff0c;也可以在Model中定义数据修改和操作的业务逻辑。 V&#xff1a;View 代表视图UI&#xff0c;它负责将数据模型转化成UI 展现出来。…

OpenResty+OpenWAF的WEB防护实战

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。本文介绍通过OpenRestyOpenWAF来搭建软WAF的应用&#xff…

【Linux】多线程协同

目录 生产消费模型 BlockQueue阻塞队列模型 BlockQueue.hp Task.hpp mypc.cc RingQueue循环队列模型 POSIX信号量 RingQueue.hpp Task.hpp main.cc 生产消费模型 生产者与生产者之间关系&#xff1a;互斥&#xff08;竞争&#xff09; 消费者与消费者之间关系&…

偏向锁到轻量级锁的升级过程(耗资源)

目录 上原理&#xff1a; 细说原理&#xff1a; 什么是锁记录呢&#xff1f; 什么是Mark Word 呢&#xff1f; 上图解&#xff1a; 上原理&#xff1a; 偏向锁使⽤了⼀种等到竞争出现才释放锁的机制&#xff0c;所以当其他线程尝试竞争偏向锁时&#xff0c; 持有偏向锁的…

nssctf web 入门(3)

目录 [NISACTF 2022]easyssrf [SWPUCTF 2021 新生赛]ez_unserialize [SWPUCTF 2021 新生赛]no_wakeup 这里通过nssctf的题单web安全入门来写&#xff0c;会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列&#xff0c;之后会一直出这个题单的解析&…

FLStudio21中文版本好不好用?值不值得下载

FLStudio中文21最新版本以其使用速度而闻名&#xff0c;是一个高度复杂的音乐制作环境。现代的DAW是一种非凡的野兽。首先&#xff0c;它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&#xff0c;通过在价格适中的软件中模拟完整的工作室体验&#xff0c;它在音乐…

国内版的ChatGPT弯道超车的机会在哪里?

前言 从去年11月最后一天ChatGPT诞生&#xff0c;截至目前&#xff0c;ChatGPT的热度可谓是爆了。众所周知&#xff0c;ChatGPT是美国“开放人工智能研究中心”研发的聊天机器人程序&#xff0c;它是一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人…

【数据分析】— 特征工程、特征设计、特征选择、特征评价、特征学习

【数据分析】— 特征工程特征工程是什么&#xff1f; (Feature Engineering)特征工程的意义特征工程的流程特征的设计从原始数据中如何设计特征&#xff1f;基本特征的提取创建新的特征函数变换特征独热特征表示 One-hot Representation数据的统计特征TF-IDF&#xff08;词频-逆…