微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求解:代码(只写了S1~S4)下载到开发板之后只有第一个数码管显示0,按下S1~S4没反应,但按下S8数码管灭,松开恢复。

求解:代码(只写了S1~S4)下载到开发板之后只有第一个数码管显示0,按下S1~S4没反应,但按下S8数码管灭,松开恢复。

时间:10-02 整理:3721RD 点击:
/**************************************************************************************
*                              矩阵按键实验                                                                                                  *
实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字
                        S1-S4:0-3
                        S5-S8:4-7
                        S9-S12:8-B
                        S13-S16:C-F。
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                                                                                                  
***************************************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar key;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code printf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint x)
{
        while(x--);
}
void keyscan()
{
        uchar temp;
        P3=0x7f;
        temp=P3;
        temp=temp&0x0f;
        if(temp!=0x0f)
        {
                delayms(50);
                if(temp!=0x0f)
                {
                        switch(temp)
                        {
                                case(0x77):  key=0;  break;
                                case(0x7b):  key=1;  break;
                                case(0x7d):  key=2;  break;
                                case(0x7e):  key=3;  break;
                        }
                        while(temp!=0x0f)
                        {
                                temp=P3;
                                temp=temp&0xf7;
                        }
                }
        }       
}
void main()
{
        LSA=0;
        LSB=0;
        LSC=0;
        P0=printf[0];
        while(1)
        {
                keyscan();
                P0=printf[key];
        }
}
       

看一下位选有没有问题

位选是没有问题的 是选中第一个数码管

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top