数器来完成。Р而在此处采用的方法是利用延时函数确定每个音的长短(即节拍),编程时在设置音阶时还要对其设置节拍。Р Р4 矩阵键盘识别Р琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制:根据不同的按键,对定时器T0送入不同的初值,调节T0的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器。Р4.1去抖动:Р每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为5—20mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。在程序中通过设置空循环来实现。Р4.2被按键识别Р采用行扫描法,该方法在微机系统中被广泛使用。Р由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置输出口为P3.0——P3.3,输入口为P3.4——P3.7。Р4.3键码产生Р为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。РT0中断入口Р重装TH0,TL0初值РP2.4取反Р中断返回Р 图6 产生音阶的定时器中断子程序流程图Р开始Р矩阵键盘按键按下成功否?Р识别按键功能Р根据按键功能,装入音符T值到T0中Р启动T0工作Р行列式键盘按键释放成功否?Р停止T0工作РT0初始化并开中断允放T0中断Р 图7 按键识别程序流程图Р程序调试与仿真Р1 使用Keil软件对程序进行调试,并生成hex文件。弄懂参考程序后,自己编了一段樱花音乐。经Keil编译连接,程序调试无误。Р2 使用proteus进行仿真Р将Keil生成的dianziqin.hex文件加到单片机上,启动仿真。可以很好地实现播放与弹奏功能。Р需要说明的是,仿真只是在原理方面的验证,因而本仿真中蜂鸣器直接接到P2.4,在实际中还要有音频放大器件。