C语言 4*4键盘扫描电路模块
#include <reg51.h>
#define uchar unsigned char //byte
#define uint unsigned int //word
void keyscan(); //函数声明
void fun0(); //定义每个按键的功能函数
void fun1();
void fun2();
void fun3();
void fun4();
void fun5();
void fun6();
void fun7();
void fun8();
void fun9();
void fun10();
void fun11();
void fun12();
void fun13();
void fun14();
void fun15();
/******************************************************************** ********
主程序
********************************************************************* *******/
void main(void)
{
while(1) //循环扫描
{
keyscan();
}
}
/******************************************************************** ********
按键功能函数 fun0~fun15
********************************************************************* *******/
void fun0(void)
{ P3=0x00; }
void fun1(void)
{ P3=0x01; }
void fun2(void)
{ P3=0x02; }
void fun3(void)
{ P3=0x03; } //fun4~fun15 略
/******************************************************************** ********
键盘扫描子程序 keyscan(); void keyscan(); //函数声明
***** 无返回值,直接执行子函数功能fun0(); void fun0();//函数声明
********************************************************************* *******/
void keyscan(void)
{ unsigned char i,j;
unsigned char n;
P1=0xfe; n=P1; n&=0xf0; //扫描第一行
if(n!=0xf0)
{ for(i=0;i<20;i++) for(j=0;j<250;j++); //延时
P1=0xfe; n=P1; n&=0xf0;
if(n!=0xf0)
{switch(n)
{
case(0x70): fun0(); break;//按键 0 的函数功能 - 替换P3=0x00;
case(0xb0): fun1(); break;//按键 1 的函数功能- 替换
case(0xd0): fun2(); break;//按键 2 的函数功能- 替换
case(0xe0): fun3(); break;//按键 3 的函数功能- 替换
}
}
}
P1=0xfd; n=P1; n&=0xf0; //扫描第二行
if(n!=0xf0)
{ for(i=0;i<20;i++) for(j=0;j<250;j++);//延时
P1=0xfd; n=P1; n&=0xf0;
if(n!=0xf0)
{switch(n)
{
case(0x70): P3=0x04; break;//按键 4 的函数功能- 替换 P3=0x04;
case(0xb0): P3=0x05; break;//按键 5 的函数功能- 替换
case(0xd0): P3=0x06; break;//按键 6 的函数功能- 替换
case(0xe0): P3=0x07; break;//按键 7 的函数功能- 替换
}
}
}
P1=0xfb; n=P1; n&=0xf0; //扫描第三行
if(n!=0xf0)
{ for(i=0;i<20;i++) for(j=0;j<250;j++); //延时
P1=0xfb; n=P1; n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0x70): P3=0x08; break;//按键 8 的函数功能- 替换P3=0x08; case(0xb0): P3=0x09; break;//按键 9 的函数功能- 替换
case(0xd0): P3=0x0A; break;//按键 A 的函数功能- 替换
case(0xe0): P3=0x0B; break;//按键 B 的函数功能- 替换
}
}
}
P1=0xf7; n=P1; n&=0xf0; //扫描第四行
if(n!=0xf0)
{ for(i=0;i<20;i++) for(j=0;j<250;j++); //延时
P1=0xf7; n=P1; n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0x70): P3=0x0C; break;//按键 C 的函数功能- 替换 P3=0x0C; case(0xb0): P3=0x0D; break;//按键 D 的函数功能- 替换
case(0xd0): P3=0x0E; break;//按键 E 的函数功能- 替换
case(0xe0): P3=0x0F; break;//按键 F 的函数功能- 替换
}
}
}
}。