普中51单片机,问题求解
本帖最后由 HTIAN 于 2019-12-4 16:30 编辑#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define GPIO_DIG P0
#define GPIO_KEY P1
sbit LSA=P2^2; //38译码器引脚
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 KeyValue; //
u8 code smgduan={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F码表
u8 show={0,0};//存储两个矩阵键盘数据的数列
void delay(u16 i)
{
while(i--);
}
void KeyDown(void)//键盘扫描程序
{
char a=0;
u8 i;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//检测是否按下
{
for(i;i<=1;i++)
{
delay(1000);//消抖
if(GPIO_KEY!=0x0f)
{
//??????
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//??????
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
if((a<50)&&(GPIO_KEY!=0xf0)) //
{
delay(100);
a++;
i++;
}
}
}
}
}
void main()
{
u8 q=0;
while(1)
{
if(q=0)
{
LSA=0;
LSB=0;
LSC=0;
KeyDown();
show=smgduan;
GPIO_DIG=show;
q=1;
delay(10);
if(q=1)
{
LSA=1;
LSB=0;
LSC=0;
KeyDown();
show=smgduan;
GPIO_DIG=show;
q=2;
delay(10);
while(q=2)//重复输出
{
LSA=0;
LSB=0;
LSC=0;
GPIO_DIG=show;
delay(100);
LSA=1;
LSB=0;
LSC=0;
GPIO_DIG=show;
delay(1000);
GPIO_KEY=0x0f;//检测是否有新的输入
if(GPIO_KEY!=0x0f)
{
q=0;
show=0;
show=0;
}
}
}
}
}
}
我想实现第一按矩阵键盘在数码管上第8位显示数字,第二次按矩阵键盘在第7 位数码管上显示数字,有以上代码,
怎么能检测到第一次输入和第二次输入并重复显示,我在板子上下载程序只有一个数码管亮, 你可以这么样:比如在矩阵键盘上按第一个按键然后直接段选位选,你第二个键重新定段选位选,你这个程序的段选位选美又改变所以只是在一个位置改变数值 不建议在开发板上实验,其他模块也会占用IO口的
页:
[1]