|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F码表
- u8 show[2]={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[0]=smgduan[KeyValue];
- GPIO_DIG=show[0];
- q=1;
- delay(10);
- if(q=1)
- {
- LSA=1;
- LSB=0;
- LSC=0;
- KeyDown();
- show[1]=smgduan[KeyValue];
- GPIO_DIG=show[1];
- q=2;
- delay(10);
- while(q=2)//重复输出
- {
- LSA=0;
- LSB=0;
- LSC=0;
- GPIO_DIG=show[0];
- delay(100);
-
- LSA=1;
- LSB=0;
- LSC=0;
- GPIO_DIG=show[1];
- delay(1000);
-
- GPIO_KEY=0x0f;//检测是否有新的输入
- if(GPIO_KEY!=0x0f)
- {
- q=0;
- show[0]=0;
- show[1]=0;
- }
-
- }
- }
- }
- }
- }
复制代码
我想实现第一按矩阵键盘在数码管上第8位显示数字,第二次按矩阵键盘在第7 位数码管上显示数字,有以上代码,
怎么能检测到第一次输入和第二次输入并重复显示,我在板子上下载程序只有一个数码管亮, |
|