微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 4*4键盘扫描代码

4*4键盘扫描代码

时间:11-30 来源:互联网 点击:
#include

//#include

//#include "STC12C5A60AD.H"

//#include "STC12C5202AD.H"

#define uchar unsigned char //变量类型标识的宏定义

#define uint unsigned int

code uchar SEG7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};

#define OFF 1

#define ON 0

sbit P2_0=P2^0;

sbit P1_0=P1^0;

sbit P1_1=P1^1;

sbit P1_2=P1^2;

sbit P1_3=P1^3;

sbit P1_4=P1^4;

sbit P1_5=P1^5;

sbit P1_6=P1^6;

sbit P1_7=P1^7;

uchar key_scan(void);

//****************************************************

void delay(uint k)

{

uint i,j;

for(i=0;i

{

for(j=0;j<120;j++);

}

}

void mcu_init(void)

{

delay(1000);

}

/***********主函数*********/

void main(void)

{ uchar temp;

mcu_init();

while(1)

{

temp=key_scan();

if(temp<16) //如果有键按下

{P0=SEG7[temp];//显示丝印符号

P2_0=ON;}

else P0=0x00; //否则熄灭显示

}

}

//********************************************

//键值设定

code uchar key_set[]=

{

1, 2, 3, 10,

4, 5, 6, 11,

7, 8, 9, 12,

15,0, 14,13

};

//********************************************

uchar key_scan(void)

{uchar key;

bit find=0;

P1=0xf0; //输入带有上拉电阻。行输入列输出

if((P1&0xf0)!=0xf0) //如果有键按下

{ find=1; //发现标志置1

if(P1_4==0){key=0;} //如果第1行有键按下

else if(P1_5==0){key=4;} //如果第2行有键按下

else if(P1_6==0){key=8;} //如果第3行有键按下

else if(P1_7==0){key=12;} //如果第4行有键按下

//翻转端口方向,列输入,行输出

P1=0x0f; //输入带有上拉电阻

delay(10);

if(P1_3==0)key+=0; //如果第1列有键按下

else if(P1_2==0)key+=1; //如果第2列有键按下

else if(P1_1==0)key+=2; //如果第3列有键按下

else if(P1_0==0)key+=3; //如果第4列有键按下

}

if(find==1)return key_set[key];//有键按下,返回丝印符号值

else return 16; //无键按下,返回16

}

// ---------------------------P13

// | ---------------------P12

// | | ----------------P11

// | | | -----------P10

// |1 |2 |3 |A

// -O----O----O----O-----------P14

// |4 |5 |6 |B

// -O----O----O----O-----------P15

// |7 |8 |9 |C

// -O----O----O----O-----------P16

// |F |0 |E |D

// -O----O----O----O-----------P17

// | | | |

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top