C51与4*4矩阵键盘

这篇具有很好参考价值的文章主要介绍了C51与4*4矩阵键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  之前做了个密码锁因为代码写的比较乱,现在想将各个部分的函数整理一下分别封装起来在主函数中直接调用,从而使代码更精简,也提高了程序的移植性。文章分享的内容是整理后的代码加上一些注释。

硬件部分键盘由16个按键组成,将每行4个的按键连在一起,再将每列4个的按键连在一起,就得到了8条支线分别将其接到单片机的io上。如下图

C51与4*4矩阵键盘

 电路搭建好了接下来就是代码部分了,这里我使用的是行列扫描法。

行列扫描法是先确定每行是否有按键被按下,再确定列是否有按键被按下。

行:先给P1端口的低四位(接行的io)高电平、高四位(接列的io)低电平。

当某个按键被按下时该按键所处的行为低电平,也就是接该行的io口为0。因为开始时我们已经给接列的io赋低电平相当于接地,在按键被按下时电路短接这时接行的io电平被拉低相当于接地,而我们可以通过读取P1端口的值,然后取出低四位来确定哪一行有按键被按下。

列:当确定被按下按键的行后,反过来给P1端口的低四位(接行的io)低电平、高四位(接列的io)高电平,再读取P1端口的值,然后取出高四位来确定哪一列有按键被按下。

当经过行列扫描后就会得到一个8位的二进制数解读一下就可以得到一个唯一得坐标了。

C51与4*4矩阵键盘

代码部分如下

键盘的相关函数

#include"butto_16.h"

void Delay_ms(int z)//1ms延时
{
 int x,y;
 for(x=z;x>0;x--);
  for(y=110;y>0;y--);
}

unsigned char saomiao()     //4*4键盘扫描函数
{
	unsigned char row,column;//记录行的4位数据、记录列的4位数据
	P1=0x0f; //P1=0000 1111 
	row=P1&0x0f;
	if(row!=0x0f)//检测每行按键是否被按下
	{
		Delay_ms(1);
		if(row!=0x0f)
		{
			row=P1&0x0f;//取出低4位数据
			 /*  1&0为0、1&1为1 */
			
			P1=row|0xf0;  
			column=P1&0xf0;//取出高4位数据
			
			return(column+row);//把行列的数据整合获得按键的唯一坐标
		}
	}
	return(0xff);//返回按键没被按下
}

unsigned int anjian_16()       //键盘电平转码信息函数
{
	unsigned char key;
	unsigned int a;
	key=saomiao();//获取键盘扫描的坐标数据
	switch(key)//转码信息
	{
        case 0xee:a=1;break;  //P=1110 1110  坐标(1,1)
		case 0xde:a=2;break;  //P=1101 1110  坐标(2,1)
		case 0xbe:a=3;break;  //P=1011 1110  坐标(3,1)
		//case 0x7e:a=;break; //P=0111 1110  坐标(4,1)
		case 0xed:a=4;break;
		case 0xdd:a=5;break;
		case 0xbd:a=6;break;
		//case 0x7d:a=;break;
		case 0xeb:a=7;break;
		case 0xdb:a=8;break;
		case 0xbb:a=9;break;
        //case 0x7b:a=;break;
		case 0xe7:a=0;break;
		//case 0xd7:a=;break;
		//case 0xb7:a=;break;		
		//case 0x77:a=;break;
		case 0xff:return(10);    //按键没按下
	}
	return a;
}

键盘的相关函数的头文件

/*
4*4矩阵键盘函数调用头文件

函数名    anjian_16()
输入参数  无
返回参数  被按下按键的坐标所代表的数据内容(数据内容可自定义)
*/
#ifndef __BUTTO_16
#define __BUTTO_16

#include<reg52.h>


unsigned int anjian_16();       //键盘电平转码信息函数

#endif

主函数

#include<reg52.h>
#include"74HC595.H"  
#include"butto_16.h"  //使用键盘函数的头文件


