历史上的今天
今天是:2025年01月25日(星期六)
2018年01月25日 | 4×4矩阵键盘C语言程序参考
2018-01-25 来源:eefocus
#define int8 unsigned int
#define int16 unsigned char
#define int32 unsigned long
#define KEY_PORT PORTD
#define KEY_PIN PIND
#define ROW1 (1<<0)
#define ROW2 (1<<1)
#define ROW3 (1<<2)
#define ROW4 (1<<3)
statIC int8 sCAN_X(void);
static delay(void);
int8 scan_key(void);
/*
函数原型:int8 scan_key(void)
功能: 返回按下的按键的行列值,
如返回第二行第三列,即按键“6”,
返回值0x23,高位为行,低位为列
键盘:
7 8 9 /
4 5 6 *
1 2 3 +
C 0 = -
返回值:
0x11 0x12 0x13 0x14
0x21 0x22 0x23 0x24
0x31 0x32 0x33 0x34
0x41 0x42 0x43 0x44
作者: Benny
Email: 89S53@163.com
2005
*/
int8 scan_key(void){
//第四行----------------
KEY_PORT|=0xff;
KEY_PORT&=~ROW4;
if ((KEY_PIN&0xf0)!=0xf0)
{
delay();//去抖动
if ((KEY_PIN&0xf0)!=0xf0)
{
return (0x40|scan_X());
}
}
//第三行----------------
KEY_PORT|=0xff;
KEY_PORT&=~ROW3;
if ((KEY_PIN&0xf0)!=0xf0)
{
delay();//去抖动
if ((KEY_PIN&0xf0)!=0xf0)
{
return (0x30|scan_X());
}
}
//第二行----------------
KEY_PORT|=0xff;
KEY_PORT&=~ROW2;
if ((KEY_PIN&0xf0)!=0xf0)
{
delay();//去抖动
if ((KEY_PIN&0xf0)!=0xf0)
{
return (0x20|scan_X());
}
}
//第一行: 7 8 9 /
KEY_PORT|=0xff;
KEY_PORT&=~ROW1;
if ((KEY_PIN&0xf0)!=0xf0)
{
delay();//去抖动
if ((KEY_PIN&0xf0)!=0xf0)
{
return (0x10|scan_X());
}
}
}
//列扫描函数
static int8 scan_X(void){
if ((KEY_PIN&0xf0)==0xe0)
{ //"7"
while((KEY_PIN&0xf0)==0xe0);
return 0x01; //第一列
}
else if((KEY_PIN&0xf0)==0xd0)
{
while((KEY_PIN&0xf0)==0xd0);
return 0x02;//第二列
}
else if((KEY_PIN&0xf0)==0xb0)
{
while((KEY_PIN&0xf0)==0xb0);
return 0x03;//第三列
}
else if((KEY_PIN&0xf0)==0x70)
{
while((KEY_PIN&0xf0)==0x70);
return 0x04; //第四列
}
}
static delay(void){
//去抖动
int16 i,j;
for (i=0;i<10;i++)
{
for (j=0;j<100;j++)
{}
}
}
史海拾趣
|
子式工具组,工作简单快捷,舒适安全,且一人便可独立完成。工具组主要功用是:①测试制动液的湿沸点,确定是否应该更换。②使用独有的工具进行旧制动液的排放和新制动液的加注。③换液时,工具中采用先进的电子传感显示技术的部件,能准确有效地判 ...… 查看全部问答> |
|
请问tcl语言中如何将内容打印到文件啊,比如下面这句:puts [ format \"%40s%13s%13s%13s\"\"name\" \"num\" \"code\" \"com\"]在modelsim中执行后会在modelsim命令窗口打印相应字符,如果想把这些打印到文件中,该用什么命令呢。刚开始学习tcl,还 ...… 查看全部问答> |
|
我现在找了很久ise foundation 10.1或webpack的开发软件,有谁有的可以给我提供以下吗,我在学校,去xilinx网站下要花很大的流量,下不起,图书馆借了个光盘也不能用,哪位好心人能帮我一下,感激涕零啊!邮箱:ffxsppan@163.com… 查看全部问答> |
|
PC对PLC通过MODBUS协议通讯时 给出的映射表是这样的 H0000 P区域 H1000 M区域 H2000 L区域 H3000 K区域 现在我要对一个M1900(已经 ...… 查看全部问答> |
|
老板红了眼,再没结果我就要牺牲了!PDA上UDP通信问题,请各路高手帮忙看,小弟感激涕零 目前的模块,PDA跟单片机的通信。 1,在EVC4下编的代码,通过PC2003模拟通信没有问题,收发数正常 但是release到PDA上,只能广播或者针对某几个IP能发数,也就是用抓包工具能查到数据 但是,仅仅是能发出数据,对方没有响应,而在模拟器上,没有 ...… 查看全部问答> |
|
基于瑞萨RL78G14的便携心率仪创意进度帖-3、扩展板原理图,附原文件 最近断断续续的看资料,找脚位,主要是各种模块接口的,既要和官方板子兼容,又要保证以后好布线,那个踌躇啊 扩展板主要用到定时器IO,按键触发,Buzzer输出,SPI接口,计划引出一路串口和一路IIC接口,AD口看情况在考虑下 不得不说,瑞萨的IC端 ...… 查看全部问答> |
|
板子供电电压是钮扣电池供电,为3V。TVS用来防静电击穿,选用的是在1A测试的条件下,钳位电压为7V,有人建议用个钳位电压为3.6V或3.9V的TVS,什么原因?为什么?怎样应该去选择TVS的钳位电压,网上很多资料,说的都不清楚。。。… 查看全部问答> |




