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;
}
}
}
建议参考STC32G实验箱例程包例子“15-IO行列扫描键盘数码管显示键值和调整时间”,烧录这个例程到实验箱里,右边数码管显示的是对应矩阵按钮的KeyCode 建议先用STC公司学习板的按键例程改动,行列键盘扫描是现成的,你只需要增加你的按键执行程序即可。
页:
[1]