原理图:
原理:
和独立键盘相似
/******************************************************************************* * 实 验 名 : 矩阵键盘实验 * 使用的IO : 数码管使用P0 矩阵键盘使用P3 * 实验效果 : 显示独立键盘的按键值 * 注 意 : *******************************************************************************/ #include <reg52.h> #include <intrins.h> #define GPIO_LED P2 #define GPIO_DIG P0 #define GPIO_KEY P1 #define uint unsigned int #define uchar unsigned char sbit K1=P3^1; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; uchar KEY_VALUE; unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void Delay10ms(); void KeyDown(); void main() { LSA=0;LSB=0;LSC=0; while(1) { KeyDown(); GPIO_DIG=DIG_CODE[KEY_VALUE]; } } void Delay10ms() { uchar i=38,j=130; while(i--) while(j--); } void KeyDown() { char n=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f) { Delay10ms(); if(GPIO_KEY!=0x0f) { GPIO_KEY=0x0f; switch(GPIO_KEY) { case(0x07):KEY_VALUE=0;break; case(0x0b):KEY_VALUE=1;break; case(0x0d):KEY_VALUE=2;break; case(0x0e):KEY_VALUE=3;break; } GPIO_KEY=0xf0; switch(GPIO_KEY) { case(0x70):KEY_VALUE+=0;break; case(0xb0):KEY_VALUE+=4;break; case(0xd0):KEY_VALUE+=8;break; case(0xe0):KEY_VALUE+=12;break; } while((n<50)&&(GPIO_KEY!=0xf0)) { Delay10ms(); ++n; } } } }
时间: 2024-10-07 06:34:23