找回密码
 立即注册
查看: 380|回复: 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;
                }

        }
        
}
        


回复 送花

使用道具 举报

  • TA的每日心情
    奋斗
    2 小时前
  • 签到天数: 141 天

    [LV.7]常住居民III

    26

    主题

    1338

    回帖

    4165

    积分

    论坛元老

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

    使用道具 举报

    该用户从未签到

    46

    主题

    3008

    回帖

    6783

    积分

    超级版主

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-15 11:33 , Processed in 0.056636 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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