【STC15单片机】简单的矩阵键盘代码

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

单片机型号说明:IAP15F2K61S2

新建工程时单片机型号选择STC15F2K60S2


51单片机矩阵键盘代码


void Delay_ms(int xms)	//15单片机延时函数
{
	int i;
	long a;
	for (i = xms; i > 0; i --)
		for(a = 810; a > 0; a --);
}

unsigned char KeyJZ_16(void)
{
	unsigned char KeyNumber;
	unsigned char temp;
	
	//第一列
	P3 = 0x7F;	//P37 = 0,其他是1,检测第一列
	temp = P3;	//按键检测,输入
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);	//延时20ms来确认是否真正按下按键
		temp = P3;
		temp &= 0x0F;//检测是第一列哪个按键
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0x7E : KeyNumber = 7; break;
				case 0x7D : KeyNumber = 6; break;
				case 0x7B : KeyNumber = 5; break;
				case 0x77 : KeyNumber = 4; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}
		
	}
	
	//第二列
	P3 = 0xBF;	
	temp = P3;
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);
		temp = P3;
		temp &= 0x0F;
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0xBE : KeyNumber = 11; break;
				case 0xBD : KeyNumber = 10; break;
				case 0xBB : KeyNumber = 9; break;
				case 0xB7 : KeyNumber = 8; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}	
	}
	
	//第三列
	P3 = 0xDF;	
	temp = P3;
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);
		temp = P3;
		temp &= 0x0F;
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0xDE : KeyNumber = 15; break;
				case 0xDD : KeyNumber = 14; break;
				case 0xDB : KeyNumber = 13; break;
				case 0xD7 : KeyNumber = 12; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}	
	}	
	
	//第四列
	P3 = 0xEF;	
	temp = P3;
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);
		temp = P3;
		temp &= 0x0F;
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0xEE : KeyNumber = 19; break;
				case 0xED : KeyNumber = 18; break;
				case 0xEB : KeyNumber = 17; break;
				case 0xE7 : KeyNumber = 16; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}	
	}
	
	return KeyNumber;
}

本程序烧写到51单片机应该是正常使用的,手头没有51开发板了,暂时没测试

这个程序烧写到15单片机,前两列按键不能正常使用


只需要在判断第一列按键那部分程序,前面加上P42 = 0;

在判断第二列按键那部分程序,前面加上P44 = 0;

因为这两列接线是P42和P44

【STC15单片机】简单的矩阵键盘代码

 

矩阵按键部分代码(新写法)


void Delay_ms(int xms)	//15单片机延时函数
{
	int i;
	long a;
	for (i = xms; i > 0; i --)
		for(a = 810; a > 0; a --);
}

unsigned char KeyJZ_16(void)
{
	unsigned char KeyNumber = 0;
	unsigned char temp;
	
	//第一列
	P3 = 0x7F;	//P37 = 0,其他是1,检测第一列
	P4 = 0xEF;	//P44 = 0; P42 = 1;	//15单片机第一列占用的引脚
	temp = P3;	//按键检测,输入
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);	//延时20ms来确认是否真正按下按键
		temp = P3;
		temp &= 0x0F;//检测是第一列哪个按键
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0x7E : KeyNumber = 7; break;
				case 0x7D : KeyNumber = 6; break;
				case 0x7B : KeyNumber = 5; break;
				case 0x77 : KeyNumber = 4; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}
		
	}
	
	//第二列
	P3 = 0xBF;
	P4 = 0xFB;	//P42 = 0; P44 = 1;	//15单片机第二列占用的引脚	
	temp = P3;
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);
		temp = P3;
		temp &= 0x0F;
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0xBE : KeyNumber = 11; break;
				case 0xBD : KeyNumber = 10; break;
				case 0xBB : KeyNumber = 9; break;
				case 0xB7 : KeyNumber = 8; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}	
	}
	
	//第三列
	P3 = 0xDF;	
	P4 = 0xFF;
	temp = P3;
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);
		temp = P3;
		temp &= 0x0F;
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0xDE : KeyNumber = 15; break;
				case 0xDD : KeyNumber = 14; break;
				case 0xDB : KeyNumber = 13; break;
				case 0xD7 : KeyNumber = 12; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}	
	}	
	
	//第四列
	P3 = 0xEF;	
	temp = P3;
	temp &= 0x0F;
	if(temp != 0x0F)
	{
		Delay_ms(20);
		temp = P3;
		temp &= 0x0F;
		if(temp != 0x0F)
		{
			temp = P3;
			switch (temp)
			{
				case 0xEE : KeyNumber = 19; break;
				case 0xED : KeyNumber = 18; break;
				case 0xEB : KeyNumber = 17; break;
				case 0xE7 : KeyNumber = 16; break;
			}
			while(temp != 0x0f)
			{
				temp = P3;
				temp &= 0x0F;	//因为这条,所以松手检测才写成 temp != 0x0f
			}
		}	
	}
	
	return KeyNumber;
}

