2401_85771931 2025-03-29 17:17 采纳率: 0%
浏览 10

51单片机4*4按键矩阵

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/18106ea65d3c442b9d629effb04a2eaf.png "#left"
大家帮忙分析一下,为什么P2=0XED的时候,数码管显示7,以下是源代码


#include <reg51.h>
sbit LE = P1^0;
unsigned char key_num;
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(unsigned int x)
{
        while(x--);
}
void display()
{
        P0=0X80;LE=1;LE=0;P0=seg[key_num / 10];delay(300);P0=0XFF;
        P0=0X40;LE=1;LE=0;P0=seg[key_num % 10];delay(300);P0=0XFF;
}

void main(void)
{
        while(1)
        {
                P2=0XEF;
                if(P2 == 0xee) key_num = 0;delay(300);
                if(P2 == 0xed) key_num = 1;delay(300);
                if(P2 == 0xeb) key_num = 2;delay(300);
                if(P2 == 0xe7) key_num = 3;delay(300);
              P2=0Xdf;
                if(P2 == 0xde) key_num =4;delay(300);
                if(P2 == 0xdd) key_num =5;delay(300);
                if(P2 == 0xdb) key_num =6;delay(300);
                if(P2 == 0xd7) key_num =7;delay(300);
                P2=0Xbf;
                if(P2 == 0xbe) key_num =8;delay(300);
                if(P2 == 0xbd) key_num =9;delay(300);
                if(P2 == 0xbb) key_num =10;delay(300);
                if(P2 == 0xb7) key_num =11;delay(300);
                P2=0X7F;
                if(P2 == 0x7e) key_num =12;delay(300);
                if(P2 == 0x7d) key_num =13;delay(300);
                if(P2 == 0x7b) key_num =14;delay(300);
                if(P2 == 0x77) key_num =15;delay(300);
                display();
        }



}
  • 写回答

3条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-29 18:04
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    首先,我们需要了解这段代码的功能。这段代码是通过按键输入来切换显示数码管上的数字,每个按键对应一个数字。按键P2的值在代码中用来判断按下了哪个按键,并根据按键的不同来改变变量key_num的值,然后通过display()函数来显示相应的数字。 当P2=0xED的时候,根据代码中的条件判断:
    if (P2 == 0xed) key_num = 1;
    

    可以看到,当P2等于0xED时,key_num被设置为1。而在display()函数中,P0 = seg[key_num % 10]的行为决定了显示的数字是key_num对10取余的值,即1 % 10 = 1。在seg[]数组中,seg[1] = 0xF9,这个值对应的是数码管显示的数字7。因此在这种情况下,数码管应该显示数字7。 如果要实现这一功能,可以将以上代码进行编译和烧录到具有数码管的开发板上,然后按下P2=0xED的按键,即可看到数码管上显示数字7。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月29日