通过4*4的矩阵键盘,控制数码管显示0-F
原理:
先设置某一列为低电平,这样如果这一列有按键被按下,这样就会两边都是低电平,就相当于闭合。这样就能检测出来了。循环三次就行了
代码乱码了 看附件吧
单片机源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- sbit L1=P1^0;
- sbit L2=P1^1;
- sbit L3=P1^2;
- sbit L4=P1^3;
- uchar dis[16]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- unsigned int time;
- //延时函数
- delay(time)
- {
- unsigned int j;
- for(j=0;j<time;j++)
- {}
- }
- //主函数
- main( )
- {
- uchar temp;//定义临时变量
- uchar i;
- while(1)
- {
- P1=0xef; //先把第一行置于低电位P1.4=0, P1.5-P1.7=1
- for(i=0;i<=3;i++)
- {
- if (L1==0) P0=dis[i*4+0]; //判断第一列是否有按键被按下,如果被按下,则结果可能是 0 4 8 c
-
- if (L2==0) P0= dis[i*4+1]; //同样的 判断第二列是否有按键按下 结果是....
-
- if (L3==0) P0= dis[i*4+2];
-
- if (L4==0) P0= dis[i*4+3];
-
- delay(500);
- temp=P1;
- temp=temp | 0x0f;//保持P1.0-P1.3端口不变
-
- temp=temp<<1; //0xef-->0xcf 也就是保持第二列为低电平
- temp=temp | 0X0f; //保持P1.0-P1.3的高电位(若被按下,则立即变为低电位)
- P1=temp; //换为第二行扫描,继续下一轮
- }
- }
- }
复制代码
Keil代码下载:
keil.7z
(63.29 KB, 下载次数: 14)
|