蓝桥杯单片机第二天按键,矩阵键盘

按键,矩阵键盘

按键

独立按键

独立按键按照小蜜蜂的题来做。在这里插入图片描述
首先还是先看看原理图需要用到Y4。
在这里插入图片描述
首先把跳帽接对,然后开始写程序

#include <STC15F2K60S2.H>

sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;

sbit key7=P3^0;
sbit key6=P3^1;
sbit key5=P3^2;
sbit key4=P3^3;

void Delay1ms()		//@12.000MHz由isp生成的1ms延时代码
{
	unsigned char i, j;
	i = 12;
	j = 169;
	do
	{
		while (--j);
	} while (--i);
}
void delayms(unsigned int ms)
{
    unsigned int i;
    for(i=0;i<ms;i++)
    {
        Delay1ms();
    }
}

void hc38(unsigned int i)
{
    if(i==4)
    {
        P2=(P2&0x1f)|0x80;
    }
    else if(i==5)//1010
    {
        P2=(P2&0x1f)|0xa0;
    }
    else if(i==6)//1100
    {
        P2=(P2&0x1f)|0xc0;
    }
    else if(i==7)//1110
    {
        P2=(P2&0x1f)|0xe0;
    }
}
void key()
{
    if(key4==0)
    {
        delayms(20);//消抖,时间按实际情况来定
        if(key4==0)
        {
            led7=0;
            while(key4==0);//等待松开
            led7=1;
        }  
    }
    if(key5==0)
    {
        delayms(20);
        if(key5==0)
        {
            led6=0;
            while(key5==0);
            led6=1;
        }
       
    }
    if(key6==0)
    {
        delayms(20);
        if(key6==0)
        {
            led5=0;
            
        }
        while(key6==0);
            led5=1;

    }
    if(key7==0)
    {
        delayms(20);
        if(key7==0)
        {
            led4=0;
        }
        while(key7==0);
            led4=1;
        
    }
}
void main()
{
    hc38(4);
    while(1)
    {
        key();
    }
}

矩阵键盘

用led灯来显示键盘说按下的数字,先调整跳帽

#include <STC15F2K60S2.H>

void Delay1ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 12;
	j = 169;
	do
	{
		while (--j);
	} while (--i);
}
void delay(unsigned int ms)
{
    unsigned int i;
    for(i=0;i<ms;i++)
    {
        Delay1ms();
    }
}
void hc38(unsigned int num)
{
    if(num==4)
    {
        P2=(P2&0x1f)|0x80;
    }
    else if(num==5)
    {
        P2=(P2&0x1f)|0xa0;
    }
    else if(num==6)
    {
        P2=(P2&0x1f)|0xc0;
    }
    else if(num==7)
    {
        P2=(P2&0x1f)|0xe0;
    }
}
int sqkey()//仿照江科大写的,矩阵键盘
{
    P3=0xff;
    P30=0;
    if(P37==0){delay(20);while(P37==0);return 1;}
    if(P36==0){delay(20);while(P36==0);return 2;}
    if(P35==0){delay(20);while(P35==0);return 3;}
    if(P34==0){delay(20);while(P34==0);return 4;}
    P3=0xff;
    P31=0;
    if(P37==0){delay(20);while(P37==0);return 5;}
    if(P36==0){delay(20);while(P36==0);return 6;}
    if(P35==0){delay(20);while(P35==0);return 7;}
    if(P34==0){delay(20);while(P34==0);return 8;}
    P3=0xff;
    P32=0;
    if(P37==0){delay(20);while(P37==0);return 9;}
    if(P36==0){delay(20);while(P36==0);return 10;}
    if(P35==0){delay(20);while(P35==0);return 11;}
    if(P34==0){delay(20);while(P34==0);return 12;}
    P3=0xff;
    P33=0;
    if(P37==0){delay(20);while(P37==0);return 13;}
    if(P36==0){delay(20);while(P36==0);return 14;}
    if(P35==0){delay(20);while(P35==0);return 15;}
    if(P34==0){delay(20);while(P34==0);return 16;}
}
void main()
{
    unsigned int number;
    number=0;
    hc38(4);
    while(1)
    {
        number=sqkey();
        P0=~number;//用led来显示数字
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值