求,基于51单片机的4*6键盘扫描C程序.

2024-12-20 22:32:45
推荐回答(2个)
回答1:

/********************************************************************
* 描述 : 该文件实现了 4 * 4 键盘的试验。两位通过数码管来显示当前的按键值。
*********************************************************************/
#include
#include#define uint unsigned int
#define uchar unsigned charuchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
uchar x,j;
for(j=0;j for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Keyscan()
* 功能 : 实现按键的读取。* 输入 : 无
* 输出 : 按键值
***********************************************************************/
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;
}
}
}/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar Key_Value; //读出的键值
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0)
{
Delay_1ms(15); //按键消抖
if(P1 != 0xf0)
{
Key_Value = Keyscan();
}
}
P0 = table[Key_Value / 10]; //显示高位键值
P2 = 0x00;
Delay_1ms(5);
P0 = table[Key_Value % 10]; //显示低位键值
P2 = 0x04;
Delay_1ms(5);
}
}

回答2:

帮你设计