蓝桥杯单片机S4-S11按键按下不能显示

#include<reg51.h>
#include<intrins.h>

typedef unsigned char uchar;
uchar key_value = 16;
uchar code SEG_TAB[16]= {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar code KEY_CODE_TAB[16]={0xee,0xde,0xbe,0x7e, 
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b, 
0xe7,0xd7,0xb7,0x77};

void Delayms(uchar k)
{    
    unsigned char i,j;
    for(;k>0;k--)
        for(i=0;i<10;i++)     
            for (j=0;j<48;j++)    
                {;}
}


void scan_key(void)
{
    unsigned char x,y,key_code,i;
    P3=0xf0;
    x = P3&0xf0;
    if(x!=0xf0)
    {
        Delayms(10);   //消抖

        x = P3&0xf0;
        if(x!=0xf0)      
        {
            x=P3&0xf0;                    //读取P3口数据
            P3=0x0f; 
            y=P3&0x0f;
            key_code=x|y;

            while(y!=0x0f)
                y=P3&0x0f;       //wait to release key
            for(i=0;i<16;i++)       //识别是哪个按键
            {
                if(key_code== KEY_CODE_TAB[i])
                    key_value =i;
            }
        }
    }      
}


void deal_key(void)
{
    if(key_value < 16)
    {
        P0 = SEG_TAB[key_value];
        Delayms(1);
    }
}


//数码管函数
void display(void)
{
    P0 = 0x80;  //10000000
    P2 = 0xC0;    //11000000                   //位选---个位
    P2 = 0x00;

    P0 = SEG_TAB[key_value %10];    //段码---个位
    P2 = 0xE0;  //11100000
    P2 = 0x00;
    Delayms(1);
    
    P0 = 0x40;    //01000000                   //位选---十位
    P2 = 0xC0;
    P2 = 0x00;
    
    P0 = SEG_TAB[key_value /10];    //段码---十位
    P2 = 0xE0;
    P2 = 0x00;
    Delayms(1);
}

void main()
{
    while(1)
    {
        scan_key();
        deal_key();
        display();
    }
}

单片机没坏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值