久久久久久久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;}
關閉窗口

相關文章

主站蜘蛛池模板: 精品国产一区二区三区免费 | 欧美一二三四成人免费视频 | 久久国产精彩视频 | 中文字幕日韩专区 | 99久久日韩精品免费热麻豆美女 | 免费观看羞羞视频网站 | www.色五月.com | 中国美女一级黄色片 | 精品视频一二区 | 亚洲在线高清 | 午夜免费 | 久久久国产精品视频 | 欧美日韩一区在线观看 | 精品国产乱码久久久久久闺蜜 | 色永久| 欧美视频第三页 | 日韩免费一区二区 | 91视频电影 | 精品久久影院 | 精品久久精品 | 成人高清视频在线观看 | 欧美一级黑人aaaaaaa做受 | 九九综合九九 | 成人av一区二区在线观看 | 久久久久久久久久久久久9999 | 波多野结衣一区二区三区 | 久久人人爽人人爽人人片av免费 | 欧美99| 亚洲在线中文字幕 | 天天天天天天操 | 中文字幕影院 | 久久久亚洲 | 国产成人久久 | 黑人巨大精品欧美一区二区一视频 | 尹人av| 99re热这里只有精品视频 | 在线成人免费视频 | 中文天堂在线一区 | 亚洲精品一区二区三区蜜桃久 | 中文字幕蜜臀 | 国产精品一区二区福利视频 |