第二十二课 51音乐之二 简单电子琴
程序讲解:
/*--------------------------------------------------------------*/
#include <AT89X52.H>
#include "MIDI_1.H" //蜂鸣器头文件(在 第二十一课 有详细讲解)
#include "Key_Board.H" //矩阵按键头文件(在 第十九课 有详细讲解)
/*--------------------------------------------------------------*/
void main(void)
{
unsigned char tone;
timer0_INT(); //定时器0初始化 在 MIDI_1.H 里面
while(1)
{
tone = key_scan(); //key_scan()键值扫描函数,在矩阵按键头文件里面
if(key_INT) //判断是否有按键按下,key_INT按键按下标志位
{
key_INT = 0; //清除按键按下标志位
TR0 = 1; //允许定时器0工作 音乐响起
STH0 = (unsigned char)(tab_fre[tone] >> 8);
STL0 = (unsigned char)(tab_fre[tone] & 0xff);
P1 = ~tone; //将键值传到P1口LED显示(为什么要取反呢?和硬件电路有关前面讲过)
}
else
{
TR0 = 0; //音乐关闭
bp = 1; //关闭蜂鸣器(它由PNP型三极管驱动,此时三极管B极为高,即处于截止状态,蜂鸣器线圈不导通)
P1 = 0xff; //关闭P1口LED
}
}
}
本节重点:
1、基本就是对以前的课程的一个复习,在这个程序里面的Key_Board.H头文件里面加了个按键标志位key_INT 用来判断是否有按键按下。
演示视屏:
http://v.youku.com/v_show/id_XOTIzNjQ4NTY=.html
相关程序:https://static.assets-stash.eet-china.com/album/old-resources/2009/6/2/d3f75f34-ddc9-433b-abb4-6e5b62e6d252.rar
用户209148 2009-6-6 12:24
用户1079740 2009-6-2 21:45