基本信息
文件名称:《单片机技术与应用》课件 项目五 简易电子琴的设计.pptx
文件大小:1.36 MB
总页数:76 页
更新时间:2025-06-19
总字数:约1.68千字
文档摘要

;行列扫描法按键检测;;;具体描述:;任务一;;;行列式扫描识别按键;键盘接口应有以下功能:

?键盘扫描功能,即检测是否有键闭合;

?键识别功能,确定被闭合键所在的行列位置;

?产生相应的键的代码(键值)功能;

?消除按键抖动及对应对多键串按(复键)的功能。;;;;;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.程序设计;;;;