【51单片机】【protues仿真】基于51单片机矩阵电子琴系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示

2、矩阵按键​和独立按键

3、蜂鸣器模块进行播放

4、内置16首歌曲

5、LED灯显示当前模式

二、使用步骤

本项目采用51单片机、矩阵键盘(4×4或更大)、蜂鸣器/扬声器输出模块,部分设计扩展了数码管用于音阶和模式显示。矩阵键盘作为琴键输入,通过行列扫描检测按键触发,蜂鸣器通过定时器中断生成不同频率的音频信号。

三、硬件资源

1、51单片机核心模块

2、矩阵按键模块

3、独立按键模块

4、蜂鸣器模块

5、LED灯模块

6、数码管显示模块

四、软件设计

#include <reg51.h>

#include <absacc.h>

#include <stdio.h>

#include <math.h> //头文件

#define uchar unsigned char

#define uint unsigned int //宏定义

uchar STH0;

uchar STL0;

bit FY=0;

uchar Song_Index=0,Tone_Index=0;

uchar k, key;

sbit SPK=P3^7 ;

sbit LED1=P3^5;

sbit LED2=P3^4;

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xa3,0x8c,0xc8};

unsigned char code num1[]= " Music: ";

uchar code Song[][100]=

{

{12,10,9,9,10,8,9,10,

12,10,9,9,5,10,11,10,

10,10,14,10,9,8,7,8,

9,10,13,6,8,10,9,6,

8,7,5,6,12,10,9,9,

9,10,8,9,10,12,10,9,

9,9,5,10,11,10,10,10,

14,10,9,8,7,8,9,10,

13,6,8,10,9,6,8,7,

5,6,-1},

{13,12,10,12,15,13,

12,13,10,12,13,12,10,8,6,12,

10,9,9,10,12,12,13,10,9,

8,12,10,9,8,6,8,5,-1},

{10,10,11,10,9,8,9,12,9,9,

8,8,9,8,7,6,7,10,7,7,

6,9,10,9,8,6,5,9,10,9,

8,6,6,9,10,9,8,6,7,8,-1},

{5,3,5,8,6,8,

5,5,1,2,3,2,1,2,5,

3,5,8,7,6,8,5,5,2,

3,4,0,1,6,8,8,7,6,

7,8,6,7,8,6,6,5,3,

1,2,5,3,5,8,7,6,8,

5,5,2,3,4,0,1,-1},

{5,6,8,6,6,5,6,5,3,5,

5,6,8,6,6,5,6,5,6,1,

1,2,3,2,2,2,1,2,1,6,

3,2,5,6,8,6,6,5,6,5,

6,1,1,2,3,4,4,5,6,6,

5,6,8,6,8,6,5,5,1,6,

5,5,6,8,3,2,3,1,-1},

{5,9,10,9,10,12,13,12,8,9,

10,13,12,10,12,12,13,15,13,12,

10,12,10,8,9,10,8,6,10,9,

12,9,10,9,10,12,13,12,8,9,

10,13,12,12,13,15,13,

12,10,12,10,8,6,10,9,8,6,

8,9,9,8,-1},

{5,8,9,10,9,10,11,12,12,12,

11,10,9,5,8,9,10,11,12,12,

12,13,12,9,10,8,8,6,9,9,

10,10,8,12,8,12,8,7,8,8,6,

9,9,10,10,12,12,

12,13,12,9,10,8,

5,8,9,10,9,10,11,12,12,12,

11,10,9,5,8,9,10,9,10,11,

12,12,12,9,10,8,8,6,9,9,

10,10,8,12,8,12,12,7,8,-1},

{8,9,10,8,8,9,10,8,10,11,12,10,11,12,

12,13,12,11,10,8,12,13,12,11,10,8,8,5,8,8,5,8,-1},

void delay1 (uint ms)

{

uchar t;

while (ms--)

for(t=0;t<120;t++);

}

void delay(void)

{

uchar i;

for (i=300;i>0;i--);

}

void main(void)

{

SPK=0;

LED1=1;

LED2=0;

P0=0xc0;

IE=0x87;

TMOD=0x01;

IT0=1;

IT1=1;

while(1)

{

anjian();

}

五、实验现象

演示视频:

相关推荐
想放学的刺客8 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
天昊吖9 小时前
stc8H启用DMA发送后 卡住【踩坑日志】
单片机
李永奉9 小时前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别
BackCatK Chen9 小时前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
兆龙电子单片机设计9 小时前
【STM32项目开源】STM32单片机多功能电子秤
stm32·单片机·开源·毕业设计·智能家居
切糕师学AI10 小时前
ARM 架构中的复位(Reset)与复位流程
arm开发·单片机·嵌入式·复位
wotaifuzao10 小时前
STM32多协议网关-FreeRTOS事件驱动架构实战
stm32·嵌入式硬件·can·freertos·uart·modbus·spi
llilian_1610 小时前
信号发生器 多通道多功能脉冲信号发生器应用解决方案 多功能脉冲发生器
功能测试·单片机·嵌入式硬件·测试工具
yuanmenghao10 小时前
Classic AUTOSAR深入浅出系列 - 【第十六篇】MCAL:为什么 MCU 换了,上层几乎不用动
单片机·嵌入式硬件·autosar
MickyCode12 小时前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu