您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 51单片机矩阵按键程序4-4
//以下程序都是在VC++6.0上调试运行过的程序,没有错误,没有警告。//单片机是STC89C52RC,但是在所有的5152单片机上都是通用的。51只是一个学习的基础平台,你懂得。//程序在关键的位置添加了注释。//用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推//1111111111111111111111111111111111111111111111111111111111111111111//1111111111111111111111111111111111111111111111111111111111111111111/********************************************************************************实验名:矩阵键盘实验*使用的IO:数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3*实验效果:按矩阵键盘分别显示在数码管上面显示十六进制的0到F。*注意:*******************************************************************************/#includereg51.h#defineGPIO_DIGP0#defineGPIO_KEYP1sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;unsignedcharcodeDIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsignedcharKeyValue;//用来存放读取到的键值voidDelay10ms();//延时10msvoidKeyDown();//检测按键函数/********************************************************************************函数名:main*函数功能:主函数*输入:无*输出:无*******************************************************************************/voidmain(void){LSA=0;//给一个数码管提供位选LSB=0;LSC=0;while(1){KeyDown();GPIO_DIG=DIG_CODE[KeyValue];}}/********************************************************************************函数名:KeyDown*函数功能:检测有按键按下并读取键值*输入:无*输出:无*******************************************************************************/voidKeyDown(void){chara=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下{Delay10ms();//延时10ms进行消抖if(GPIO_KEY!=0x0f)//再次检测键盘是否按下{//测试列GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d):KeyValue=2;break;case(0X0e):KeyValue=3;break;}//测试行GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70):KeyValue=KeyValue;break;case(0Xb0):KeyValue=KeyValue+4;break;case(0Xd0):KeyValue=KeyValue+8;break;case(0Xe0):KeyValue=KeyValue+12;break;}while((a50)&&(GPIO_KEY!=0xf0))//检测按键松手检测{Delay10ms();a++;}}}}/********************************************************************************函数名:Delay10ms*函数功能:延时函数,延时10ms*输入:无*输出:无*******************************************************************************/voidDelay10ms(void)//误差0us{unsignedchara,b,c;for(c=1;c0;c--)for(b=38;b0;b--)for(a=130;a0;a--);}
本文标题:51单片机矩阵按键程序4-4
链接地址:https://www.777doc.com/doc-2274377 .html