问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

矩阵键盘这个代码不懂了,

发布网友 发布时间:2022-04-24 03:36

我来回答

1个回答

热心网友 时间:2023-10-25 08:47

首先,第 一点,程序中有10ms的延时,采用了两个DELAY直接去用CPU延时,在正式的工程项目中,这绝对是不允许的。
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。

然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。
再说算法,最简单的做法应该是,
像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。

void Scan_Key(void)
{
if(read_status==0)
{
P1 = (P1 & 0x0F) | 0x01;Delay50us();
key_temp=(P1 & 0x0F) | 0x01;

}
else if(read_status==1)
{
P1 = (P1 & 0x0F) | 0x02;Delay50us();
key_temp=(P1 & 0x0F) | 0x02;

}
..........................
read_status++;
if(read_status>=4)read_status=0;

}

热心网友 时间:2023-10-25 08:47

首先,第 一点,程序中有10ms的延时,采用了两个DELAY直接去用CPU延时,在正式的工程项目中,这绝对是不允许的。
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。

然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。
再说算法,最简单的做法应该是,
像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。

void Scan_Key(void)
{
if(read_status==0)
{
P1 = (P1 & 0x0F) | 0x01;Delay50us();
key_temp=(P1 & 0x0F) | 0x01;

}
else if(read_status==1)
{
P1 = (P1 & 0x0F) | 0x02;Delay50us();
key_temp=(P1 & 0x0F) | 0x02;

}
..........................
read_status++;
if(read_status>=4)read_status=0;

}

热心网友 时间:2023-10-25 08:47

首先,第 一点,程序中有10ms的延时,采用了两个DELAY直接去用CPU延时,在正式的工程项目中,这绝对是不允许的。
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。

然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。
再说算法,最简单的做法应该是,
像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。

void Scan_Key(void)
{
if(read_status==0)
{
P1 = (P1 & 0x0F) | 0x01;Delay50us();
key_temp=(P1 & 0x0F) | 0x01;

}
else if(read_status==1)
{
P1 = (P1 & 0x0F) | 0x02;Delay50us();
key_temp=(P1 & 0x0F) | 0x02;

}
..........................
read_status++;
if(read_status>=4)read_status=0;

}

热心网友 时间:2023-10-25 08:47

首先,第 一点,程序中有10ms的延时,采用了两个DELAY直接去用CPU延时,在正式的工程项目中,这绝对是不允许的。
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。

然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。
再说算法,最简单的做法应该是,
像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。

void Scan_Key(void)
{
if(read_status==0)
{
P1 = (P1 & 0x0F) | 0x01;Delay50us();
key_temp=(P1 & 0x0F) | 0x01;

}
else if(read_status==1)
{
P1 = (P1 & 0x0F) | 0x02;Delay50us();
key_temp=(P1 & 0x0F) | 0x02;

}
..........................
read_status++;
if(read_status>=4)read_status=0;

}

热心网友 时间:2023-10-25 08:47

首先,第 一点,程序中有10ms的延时,采用了两个DELAY直接去用CPU延时,在正式的工程项目中,这绝对是不允许的。
其次,行列键盘扫描,一般都要求输出列加入上拉电阻,虽然单片机内部至有上拉电阻。

然后说到程序,这个程序如果在实际应用中,肯定会出现串键现像的。这个就不提了。
再说算法,最简单的做法应该是,
像使用动态数码管一样,先输出一行,读取全列,可以得到4个键值,再输出一行,同样读取全列,如此循环。

void Scan_Key(void)
{
if(read_status==0)
{
P1 = (P1 & 0x0F) | 0x01;Delay50us();
key_temp=(P1 & 0x0F) | 0x01;

}
else if(read_status==1)
{
P1 = (P1 & 0x0F) | 0x02;Delay50us();
key_temp=(P1 & 0x0F) | 0x02;

}
..........................
read_status++;
if(read_status>=4)read_status=0;

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么打电话给别人,显示无法接通? 我给对方打电话时,他那边响一声后就提示无法接通是什么情况? iPhone 6Plus相机远距离无法对焦,得用力摇几下才恢复,过会又模糊,什么... iphone6plus。近拍清楚,远拍模糊,怎么回事?聚焦不了。 怎么办~ 廉锦枫《廉锦枫》——剧情分析 我想取个好听的英文名字,而且希望是有意义的`拜托了各位谢谢 不锈钢公司取名带匠字文化深厚的企业名称大全 带匠字的厂名 公司名字为什么不可以带匠字 我儿子刚上一年级老师给我发微信时表现不错我怎么和老师沟通 矩阵键盘问题 51单片机中的矩阵键盘和独立键盘能同时用吗 使用ewb仿真矩阵键盘实验,要求有接线图,共16个按键 单片机矩阵键盘如何输入多位数?程序 矩阵键盘解决了使用少量端口实现多建输入的问题.那么矩阵形式还有哪些应用 矩阵键盘的识别方法 单片机中独立键盘和矩阵键盘如何一起使用 请用C语言写个程序说明,谢谢。 单片机编程中如何把矩阵键盘当成独立键盘使用?? keypad-phone的原理及应用 矩阵键盘和数码管的综合应用? 谁能给我准备一篇500字左右比较有趣的演讲稿.有两个互动的。 有没有内容新颖.有趣的演讲稿 CAD的命令历史记录怎么删除? 有创意演讲稿 求一篇演讲稿(高中生水平就可以),要求:三分钟,有趣;题材:红楼 一件有趣的事,演讲稿800到1000字 请问CAD工具条中部分命令图标怎么删除? 关于有趣的汉字的演讲稿 求一个关于校园趣事的演讲稿 六年级的竟竞选班长的演讲稿,要幽默,有趣的,谢谢! 怎样用3*4矩阵键盘,改变51单片机程序里的数据? 使用矩阵键盘将输入的4位数值显示在8位数码管中,并且进行由右至左的滚动显示? 你知道独立键盘和矩阵键盘同时使用怎么编程了吗??求教会我。。 单片机快速入门的目录 Excel应用:如何用excel做出分列和合并列 stc单片机能用8乘8的矩阵键盘吗? 如果使用4*4的16个按键的矩阵键盘,行线作为输入,列线作为输出。必须使用带有? Excel单元格拆分与合并求教,请高手指点! Excel怎么拆分和合并文本 太平人寿健康险种介绍 太平人寿健康险好吗 太平人寿健康险怎么样 太平人寿的健康住院医疗方面的保险怎么样?我想买份健康保险 太平人寿最新健康险 太平人寿保险健康险交20年的到交够期能提出来本金吗 听说太平人寿健康险本月底要退世 我的这笔记本华硕主板BIOS,双显卡如何设置独显优先 装独显后,华硕主板怎么设置? 华硕主板BIOS启动项怎么设置? 华硕笔记本开机时怎么设置显卡