矩阵键盘这个代码不懂了,
发布网友
发布时间: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;
}