标题: 新手求助关于单片机矩阵键盘程序问题,没反应 [打印本页]

作者: AnRan_    时间: 2022-2-12 18:26
标题: 新手求助关于单片机矩阵键盘程序问题,没反应
布置的任务一部分是按下矩阵键盘S6让led亮一个灯,我自己写的程序按下S6并没有任何反应,请帮我看一下怎么回事

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit LED1 = P1^0;
  4. unsigned char key_number=1;
  5. void delay(unsigned int x)
  6. {
  7.         unsigned char i, j;
  8.         while(x>0){
  9.                 _nop_();                                 
  10.                 i = 2;
  11.                 j = 199;
  12.                 do
  13.                 {
  14.                         while (--j);
  15.                 } while (--i);
  16.                 x--;
  17.         }
  18. }

  19. unsigned char KeyScan()
  20. {
  21.         P3=0xf0;
  22.         if(P3!=0xf0)
  23.         {
  24.                 delay(10);
  25.                 if(P3!=0xf0)
  26.                 {
  27.                         switch(P3)
  28.                         {
  29.                                 case 0xe0:key_number=0;
  30.                             case 0xd0:key_number=1;
  31.                                 case 0xb0:key_number=2;
  32.                                 case 0x70:key_number=3;
  33.                         }
  34.                         P3=0x0f;
  35.                         switch(P3)
  36.                         {
  37.                                 case 0x0e:key_number=key_number;
  38.                                 case 0x0d:key_number=key_number+4;
  39.                                 case 0x0b:key_number=key_number+8;
  40.                                 case 0x07:key_number=key_number+12;
  41.                         }
  42.                 }
  43.         }
  44.         return key_number;
  45. }
  46. void main()
  47. {
  48.         key_number=KeyScan();
  49.         if(key_number==0)
  50.         {
  51.                 LED1 = 0;        
  52.         }
  53. }
复制代码

矩阵键盘.png (76 KB, 下载次数: 25)

矩阵键盘原理图

矩阵键盘原理图

LED.png (60.14 KB, 下载次数: 30)

LED灯原理图

LED灯原理图

作者: wulin    时间: 2022-2-13 05:58
程序基本结构有严重错误,switch语句的格式不完整。
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit LED1 = P1^0;
  4. unsigned char key_number=1;
  5. void delay(unsigned int x)
  6. {
  7.         unsigned char i, j;
  8.         while(x>0){
  9.                 _nop_();   
  10.                 i = 2;
  11.                 j = 199;
  12.                 do
  13.                 {
  14.                 while (--j);
  15.                 } while (--i);
  16.                 x--;
  17.         }
  18. }

  19. unsigned char KeyScan()
  20. {
  21.         P3=0xf0;
  22.         if(P3!=0xf0)
  23.         {
  24.                 delay(10);
  25.                 if(P3!=0xf0)
  26.                 {
  27.                         switch(P3)
  28.                         {
  29.                                 case 0xe0:key_number=0;break;
  30.                                 case 0xd0:key_number=1;break;
  31.                                 case 0xb0:key_number=2;break;
  32.                                 case 0x70:key_number=3;break;
  33.                         }
  34.                         P3=0x0f;
  35.                         switch(P3)
  36.                         {
  37.                                 case 0x0e:key_number=key_number+0;break;
  38.                                 case 0x0d:key_number=key_number+4;break;
  39.                                 case 0x0b:key_number=key_number+8;break;
  40.                                 case 0x07:key_number=key_number+12;break;
  41.                         }

  42.                 }
  43.         }
  44.         return key_number;
  45. }
  46. void main()
  47. {
  48.         while(1)
  49.         {
  50.                 key_number=KeyScan();
  51.                 if(key_number==0)
  52.                 {
  53.                         LED1 = 0;
  54.                 }
  55.                 else LED1 = 1;
  56.         }
  57. }
复制代码

作者: AnRan_    时间: 2022-2-13 08:26
wulin 发表于 2022-2-13 05:58
程序基本结构有严重错误,switch语句的格式不完整。

谢谢,已经解决了




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