音符发生器的设计
功能要求
制作一个音乐音符发生器,利用键盘的不同按键,能发出不同的音符声音。按下按键发声,松开后停止发声。
硬件电路
功能解释
16个按键代表16个不同的音符,当其中一个键盘按下时,蜂鸣器发出特定的音符声音,8位共阴极数码管显示XX–XXXX,前两位为按键按下的编号,后四位显示此时蜂鸣器发出的频率。
软件程序
/* Main.c file generated by New Project wizard
*
* Created: 周五 9月 3 2021
* Processor: AT89C51
* Compiler: Keil for 8051
*/
#include <reg51.h> //此文件中定义了单片机的一些特殊功能寄存器
#define uint unsigned int ; //对数据类型进行声明定义
#define uchar unsigned char;
uchar hang; //用来存放读取到行键值
uchar lie; //用来存放读取到列键值
uchar hao; //用来存放读取到序号键值
uchar j;
uchar gao;
uchar di;
uchar lv;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
uchar pinlv[]={
494,523,554,587,622,659,698,740,784,831,880,932,988,1046,1109,1175};
uchar code smgduan[17]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值
void delay(i) //延时函数
{
while(i--);
}
void KeyDown(void)//
{
P1=0x0f;
if(P1!=0x0f)//读取按键是否按下
{
delay(1000);//延时10ms进行消抖
if(P1!=0x0f)//再次检测键盘是否按下