找回密码
 立即注册
查看: 877|回复: 2

STC32G12K128按键控制LED失败了

[复制链接]

3

主题

7

回帖

63

积分

注册会员

积分
63
发表于 2023-5-28 21:14:34 | 显示全部楼层 |阅读模式
我想实现在通过按键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

void  delay_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[0];break;
                        case 33:P6=led[1];break;
                        case 34:P6=led[2];break;
                        case 35:P6=led[3];break;
                        case 36:P6=led[4];break;
                        case 37:P6=led[5];break;
                        case 38:P6=led[6];break;
                        case 39:P6=led[7];break;
                        default:break;
                }

        }
        
}
        


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-5-29 10:20:20 | 显示全部楼层
建议参考STC32G实验箱例程包例子“15-IO行列扫描键盘数码管显示键值和调整时间”,烧录这个例程到实验箱里,右边数码管显示的是对应矩阵按钮的KeyCode
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-5-29 14:58:54 | 显示全部楼层
建议先用STC公司学习板的按键例程改动,行列键盘扫描是现成的,你只需要增加你的按键执行程序即可。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 00:57 , Processed in 0.124340 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表