测试键盘是否好使

#include <STC15F2K60S2.H>

unsigned char KeyNum;

void main()
{
	P2 = 0xA0; P0 = 0x00; P2 = 0x80; P0 = 0xFF;		//初始化
	while(1)
	{
		KeyNum = KeyJZ_16();
		if(KeyNum != 0)
		{
			P00 = !P00;	//每次按键按下P00状态都会取反
		}
			
	}
}

一定要加初始化呀,这次忘了,按键根本不好使文章来源地址https://www.toymoban.com/news/detail-449516.html

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

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

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

相关文章

  • 这才是单片机44矩阵键盘控制数码管最简单的写法

    这才是单片机4*4矩阵键盘控制数码管最简单的写法 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛/

    2023年04月19日
    浏览(45)
  • 【STC15单片机】动态数码管

    目录 点亮一位数码管 动态数码管 100s倒计时 动态数码管封装代码 段选:选中哪一位数码管 位选:选中的数码管要显示的内容 这是我对段选位选的理解,就是选中某个位置,赋值字形码,显示想要的图形 如果只想让第一个数码管显示,就只需要让com1 = 1即可,其他comx都=0 如

    2024年02月13日
    浏览(38)
  • STC15系列单片机学习4:串口通讯

    在使用单片机的串口前,得先知道所使用的单片机有几个串口,再结合你的硬件电路图来使用哪个串口。 以下是STC15各系列单片机的串口数量,STC15W4K32S4系列有4个串口 工作模式0:同步移位寄存器(官方建议初学者不学) 工作模式1:8位串口,波特率可变 工作模式2:9位串口

    2024年04月13日
    浏览(39)
  • 基于STC15系列单片机的智能门锁

    一、项目背景及功能需求 1.1项目背景 智能门锁是一种智能化、高效、安全的门锁,它可以实现密码识别开锁方式,极大地提高了门锁的安全性和便利性。随着人们对安全性的要求越来越高,智能门锁已经成为了现代家庭和企业的必备设备。因此,本项目旨在设计一款基于S

    2024年02月04日
    浏览(57)
  • STC15系列单片机学习6:外部中断

    外部中断,就是通过单片机IO引脚电平的变化触发的中断。 STC15系列单片机的外部中断源一共有5个,分别是外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、外部中断4(INT4);当然不是所有的STC15系列单片机都有着5个外部中断。 中断源 触发行为

    2024年03月12日
    浏览(142)
  • C51单片机-按下K0至K15,显示按键标号(4x4矩阵键盘电路,1个数码管)

    keil uVision4界面: proteus仿真界面:

    2024年02月04日
    浏览(44)
  • 二、51单片机 使用Proteus仿真掌握矩阵键盘(仿真及代码)

    学习内容:通过proteus实现对51单片机矩阵的掌握 1 、键盘接口设计。键盘——向单片机输入数据、命令等功能,是人机对话的主要手段。由若干按键按照一定规则组成。每一个按键实质上是一个按键开关,按构造可分为有触点开关按键和无触点按键。有触点开关按键常见的有

    2024年02月11日
    浏览(41)
  • STC15F100E单片机模拟串口

    STC15F100系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,新一代8051单片机,指令代码完全兼容传统8051,但是速度快6-12倍。 内部集成R/C时钟,5MHz~35MHz宽范围可设置,可以省掉外部晶振。 内部集成复位电路,可省掉外部复位电路。 6个通用I/O口,支持四种模式:准双

    2024年02月20日
    浏览(40)
  • STC15W104 8脚单片机串口下载程序

    单片机串口下载是一种常见的单片机程序下载方式,它通过串口线连接单片机的串口引脚和电脑的串口接口实现。下面是单片机串口下载的基本原理和操作方法: 确定下载模式:大多数单片机芯片都支持串口下载模式,需要在程序中设置下载模式。 连接串口:使用串口线连

    2024年02月13日
    浏览(39)
  • 微机课设 | 基于STC15单片机的简易数字密码锁设计

    在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。在安全技术防范领域,具有防盗报警功能的

    2024年02月04日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包