微控制器应用基础 逐列扫描法 逐列扫描法.pptxVIP

  • 118
  • 0
  • 约1.42千字
  • 约 10页
  • 2020-09-10 发布于北京
  • 举报

微控制器应用基础 逐列扫描法 逐列扫描法.pptx

;;;P2.0~P2.3端口送出列线电平,P0.0~P0.3端口读取行线电平;按键的键值(所处的行列位置)识别方法——逐列扫描法;按键的键值(所处的行列位置)识别方法——逐列扫描法;按键的键值(所处的行列位置)识别方法——逐列扫描法;while(1) //等待按键按下 { P2=0xf0; //向所有的列线上输出低电平 P0=0xff; i=P0; //读入行值 i=0x0f; //屏蔽掉高四位 if(i!=0x0f) //行值不为全1,有键按下 { delay10ms(); //延时消抖 i=P0; //再次读入行值 i=0x0f; //屏蔽掉高四位 if(i!=0x0f) //行值不为全1,说明有键按下 { scan_key(); //执行逐列扫描子程序判断键值 } } };unsigned char scan_key (void) { unsigned char i, temp,m,n; bit find=0; //有键按下标志位 P0=0xff; //P0口低四位做输入口,先输出全1 for(i=0;i4;i++) { P2=0xfei; //逐列送出低电平 temp=~P0; //读行值,并取反,全1--全0 temp=temp0x0f; //屏蔽掉行值高4位 if(temp!=0x00) //判断有无键按下,为0则无键按下,否则有键按下 { m=i; //列号i保存至m变量 find=1; //置找到按键标志 switch(temp) //判断哪一行有键按下,记录行号到n变量 { case 0x01:n=0;break; //第0行有键按下 case 0x02: n=1;break; //第1行有键按下 case 0x04: n=2;break; //第2行有键按下 case 0x08: n=3;break; //第3行有键按下 default:break;} } } if(find==0) return -1; //无键按下则返回-1 else return(n*4+m); //否则返回键值,键值=行号*4+列号 };4

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档