音符发生器的设计

本文介绍了一个基于单片机的音符发生器设计,通过16个按键触发不同音符,按下按键蜂鸣器播放对应频率的声音,并在8位数码管上显示按键编号和频率信息。
摘要由CSDN通过智能技术生成

音符发生器的设计

功能要求

制作一个音乐音符发生器,利用键盘的不同按键,能发出不同的音符声音。按下按键发声,松开后停止发声。

硬件电路

在这里插入图片描述

功能解释

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)//再次检测键盘是否按下
		
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值