2020-10-10 独立按键+按键矩阵

程序会在最后的部分:

敲重点:

1、注意标志位利用,采用设置标志位使得按键能够在松开时,数码管瞬间变化。

if(flag == 0&&key0 ==0)

    {

       
flag = 1;

    }

   
if(flag ==1&&key0 == 1)     
//标志位使得按键松开时数码管变化

    {

       
num++;

       
flag =0;

}

2、按键的使用是指在按键按下时产生一个低电位的信号,单片机接受这种信号,来实现响应的功能

3、截图没有复位和和晶振部分,但在实际连接过程中必不可少,因为在proteus中它默认就给了51芯片复位以及晶振的部分。



#include<reg51.h>

sbit key0 = P1^0;

unsigned char s[] = {  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned int num = 0,flag = 0;

 

void delay(unsigned int n)

{

   
unsigned int i = 0,j = 0;

   
for(i = 0;i<n;i++)

    {

       
for(j = 0;j<120;j++);

    }

}

void key ()

{

   
/*if(key0 == 0)

   
{   

       
delay(200);

       
if(key0 == 0)

           
{

                num++;           //此种方法在按键持续按住时,数码管会一直发生变化

           
}

   
}*/

   
if(flag == 0&&key0 ==0)

    {

       
flag = 1;

    }

   
if(flag ==1&&key0 == 1)     
//标志位使得按键松开时数码管变化

    {

       
num++;

       
flag =0;

    }

}

void seg()

{

     
P2 =s[num];

     
if (num == 10)

     
{

       
num = 0;

     
}

}

void main()

{

   
while(1)

   
{    

       
key();

       
seg();

        

    }

}

在这里插入图片描述



矩阵按键:采用横和列来确定矩阵中开关的具体位置。

程序如下:

#include<reg51.h>

unsigned char s[] = {  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned int num = 99;

 

void delay(unsigned int n)

{

   
unsigned int i = 0,j = 0;

   
for(i = 0;i<n;i++)

    {

       
for(j = 0;j<120;j++);

    }

}

 

void key_scan()

{

              unsigned
int temp , temp0 = 0,temp1 = 0;

              P1
= 0xf0;

              if(P1
!= 0xf0)

              {

                     delay(20);

                     temp0
= P1;

                     P1  = 0x0f;

                     if(P1
!= 0x0f)

                     {

                                   delay(20);

                                   temp1
= P1;

                     }

                     

              }

              temp
= temp0+temp1;

              if(temp
== 0xee )//仅仅设置了前四个按键分别控制0、1、2、3

              {

                            num
= 0;

              }

              if(temp
== 0xde )

              {

                            num
= 1;

              }

              if(temp
== 0xBe )

              {

                            num
= 2;

              }

              if(temp
== 0x7e )

              {

                            num
= 3;

              }

}

 

void display()

{

              P2
= s[num];

}

void main()

{

   
while(1)

   
{    

                            key_scan();

                            display();

       


    }

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值