为什么这个矩阵键盘扫描程序不行,下载到单片机后没有反应??求大神!!!

2019-07-15 16:24发布

#include <reg52.h>
#include "74hc595.h"
#include "boardinit.h"
#include "delay.h"
uchar juzhen_keyscan();

sbit weixuan=P2^6;         //数码管位选
sbit duanxuan=P2^5;         //数码管段选
unsigned char code shuzhi[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF};  // 共阳数码管显示数组 0-dp
uchar temp,num_juzhen;                                //         0          1           2    3         4          5           6    7         8           9   A         b         c          d           E        F        H         .           -
void main()
{
boardinit();//板卡硬件初始化
P3=0xff;  //P3口初始化
P2=0X00;  //P2口初始化
duanxuan=0;
weixuan =0;
P0=0XFF; //选通数码管所有位
weixuan=1;
weixuan=0;
duanxuan=1;//让数码管实时更新显示字符
P0=shuzhi[8];
delay(100);

while(1)
  {

   P0=shuzhi[juzhen_keyscan()];//送字符编码,到数码管显示。
  }
}
uchar juzhen_keyscan()
{
//*************************************************************************
                     
                         P3=0Xfe;//扫描第一行
             temp=P3;
                         if(temp!=0xfe)         //判断如果是否有按键按下
                         {
                            //delay(10);//去除抖动 10ms
                                temp=P3;
                                if(temp!=0xfe)
                                {                           
                                
                                  // while(!(P3==0xfe));
                                   switch(temp)
                                   {
                                     case 0x7e: num_juzhen=1;
                                                  break;
                                         case 0xbe: num_juzhen=2;
                                                   break;
                                         case 0xde: num_juzhen=3;
                                                  break;
                                         case 0xee: num_juzhen=4;
                                              break;
                                   }                                                                       
                                }
                         }     
//*************************************************************************        
//*************************************************************************
              P3=0Xfd;//扫描第二行
              temp=P3;
                         if(temp!=0xfd)         //判断如果是否有按键按下
                         {
                            //delay(10);//去除抖动 10ms
                                temp=P3;
                                if(temp!=0xfd)
                                {                           
                                   
                                   //while(!(P3==0xfd));
                                   switch(temp)
                                   {
                                    
                                         case 0x7d: num_juzhen=5;
                                                  break;
                                         case 0xbd: num_juzhen=6;
                                                   break;
                                         case 0xdd: num_juzhen=7;
                                                  break;
                                         case 0xed: num_juzhen=8;
                                              break;
                                   }                                                                       
                                }
                         }     
//*************************************************************************  
//*************************************************************************
              P3=0Xfb;//扫描第三行
              temp=P3;
                         if(temp!=0xfb)         //判断如果是否有按键按下
                         {
                            //delay(10);//去除抖动 10ms
                                temp=P3;
                                if(temp!=0xfb)
                                {                           
                                 
                                   //while(!(P3==0xfb));
                                   switch(temp)
                                   {
                                     case 0x7b: num_juzhen=9;
                                                  break;
                                         case 0xbb: num_juzhen=10;
                                                   break;
                                         case 0xdb: num_juzhen=11;
                                                  break;
                                         case 0xeb: num_juzhen=12;
                                              break;
                                   }                                                                       
                                }
                         }     
//*************************************************************************         
//*************************************************************************
              P3=0Xf7;//扫描第四行
              temp=P3;
                         if(temp!=0xf7)         //判断如果是否有按键按下
                         {
                            //delay(10);//去除抖动 10ms
                                temp=P3;
                                if(temp!=0xf7)
                                {                           
                                   
                                   //while(!(P3==0xf7));
                                   switch(temp)
                                   {
                                     case 0x77: num_juzhen=13;
                                                  break;
                                         case 0xb7: num_juzhen=14;
                                                   break;
                                         case 0xd7: num_juzhen=15;
                                                  break;
                                         case 0xe7: num_juzhen=16;
                                              break;
                                   }                                                                       
                                }
                         }
                  
        return num_juzhen;              
//*************************************************************************
}         

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。