基于AVR单片机的键盘子程序

标签:avr
分享到:

键盘子程序(AVR) 

键盘扫描有中断方式和查询方式
#i nclude "jn8515def.h"

/******以下是键盘排列图******
| | |
PC0 ___1|__2|__3|__
| | |
PC1 ___4|__5|__6|__
| | |
PC2 ___7|__8|__9|__
| | |
PC3 ___C|__0|__S|__
| | |
| | |
PC4 PC5 PC6
*****************************/
//下沿为有效键值 0 1 2 3 4 5 6 7 8 9 s(10) c0 c1 c4 c7 cs c
flash uchar cKeyTab[]={0x57,0x6e,0x5e,0x3e,0x6d,0x5d,0x3d,0x6b,0x5b,0x3b,0x37,0x47,0x66,0x65,0x63,0x27,0x67};
flash uchar cKeyOut[]={0xef,0xdf,0xbf}; //其中一列为0
flash uchar cKeyDir[]={0x10,0x20,0x40};
uchar cMenu=0;

uchar cKeyVal()
{ static uchar cLastKv,cSameKvNum=0;
static bit bKeyPress=0;
uchar i,j,cKeytmp=0xff;
for(i=0;i<3;i++)
{ DDRC&=0x80;
DDRC|=cKeyDir[i];
PORTC=cKeyOut[i];
#asm("nop")
#asm("nop")
cKeytmp=PINC&0x7f;
for(j=0;j<16;j++)
{ if(cKeyTab[j]==cKeytmp)
{ cWaitTime=10; //延时去抖
goto Next;
}
}
}
// do{ //等待按键释放
// }while(!bKeyPress);
cSameKvNum=0;
bKeyPress=0;
return 0xff;
Next:
// delay_ms(2);
if(bKeyPress) return 0xff;
if(cKeytmp==cLastKv)
{ if(++cSameKvNum>10)
{ cSameKvNum=0;
bKeyPress=1;
return j;
}
}
else
{ cSameKvNum=0;
cLastKv=cKeytmp;
}

return 0xff;//返回空键值
}
 

继续阅读
51单片机、AVR单片机和PIC单片机IO口的操作

51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。下面我们来看看51单片机、AVR单片机和PIC单片机IO口的操作的方法。

一个小经验,让你的AVR单片机功耗超低

休眠电流要最小:掉电模式必须的,然后能关闭的功能全部关闭,关闭BOD检测,关闭看门狗,电压越低越好,1.8V,频率越低越好。

51、AVR与PIC,三种单片机IO口的操作

51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。下面我们来看看51单片机、AVR单片机和PIC单片机IO口的操作的方法。

14个官方视频教程,助您学习AVR系列单片机

AVR&reg; Insights &mdash; 第1集 &mdash; AVR存储器 AVR&reg; Insights &mdash; 第2集 &mdash; 边写边读存储器 AVR&reg; Insights &mdash; 第3集 &mdash; 端口 AVR&reg; Insights &mdash; 第4集 &mdash; 休眠模式 AVR&reg; Insights &mdash; 第5集 &mdash

关于AVR单片机,你了解多少?

什么是AVR单片机?AVR单片机有什么优点?为什么要选择AVR单片机?

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss