;行列扫描法按键检测;;;具体描述:;任务一;;;行列式扫描识别按键;键盘接口应有以下功能:
?键盘扫描功能,即检测是否有键闭合;
?键识别功能,确定被闭合键所在的行列位置;
?产生相应的键的代码(键值)功能;
?消除按键抖动及对应对多键串按(复键)的功能。;;;;;1.硬件电路;2.程序设计;/**************键盘扫描程序*************/
ucharkeyscan()
{
ucharscan1,j; //定义变量
P3=0xf0;//P3口行线和列线送不同的电平
scan1=P3;//读回P3口状态
if((scan10xf0)!=0xf0)//判键是否按下
{
delayms(10);//延时10ms,去抖动
scan1=P3;//再次读会P3口状态
if((scan10xf0)!=0xf0)//二次判键是否按下,不相等则说明键盘有键按下
{for(j=0;j4;j++)//用test_code数组值进行行扫描1-4次,最少1次跳出此循环,逐行拉低
{P3=test_code[j];//输出行扫描用的值
;;}
}
elseP3=0xff; //没有任何键按下,P3口全部置为高电平
return(16);
}
main()
{
P0=0x40;//数码管显示-
P3=0xff;
while(1)
{
keyscan();//调用键盘扫描子程序
}
};;;;;;;行列扫描法按键检测;任务二;;;线反转法识别按键;反转法矩阵键盘的各个按键的计算值;“行列扫描法”与“线反转法”
识别按键上有何异同?;行列扫描法的步骤:;;1.硬件电路;2.程序设计;/**************线反转法按键扫描程序*************/
voidkeyscan()
{
ucharlow,height,i; //定义局部变量,用low得出低4位的值,用height得出高4位的值
P3=0x0f; //给P3赋low=P30x0f;
if(low!=0x0f)
{
delay(100);
if(low!=0x0f)
low=P30x0f; //若有键按下,得出低四位的值
}
P3=0xf0; //给P3赋实际上对0x0f的取反
height=P30xf0;;
if(height!=0xf0)
{
delay(100);
if(height!=0xf0)
height=P30xf0; //若有键按下,得出高4位的值
}
key=low+height; //高4位的值与低4位的值相加
for(i=0;i16;i++)
{if(key==table[i]) //通过查表得出n的值
n=i; }
}
/**************主程序*************/
voidmain()
{
while(1)
{
keyscan(); //按键扫描
P0=yin[n]; //在数码管上显示相应的键值
}
};;;;;;;行列扫描法按键检测;任务三;;;单片机音乐中音调和节拍的确定方法;;;;;简谱中音名与频率、N值的关系;;1.硬件电路;2.程序设计;;;;;;;行列扫描法按键检测;任务四;;;单片机控制蜂鸣器播放音乐;;1.硬件电路;2.程序设计;;;;