矩阵键盘扫描

根据矩阵键盘的原理图可知,当没有按键按下时,P1=0xf0;然后依次将P1^0~P1^3单独置低电平,其他置高,再扫描各列的状态,来判断是哪个按键按下,比如,将P1^0输出低电平,其他的引脚都输出高电平,即P1=0xfe,那么当第1行有按键按下时P1的相应值为,

1X1(01111110=0x7e) 1X2(10111110=0xbe) 1x3(11011110=0xde) 1X4(11101110=0xee)

将P1^1输出低电平,其他的引脚都输出高电平,即P1=0xfd,那么当第2行有按键按下时P1的相应值为,

2X1(01111101=0x7d) 2X2(10111101=0xbd) 2x3(11011101=0xdd) 2X4(11101101=0xed)

【摘要】:针对车位锁的使用方便性需求,提出了一种基于单片机的遥控车位锁设计方案。采用AT89S52单片机控制电机的正反转来实现车位锁的开启与闭合,基于KeilC51实现控制程序的研发。车主可在接近车位时通过无线遥控器控制车位锁动作,有效解决了传统车位锁在使用便利性方面的不足。

将P1^2输出低电平,其他的引脚都输出高电平,即P1=0xfd,那么当第2行有按键按下时P1的相应值为,

3X1(01111011=0x7b) 3X2(10111011=0xbb) 3x3(11011011=0xdb) 3X4(11101011=0xeb)

将P1^3输出低电平,其他的引脚都输出高电平,即P1=0xfd,那么当第2行有按键按下时P1的相应值为,

4X1(01110111=0x77) 4X2(10110111=0xb7) 4x3(11010111=0xd7) 4X4(11100111=0xe7)

下面通过一个来测试上面结果,

/*程序中用到了置位,如果检测第一行时置位为0xfe,是为了初始化一下P1口,初始化后*/#include <reg52.h>unsigned int Val;void Delay(unsigned int t);void main(void) { while (1) { if(P1 != 0xf0)//当没有按键按下时,P0=0xf0; { Delay(1500);  //去抖
            if(P1 != 0xf0)//表示按键还在按下,判断是哪个按键 { P1 = 0xfe; //置位为fe,检测第一行 1111 1110 //根据矩阵键盘原理图,当非第一行有按键按下时P1一直保持为0xfe
                if(P1 != 0xfe)  //将P1置为0xfe后,经过一个指令周期后如果它还是0xfe说明按下的键不在第一行 { Val = P1; Delay(1500); //去抖
                    while(P1 != 0xfe); //等待按键弹起
                    P0 = Val; } P1 = 0xfd;       //置位为fd,检测第二行 1111 1101
                if (P1 != 0xfd) { Val = P1; Delay(1500); while (P1 != 0xfd) P0 = Val; } P1 = 0xfb;       //置位为fb,检测第三行 1111 1011
                if (P1 != 0xfb) { Val = P1; Delay(1500); while (P1 != 0xfb) P0 = Val; } P1 = 0xf7;       //置位为f7,检测第四行 1111 0111
                if (P1 != 0xf7) { Val = P1; Delay(1500); while (P1 != 0xf7) P0 = Val; } } } } }void Delay(unsigned int t) { while (--t); }

> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >

本文结合传感器技术和微型单片机控制技术,结合现代农业的控制策略,设计了一套温室温、湿度监测系统,并重点对传感器组织网络进行研究。同时依据温室系统低功耗要求在硬件设计方面也进行了甄选。

生成海报
点赞 0

钟, 广林

我还没有学会写个人说明!

相关推荐

[教程]第4课:第一个单片机小程序

  上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯持续地闪烁,这就有一定的实用价值了,比如能把它当成汽车上的一个信号灯用了。怎样才能让灯持续地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10持续地输出高

单片机的经验之谈

记得在大学期间做了几个AT89S52单片机的东西,都是很基础的东西,呵呵,遇到一些很诡异的问题,今天刚好有点时间,想把一些经验和大家分享