汪汪汪汪OvO 发表于 2023-5-28 21:14:34

STC32G12K128按键控制LED失败了

我想实现在通过按键32-39控制LED亮灭,可是代码烧录之后实验箱没反应,大佬们帮看看代码哪里有问题(拜谢)


#include <STC32G.H>
#include "stdio.h"
#include "intrins.h"

typedef         unsigned char      u8;
typedef         unsigned int      u16;
typedef         unsigned long      u32;


#define MAIN_Fosc         24000000UL


int led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选

u8 KeyCode;//按键号 32-39

voiddelay_ms(u8 ms)
{
   u16 i;
   do{
          i = MAIN_Fosc / 6000;
          while(--i);
   }while(--ms);
}
      
void Matrix_Key()
{
      
      P0=0x0F;
      if(P0 != 0x0f)//检测按键是否按下
      {
                delay_ms(20);
                if(P0 != 0x0f)//再次确认按键是否按下
                {
                switch(P0)
                  {
                        case 0x0E: KeyCode=32;break;
                        case 0x0D: KeyCode=33;break;
                        case 0x0B: KeyCode=34;break;
                        case 0x07: KeyCode=35;break;
                  }
                P0=0xF0;
                delay_ms(20);
                if(P0 != 0xf0)
                {
                switch(P0)
                  {
                        case 0x70:KeyCode+=4;break;
                        case 0xb0:KeyCode+=0;break;
                  }
               
                }
                while(P0 != 0X0F);//检测松手
               
                }
      
      }
      
}


void main()
{
      WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
      
      P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
      P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
      P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
      P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
      P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
      P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
      P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
      P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
      
      P40 = 0;                //LED Power On
      while(1)
      {
                Matrix_Key();
                switch(KeyCode)
                {
                        case 32:P6=led;break;
                        case 33:P6=led;break;
                        case 34:P6=led;break;
                        case 35:P6=led;break;
                        case 36:P6=led;break;
                        case 37:P6=led;break;
                        case 38:P6=led;break;
                        case 39:P6=led;break;
                        default:break;
                }

      }
      
}
      


乘风飞扬 发表于 2023-5-29 10:20:20

建议参考STC32G实验箱例程包例子“15-IO行列扫描键盘数码管显示键值和调整时间”,烧录这个例程到实验箱里,右边数码管显示的是对应矩阵按钮的KeyCode

梁工 发表于 2023-5-29 14:58:54

建议先用STC公司学习板的按键例程改动,行列键盘扫描是现成的,你只需要增加你的按键执行程序即可。
页: [1]
查看完整版本: STC32G12K128按键控制LED失败了