标题: 单片机没有任何错误警告实验效果完全没有,矩阵按键的 [打印本页]

作者: ylthpl    时间: 2023-2-8 12:55
标题: 单片机没有任何错误警告实验效果完全没有,矩阵按键的
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned  int u16;
#define KEY_MATRIX_PORT P1
#define SMG_PORT P0
u8 gsmg_code[17]={0x3f,0x0b,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay_10us(u16 ten_us)
{
        while(ten_us--);
}
u8 key_matrix(void)
{
        u8 key_is=0;
         KEY_MATRIX_PORT=0xf7;
         if( KEY_MATRIX_PORT!=0xf7)
         {         delay_10us(1000);
                 switch( KEY_MATRIX_PORT)
                {
                        case 0x77:key_is=1;break;
                        case 0xb7:key_is=5;break;
                        case 0xd7:key_is=9;break;
                        case 0xe7:key_is=13;break;
                }         
         }
         while(KEY_MATRIX_PORT!=0xf7);
         return key_is;
         KEY_MATRIX_PORT=0xfb;
         if( KEY_MATRIX_PORT!=0xfb)
         {          delay_10us(1000);
                 switch( KEY_MATRIX_PORT)
                {
                        case 0x7b:key_is=2;break;
                        case 0xbb:key_is=6;break;
                        case 0xdb:key_is=10;break;
                        case 0xeb:key_is=14;break;
                }         
         }
         while(KEY_MATRIX_PORT!=0xfb);
         return key_is;
KEY_MATRIX_PORT=0xfd;
         if( KEY_MATRIX_PORT!=0xfd)
         {           delay_10us(1000);
                 switch( KEY_MATRIX_PORT)
                {
                        case 0x7d:key_is=3;break;
                        case 0xbd:key_is=7;break;
                        case 0xdd:key_is=11;break;
                        case 0xed:key_is=15;break;
                }         
         }
         while(KEY_MATRIX_PORT!=0xfd);
         return key_is;
         KEY_MATRIX_PORT=0xfe;
         if( KEY_MATRIX_PORT!=0xfe)
         {           delay_10us(1000);
                 switch( KEY_MATRIX_PORT)
                {
                        case 0x7e:key_is=4;break;
                        case 0xbe:key_is=8;break;
                        case 0xde:key_is=12;break;
                        case 0xee:key_is=16;break;
                }         
         }
         while(KEY_MATRIX_PORT!=0xfe);
         return key_is;
}                                          
void main()
{        u8 key=0;
        while(1)
        {
                key=key_matrix();
               
                SMG_PORT=gsmg_code[key-1];
        }
}


作者: wulin    时间: 2023-2-8 14:32
  1. #include <REG51.H>
  2. typedef unsigned char u8;
  3. typedef unsigned  int u16;
  4. #define KEY_MATRIX_PORT P1
  5. #define SMG_PORT P0
  6. u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,
  7. 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  8. 0x39,0x5e,0x79,0x71,0x40};
  9. u8 key_is=16;

  10. void delay_10us(u16 ten_us)
  11. {
  12.         while(ten_us--);
  13. }
  14. void  key_matrix(void)
  15. {
  16.         static bit a=0;
  17.         KEY_MATRIX_PORT=0xf0;
  18.         if(KEY_MATRIX_PORT!=0xf0)
  19.         {
  20.                 delay_10us(1000);
  21.                 if(KEY_MATRIX_PORT!=0xf0 && a==0)
  22.                 {
  23.                         a=1;
  24.                         switch(KEY_MATRIX_PORT)
  25.                         {
  26.                                 case(0Xe0):key_is = 0;break;
  27.                                 case(0Xd0):key_is = 1;break;
  28.                                 case(0Xb0):key_is = 2;break;
  29.                                 case(0X70):key_is = 3;break;
  30.                         }         
  31.                         KEY_MATRIX_PORT=0x0f;
  32.                         switch(KEY_MATRIX_PORT)
  33.                         {
  34.                                 case(0X0e):key_is += 0;break;
  35.                                 case(0X0d):key_is += 4;break;
  36.                                 case(0X0b):key_is += 8;break;
  37.                                 case(0X07):key_is +=12;break;
  38.                         }
  39.                 }
  40.         }
  41.         else                                //按键抬起
  42.         {
  43.                 a=0;
  44.         }
  45. }
  46. void main()
  47. {
  48.         while(1)
  49.         {
  50.                 key_matrix();
  51.                 SMG_PORT=gsmg_code[key_is];
  52.         }
  53. }
复制代码



作者: lkc8210    时间: 2023-2-8 14:46
真机还是仿真?
作者: tyrl800    时间: 2023-2-8 15:05
KEY_MATRIX_PORT=0xf7;          if( KEY_MATRIX_PORT!=0xf7)          {       delay_10us(1000);                  switch( KEY_MATRIX_PORT&0xf0)                 {                         case 0x70:key_is=1;break;                         case 0xb0:key_is=5;break;                         case 0xd0:key_is=9;break;                         case 0xe0:key_is=13;break;                 }                                         while(KEY_MATRIX_PORT&0xf0!=0xf0);                             return key_is;                                 }
作者: xuyaqi    时间: 2023-2-8 15:58
改了一下,请参考。

#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned  int u16;
#define KEY_MATRIX_PORT P1
#define SMG_PORT P0
u8 gsmg_code[17]={0x3f,0x0b,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

u8 key_matrix(void)
{
        u8 jisu;
        u8 key_is=0;

        KEY_MATRIX_PORT=0xf7;
        jisu=0;
        while( KEY_MATRIX_PORT!=0xf7)
        {
                 switch( KEY_MATRIX_PORT)
                {
                        case 0x77:key_is=1;break;
                        case 0xb7:key_is=5;break;
                        case 0xd7:key_is=9;break;
                        case 0xe7:key_is=13;break;
                }
                jisu=jisu+1;if(jisu>200){break;}
        }
         
         KEY_MATRIX_PORT=0xfb;
        jisu=0;
        while( KEY_MATRIX_PORT!=0xfb)
        {   
                switch( KEY_MATRIX_PORT)
                {
                        case 0x7b:key_is=2;break;
                        case 0xbb:key_is=6;break;
                        case 0xdb:key_is=10;break;
                        case 0xeb:key_is=14;break;
                }
                jisu=jisu+1;if(jisu>200){break;}
         }
                  
   KEY_MATRIX_PORT=0xfd;
         jisu=0;
         while( KEY_MATRIX_PORT!=0xfd)
         {     
                 switch( KEY_MATRIX_PORT)
                 {
                                case 0x7d:key_is=3;break;
                                case 0xbd:key_is=7;break;
                                case 0xdd:key_is=11;break;
                                case 0xed:key_is=15;break;
                 }
                 jisu=jisu+1;if(jisu>200){break;}
         }
                                 
         KEY_MATRIX_PORT=0xfe;
         jisu=0;
         while( KEY_MATRIX_PORT!=0xfe)
         {        
                        switch( KEY_MATRIX_PORT)
                        {
                                case 0x7e:key_is=4;break;
                                case 0xbe:key_is=8;break;
                                case 0xde:key_is=12;break;
                                case 0xee:key_is=16;break;
                        }
      jisu=jisu+1;if(jisu>200){break;}                       
         }
         return key_is;
}                                          
void main()
{
        u8 key=0;
        while(1)
        {
                key=key_matrix();
         
                SMG_PORT=gsmg_code[key-1];
        }
}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1