单片机4*4矩阵键盘,求高手
#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintuch...
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]= {0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x77,0x7c, //8~b
0x39,0x5e,0x79,0x71};
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);}
// 分别给高四位 置0,同时检测低四位
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4]= {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j<4; j++)
{
P1= Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
_nop_();
_nop_();
_nop_();
temp= 0x01;
for(i=0; i<4; i++)
{
if(!(P1& temp))
{
return (i+j*4); //返回取得的按键
}
temp <<= 1;
}
}
}
void main()
{ uchar key=;
while(1)
{
P2=0; //数码管位码
key=keyscan();
P0=table[key];//数码管段码
}
}
问题1 为什么没按键按下时数码管显示4;
问题2 当按键按下时显示某个数,但松开按键时又再次显示4,如何让显示的数保持住,例如当按键按下时显示0,如何写程序让按键松开时一直显示0,再次有按键按下时显示其它数字, 展开
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]= {0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x77,0x7c, //8~b
0x39,0x5e,0x79,0x71};
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);}
// 分别给高四位 置0,同时检测低四位
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4]= {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j<4; j++)
{
P1= Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
_nop_();
_nop_();
_nop_();
temp= 0x01;
for(i=0; i<4; i++)
{
if(!(P1& temp))
{
return (i+j*4); //返回取得的按键
}
temp <<= 1;
}
}
}
void main()
{ uchar key=;
while(1)
{
P2=0; //数码管位码
key=keyscan();
P0=table[key];//数码管段码
}
}
问题1 为什么没按键按下时数码管显示4;
问题2 当按键按下时显示某个数,但松开按键时又再次显示4,如何让显示的数保持住,例如当按键按下时显示0,如何写程序让按键松开时一直显示0,再次有按键按下时显示其它数字, 展开
4个回答
东莞大凡
2024-08-07 广告
2024-08-07 广告
作为东莞市大凡光学科技有限公司的一员,我们深知Matlab圆点标定板在相机标定中的重要性。该标定板通过均匀分布的圆点,帮助精确计算相机参数,优化成像效果。Matlab强大的编程功能,使得我们能够灵活设计标定板,调整圆点大小、数量和分布,以满...
点击进入详情页
本回答由东莞大凡提供
展开全部
看看初值的设置,用锁存器可以保持住上次的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
松手等待。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询