C51矩阵键盘扫描程序
来源:互联网 发布:数据透视表常用快捷键 编辑:程序博客网 时间:2024/04/30 08:33
#include <reg52.h>#include <intrins.h>#define uchar unsigned charsfr KeyPort=0x90; //#define KeyPort P1 -----行在P1口低四位//sbit Key_C1=P1^4; //第1列接P1.4//sbit Key_C2=P1^5; //第2列接P1.5//sbit Key_C3=P1^6; //第3列接P1.6sfr Led=0x80; //#define Led P0--------P0口LEDvoid delay(uchar ms);void main(){ uchar totle=0;Led=0xff;while(1){KeyPort=0x6f; //0110 1111if(KeyPort!=0x6f){delay(10);if(KeyPort!=0x6f){switch(KeyPort){case 0x6e: //0110 1110//Led=_crol_(Led,1);//Led=1;totle=totle+0x01;Led=totle;break;case 0x6d: //0110 1101//Led=_crol_(Led,4);//Led=0x4;totle=totle+0x4;Led=totle;break;case 0x6b: //0110 1011//Led=_crol_(Led,7);//Led=0x7;totle=+totle+0x7;Led=totle;break;case 0x67: //0110 0111//Led=_crol_(Led,10);totle=0x00;Led=totle;break;}while(KeyPort!=0x6f);}}KeyPort=0x5f; //0101 1111if(KeyPort!=0x5f){delay(10);if(KeyPort!=0x5f){switch(KeyPort){case 0x5e: //0101 1110//Led=_crol_(Led,2);//Led=0x2;totle=totle+0x2;Led=totle;break;case 0x5d: //0101 1101//Led=_crol_(Led,5);//Led=0x5;totle=totle+0x5;Led=totle;break;case 0x5b: //0101 1011//Led=_crol_(Led,8);//Led=0x8;totle=totle+0x8;Led=totle;break; case 0x57: //0101 0111//Led=_crol_(Led,11);totle=totle+0x0;Led=totle; break;}while(KeyPort!=0x5f);}}KeyPort=0x3f; //0011 1111if(KeyPort!=0x3f){delay(10);if(KeyPort!=0x3f){switch(KeyPort){case 0x3e: //0011 1110//Led=_crol_(Led,3);//Led=0x3;totle=totle+0x3;Led=totle;break;case 0x3d: //0011 1101//Led=_crol_(Led,6);totle=totle+0x6;Led=totle;break;case 0x3b: //0011 1011//Led=_crol_(Led,9);//Led=0x9;totle=totle+0x9;Led=totle;break;//case 0x37: //0011 0111//Led=_crol_(Led,12);//break;}while(KeyPort!=0x3f);}}}}void delay(uchar ms){uchar i;for(;ms>0;ms--)for(i=0;i<244;i++);}