#include<reg51.h>
#define uchar uns igned char
#define uint unsigned int
void main(void)
{
uchar key;
while(1) //调用键盘扫描函数,返回的键值送到变量key
{
key= keyscan( );
//延时
delay( );
}
void delay10ms (void) ;
//延时函数
{
uchar i;
for(i=0;i<200;i++){ }
}
//键盘扫描函数
uchar key scan (void)
{
//行扫描值
uchar code h;
//列扫描值
uchar code 1;
//P1.0~P1.3行线输出都为0,准备读列状态
P1=0xf0;
if((P1&f0) !=0xf0)
{
//如果P1.4~P1.7 不全为1,可能有键按下
//延时去抖动,延时函数参见例5-11
delay10ms (void) ;
//重读P1.4~P1.7,若还是不全为1,定有键按下
if( (P1&f0) !=0xf0)
// P1.0 行线置为0,开始行扫描
code h=0xfe;
while ((code_h&0x10) !=0xf0) ;//判断是否扫描到最后一行,若不是,继续扫描
{
//P1口输出行扫描值
P1= code h;
if( (P1&f0) !=0xf0) ;
{
//如果P1.4~P1.7 不全为1,该行有键按下
code_l=(P1&0xf010x0f) ;//保留P1口高4 位,低4 位变为1,作为列值
return( (~code_h )+ (~code_l) ); //键值=行扫描值+列扫描值,键值返主程序
/ /若该行无键按下,往下执行
}
else
code h= (code_h<<1) 10x01;
/行扫描值左移,准备扫描下一行
}}}
//无键按下,
return (0);}
返回0 |