×
单片机 > 单片机程序设计 > 详情

单片机一键多功能按键识别技术

发布时间:2020-05-30 发布时间:
|

在一些单片机系统中,有时候需要采用一些一键多功能的技术,这里我给大家介绍一下。开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1.3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。这样就实现了具有一键多功能的按键识别技术。简单吧

单片机系统板上硬件连线

把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0连接到L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。具体的电路图在单片机论坛http://www.51hei.com51区上有。欢迎发表您的高见。本文为郭子喻先生原创作品希望大家支持。


汇编源程序
ID          EQU 30H
SP1         BIT P3.7
L1          BIT P1.0
L2          BIT P1.1
L3          BIT P1.2
L4          BIT P1.3
            ORG 0
            MOV ID,#00H
START:      JB K1,REL
            LCALL DELAY10MS
            JB K1,REL
            INC ID
            MOV A,ID
            CJNE A,#04,REL
            MOV ID,#00H
REL:        JNB K1,$
            MOV A,ID
           CJNE A,#00H,IS0
            CPL L1
            LCALL DELAY
            SJMP START
IS0:       CJNE A,#01H,IS1
            CPL L2
            LCALL DELAY
            SJMP START
IS1:       CJNE A,#02H,IS2
            CPL L3
            LCALL DELAY
            SJMP START
IS2:       CJNE A,#03H,IS3
            CPL L4
            LCALL DELAY
            SJMP START
IS3:        LJMP START
DELAY10MS:    MOV R6,#20
LOOP1:       MOV R7,#248
             DJNZ R7,$
             DJNZ R6,LOOP1
             RET
DELAY:      MOV R5,#20
LOOP2:      LCALL DELAY10MS
            DJNZ R5,LOOP2
            RET
            END
7.C语言源程序
#include
unsigned char ID;
void delay10ms(void)
{
  unsigned char i,j;
  for(i=20;i>0;i--)
  for(j=248;j>0;j--);
}
void delay02s(void)
{
  unsigned char i;
  for(i=20;i>0;i--)
    {delay10ms();
    }
}
void main(void)
{ while(1)
    { if(P3_7==0)
        {delay10ms();
          if(P3_7==0)
            {
              ID++;
              if(ID==4)
                {
                  ID=0;
                }
              while(P3_7==0);
            }
        }
      switch(ID) 
        { case 0:
            P1_0=~P1_0;
            delay02s();
            break;
          case 1:
            P1_1=~P1_1;
            delay02s();
            break;
          case 2:
            P1_2=~P1_2;
            delay02s();
            break;
          case 3:
            P1_3=~P1_3;
            delay02s();
            break;
        }
    }



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机的抗干扰措施有哪些