void main()
{
	int b[8]={10,10,10,10,10,10,10,10},c,d=0;
    while(1)
		{
			for(c=0;c<8;c++)
			{
				if(anjian_16()!=10&&d<8)//判断按键是否被按下并输入数据个数小于等8个
				{
					b[d]=anjian_16();//通过键盘输入数据
				    d++;
					while(1)if(anjian_16()==10)break;//等待按键释放
					//delay(300);
				}
				Send_CP(c,b[c]);//数码管打印数据
	   		    delay(3);
				Send_Byte(0xff);//消隐
			}
		}			
}

仿真效果

以上就是本次分享的全部内容了。文章来源地址https://www.toymoban.com/news/detail-513824.html

到了这里,关于C51与4*4矩阵键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用51单片机的矩阵键盘和LCD1602做一个密码锁

    文章目录 前言 一、工具准备 工具一:51单片机 工具二:LCD1602液晶显示屏 工具三:Keil软件 二、开始操作 1.LCD1602的程序调试 2.矩阵键盘的程序调试 3.密码锁程序设计 总结 51单片机是一种8位的可编程控制元件,广泛应用于各种工业生产、家电中。51单片机的厂家有很多,如

    2023年04月09日
    浏览(33)
  • C51单片机密码锁课程设计

    提示:文章写完后,目录可以自动加粗样式生成,如何生成可参考右边的帮助文档 微机原理及单片机应用技术的课程设计,C51设计一个密码锁; 要求:键盘上有0-9个数字按键,功能键:确认和取消等,可设置复合键。密码的位数及密码可以任意设定,,当输入数字和设置的密

    2023年04月10日
    浏览(36)
  • 基于AT89C51单片机的电子密码锁设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87760996?spm=1001.2014.3001.5503 源码获取 主要内容: (1)本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。 (2)设计开锁密码位六位密码的电子密码锁。 (3)能够LCD显示在密码正确

    2024年02月03日
    浏览(34)
  • 基于ATC89C51单片机的超市临时储物柜密码锁设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87855870?spm=1001.2014.3001.5503 源码获取 摘 要 随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的电子密码锁的设计研发与应用在很大程度上改善了人们的生活,尤其是在一些公共场合

    2024年02月08日
    浏览(33)
  • c51单片机16个按键密码锁源代码(富proteus电路图)

     注意了:这个代码你是没法直接运行的,但是如果你看得懂,随便改一改不超过1分钟就可以用

    2024年02月13日
    浏览(27)
  • 基于AT89C51单片机的8位密码锁仿真与实物制作

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/88657969?spm=1001.2014.3001.5503 源码获取 C 源码+仿真图+毕业设计+实物制作步骤+01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的

    2024年01月23日
    浏览(33)
  • 五、用矩阵键盘实现密码锁

    独立键盘与单片机进行连接时,每一个按键都需要单片机的一个I/O口,若某单片机系统较多按键,如果用独立按键便会占用较多的I/O口资源。为了尽可能节省I/O口线,引入矩阵键盘。 矩阵按键原理 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式

    2024年02月02日
    浏览(26)
  • 西电微原课设——矩阵式键盘数字密码锁设计

    一、课程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路连接能力。 初步掌握键盘扫描,密码修改和计时报警程序的编写方法。 掌握通过矩阵式键盘扫描实现密码锁功能的设计思路和实现方法。 二、课程设计内容 根据设定好的密码,采用4x4矩阵

    2024年02月13日
    浏览(52)
  • 基于51单片机的简易6位密码锁(数码管 led 矩阵)

      本文章是基于51单片机的简易密码锁,无掉电保护,所以没有用到I^C总线协议,仅用到数码管显示,矩阵键盘扫描,led显示。   本例程主要实现功能为:定义一个六位数的初始密码,用矩阵输入,输入正确后led被点亮,错误不点亮;摁下任意一个按键蜂鸣器发出声音,松下

    2024年02月11日
    浏览(29)
  • 51单片机-电子密码锁

    实物演示效果: https://www.bilibili.com/video/BV1xh4y1K7uV/?vd_source=6ff7cd03af95cd504b60511ef9373a1d 电子密码锁的主要功能 1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open! 2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。

    2024年01月17日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包