键盘扫描
- 格式:docx
- 大小:15.92 KB
- 文档页数:5
//令扫描线路全部为零,不分行扫描判断
#include
#define uchar unsigned char //代码转换无符号字符
#define uint unsigned int //代码转换 无符号整型
uchar code
table[]={0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00}
*/
//定义字符型
uintkey_num;
uchar key;
uint row;
uint col;
uint high_8;
uint low_8;
//定义延时程序
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//判断按键
void main(void)
{
//开始扫描
while(1)
//一直处于扫描中
{
//P1=0xff; //表示键盘行共5行 P1的高5位变化,其余为高
//P1^3==0; //判断第一行
P1=0xf7;
P2=0xff;
if(P2!=0xff)
{
delayms(5); //延时20毫秒
if(P2!=0xff) //再次判断
{
row=P1;
P1=0xf7;
high_8=(uint)row<<8; //左移8位为0xf700
col=P2;
low_8=col; //为0x00P2
// low_8=P2;
key_num=high_8|low_8;
switch(key_num)
{
case 0xf7fe: key=0;break;
case 0xf7fd: key=1;break;
case 0xf7fb: key=3;break;
case 0xf7f7: key=4;break;
case 0xf7ef: key=5;break;
case 0xf7df: key=6;break;
case 0xf7bf: key=7;break;
}
P0=table[key];
}
}
//扫描第二行
P1=0xef;
P2=0xff;
if(P2!=0xff)
{
delayms(5); //延时20毫秒
if(P2!=0xff) //再次判断
{
row=P1;
P1=0xef;
high_8=(uint)row<<8; //左移8位为0xf700
col=P2;
low_8=col; //为0x00P2
// low_8=P2;
key_num=high_8|low_8;
switch(key_num)
{
case 0xeffe: key=0;break;
case 0xeffd: key=1;break;
case 0xeffb: key=3;break;
case 0xeff7: key=4;break;
case 0xefef: key=5;break;
case 0xefdf: key=6;break;
case 0xefbf: key=7;break;
}
P0=table[key];
}
}
//扫描第三行
P1=0xdf;
P2=0xff;
if(P2!=0xff)
{
delayms(5); //延时20毫秒
if(P2!=0xff) //再次判断
{
row=P1;
P1=0xdf;
high_8=(uint)row<<8; //左移8位为0xf700
col=P2;
low_8=col; //为0x00P2
// low_8=P2;
key_num=high_8|low_8;
switch(key_num)
{
case 0xdffe: key=0;break;
case 0xdffd: key=1;break;
case 0xdffb: key=3;break;
case 0xdff7: key=4;break;
case 0xdfef: key=5;break;
case 0xdfdf: key=6;break;
case 0xdfbf: key=7;break;
}
//P0=table[key] ; 没有反应
}
}
//第4行
P1=0xb7;
P2=0xff;
if(P2!=0xff)
{
delayms(5); //延时20毫秒
if(P2!=0xff) //再次判断
{
row=P1;
P1=0xbf;
high_8=(uint)row<<8; //左移8位为0xf700
col=P2;
low_8=col; //为0x00P2
key_num=high_8|low_8;
switch(key_num)
{
case 0xbffe: key=0;break;
case 0xbffd: key=1;break;
case 0xbffb: key=3;break;
case 0xbff7: key=4;break;
case 0xbfef: key=5;break;
case 0xbfdf: key=6;break;
case 0xbfbf: key=7;break;
}
}
}
//扫描第五行
P1=0x7f;
P2=0xff;
if(P2!=0xff)
{
delayms(5); //延时20毫秒
if(P2!=0xff) //再次判断
{
row=P1;
P1=0x7f;
high_8=(uint)row<<8; //左移8位为0xf700
col=P2;
low_8=col; //为0x00P2
// low_8=P2;
key_num=high_8|low_8;
switch(key_num)
{
case 0x7ffe: key=0;break;
case 0x7ffd: key=1;break;
case 0x7ffb: key=3;break;
case 0x7ff7: key=4;break;
case 0x7fef: key=5;break;
case 0x7fdf: key=6;break;
case 0x7fbf: key=7;break;
}
}
}
}
}