久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

三個I/O口實現的3*4矩陣按鍵程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年03月26日   【字體:
自以為是神馬卻怎奈是一片浮云,卻想知道,倒底是神馬還是浮云。——劉翔。

uchar buttion(void)//按鍵讀寫程序
{uchar keybuf1=0x00,keybuf2=0x00,keysta=0x00;
bit zz=0,z12=0,z23=0,z31=0,
ff=0,f12=0,f23=0,f31=0,gnd=0;
//先讀三個接地按鍵
P6CR|=0xe0;//PORT端口控制寄存器
delay8nop();
keybuf1=PORT6&0xe0;
if(keybuf1!=0xe0)gnd=1;//有接地按鍵按下
else{
//正向導通測試
//測試Z12,12正向導通測試
P6CR&=0x9f;//置23口為輸出口  10011111
P6CR|=0x80;//置1口為輸入口  10000000
PORT6&=0xbf;//2口清0   10111111
PORT6|=0x20;//3口置1   00100000
delay8nop();
if(P67==0){z12=1;zz=1;keysta+=0x01;}//12正向導通

//測試Z23,23正向導通
P6CR&=0x5f;//置13口為輸出口  01011111
P6CR|=0x40;//置2口為輸入口  01000000
PORT6&=0xdf;//3口清0   11011111
PORT6|=0x80;//1口置1   10000000   
delay8nop();
if(P66==0){z23=1;zz=1;keysta+=0x02;}//23口正向導通
 
//測試Z31,31正向導通
P6CR&=0x3f;//置12口為輸出口  00111111     
P6CR|=0x80;//置3口為輸入口  00100000
PORT6&=0xbf;//1口清0   01111111   
PORT6|=0x40;//2口置1   01000000   
delay8nop();
if(P65==0){z31=1;zz=1;keysta+=0x04;}//31正向導通

//反向導通測試
//測試F12,12反向導通
P6CR&=0x5f;//置13口為輸出口  01011111 
P6CR|=0x40;//置2口為輸入口  01000000  
PORT6&=0xbf;//1口清0   01111111
PORT6|=0x20;//3口置1   00100000   
delay8nop();
if(P66==0){f12=1;ff=1;keysta+=0x08;}//12反向導通

//測試F23,23反向導通
P6CR&=0x9f;//置12口為輸出口  00111111    
P6CR|=0x80;//置3口為輸入口  00100000
PORT6&=0xbf;//2口清0   10111111
PORT6|=0x20;//3口置1   00100000
delay8nop();
if(P65==0){f12=1;ff=1;keysta+=0x10;}//23反向導通

//測試F31,31反向導通
P6CR&=0x9f;//置23口為輸出口  10011111  
P6CR|=0x80;//置1口為輸入口  10000000
PORT6&=0xdf;//3口清0   11011111
PORT6|=0x20;//2口置1
delay8nop();
if(P67==0){f31=1;ff=1;keysta+=0x20;}//31反向導通
}
//按鍵識別
if(gnd==1)  {P6CR|=0xe0;//PORT端口控制寄存器
    delay8nop();
    keybuf2=PORT6&0xe0;
    if(keybuf1==keybuf2)
      {switch(keybuf1)
        {case 0x80:return 0x01;break;
        case 0x40:return 0x04;break;
        case 0x20:return 0x08;break;
        default:return 0xff;
        }
      }
    else return 0xff;//接地三鍵按下
    }
  else//接地按鍵沒有按下
  {switch(keysta)
    {case 0x01://測試Z12,12正向導通測試
       P6CR&=0x9f;//置23口為輸出口  10011111
       P6CR|=0x80;//置1口為輸入口  10000000
       PORT6&=0xbf;//2口清0   10111111
       PORT6|=0x20;//3口置1   00100000
       delay8nop();
       if(P67==0)return 0x02;
       else return 0xff;break;       
    case 0x02://測試Z23,23正向導通
       P6CR&=0x5f;//置13口為輸出口  01011111
       P6CR|=0x40;//置2口為輸入口  01000000
       PORT6&=0xdf;//3口清0   11011111
       PORT6|=0x80;//1口置1   10000000   
       delay8nop();
       if(P66==0)return 0x05;
       else return 0xff;break;
    case 0x04://測試Z31,31正向導通
       P6CR&=0x3f;//置12口為輸出口  00111111     
       P6CR|=0x80;//置3口為輸入口  00100000
       PORT6&=0xbf;//1口清0   01111111   
       PORT6|=0x40;//2口置1   01000000   
       delay8nop();
       if(P65==0)return 0x08;
       else return 0xff;break;
    case 0x08://測試F12,12反向導通
       P6CR&=0x5f;//置13口為輸出口  01011111 
       P6CR|=0x40;//置2口為輸入口  01000000  
       PORT6&=0xbf;//1口清0   01111111
       PORT6|=0x20;//3口置1   00100000   
       delay8nop();
       if(P66==0)return 0x03;
       else return 0xff;break;
    case 0x10://測試F23,23反向導通
       P6CR&=0x9f;//置12口為輸出口  00111111    
       P6CR|=0x80;//置3口為輸入口  00100000
       PORT6&=0xbf;//2口清0   10111111
       PORT6|=0x20;//3口置1   00100000
       delay8nop();
       if(P65==0)return 0x06;
       else return 0xff;
    case 0x20://測試F31,31反向導通
       P6CR&=0x9f;//置23口為輸出口  10011111  
       P6CR|=0x80;//置1口為輸入口  10000000
       PORT6&=0xdf;//3口清0   11011111
       PORT6|=0x20;//2口置1
       delay8nop();
       if(P67==0)return 0x09;
       else return 0xff;
    case 0x09://測試Z12,12正向導通測試
       z12=0;    
       P6CR&=0x9f;//置23口為輸出口  10011111
       P6CR|=0x80;//置1口為輸入口  10000000
       PORT6&=0xbf;//2口清0   10111111
       PORT6|=0x20;//3口置1   00100000
       delay8nop();
       if(P67==0)z12=1;
       //測試F12,12反向導通
       f12=0;
       P6CR&=0x5f;//置13口為輸出口  01011111 
       P6CR|=0x40;//置2口為輸入口  01000000  
       PORT6&=0xbf;//1口清0   01111111
       PORT6|=0x20;//3口置1   00100000   
       delay8nop();
       if(P66==0)f12=1;
       if((z12==1)&(f12==1))return 0x0a;
       else return 0xff;break;
    case 0x12: //測試Z23,23正向導通
       z23=0;
       P6CR&=0x5f;//置13口為輸出口  01011111
       P6CR|=0x40;//置2口為輸入口  01000000
       PORT6&=0xdf;//3口清0   11011111
       PORT6|=0x80;//1口置1   10000000   
       delay8nop();
       if(P66==0)z23=1;
       //測試F23,23反向導通
       f23=0;
       P6CR&=0x9f;//置12口為輸出口  00111111    
       P6CR|=0x80;//置3口為輸入口  00100000
       PORT6&=0xbf;//2口清0   10111111
       PORT6|=0x20;//3口置1   00100000
       delay8nop();
       if(P65==0)f23=1;
       if((z23==1)&(f23==1))return 0x00;
       else return 0xff;
    case 0x24://測試Z31,31正向導通
       z31=0;
       P6CR&=0x3f;//置12口為輸出口  00111111     
       P6CR|=0x80;//置3口為輸入口  00100000
       PORT6&=0xbf;//1口清0   01111111   
       PORT6|=0x40;//2口置1   01000000   
       delay8nop();
       if(P65==0)z31=1;
       //測試F23,23反向導通
       P6CR&=0x9f;//置12口為輸出口  00111111    
       P6CR|=0x80;//置3口為輸入口  00100000
       PORT6&=0xbf;//2口清0   10111111
       PORT6|=0x20;//3口置1   00100000
       delay8nop();
       if(P65==0)f31=1;
       if((z31==1)&(f31==1))return 0x0b;
       else return 0xff;
    default:return 0xff;break;
    
    }
  }
  return 0xff;}
關閉窗口

相關文章

主站蜘蛛池模板: 中文字幕免费在线 | 欧美 日韩 国产 成人 在线 | 免费精品视频 | 一本一道久久a久久精品蜜桃 | 视频一区二区在线播放 | 黄色三级av| 久久久久久久国产精品 | 国产精品久久久久久久久久久久午夜片 | 中文字幕在线网站 | 欧美特黄一级片 | 中文字幕超清在线观看 | 一个色综合网 | 色多多在线观看 | 久久精品在线 | 色婷婷视频在线观看 | 视频一区二区在线 | 久久免费看片 | 亚洲一区在线免费观看 | 簧片在线免费观看 | 成人免费福利 | 五月天色综合 | www.伊人| 夜夜操天天干 | 看毛片网站 | 日韩黄色在线视频 | 国产欧美日韩一区 | 欧美日韩在线一区二区 | 成人aa | 黄色成人小视频 | 日韩色在线| 日本不卡视频在线观看 | 日韩在线免费观看视频 | 国产精品久久 | 亚洲精品二区 | 综合av| 欧美18免费视频 | 九九热在线视频 | 在线性视频 | 日本不卡免费 | 久久久久久久97 | 欧美日韩激情 |