资源简介
利用51单片机、喇叭、数码管制作一个简易的数字电子琴,可以播放音符、曲子,并在数码管显示音调或曲号。同时具有数字钟功能,在数码管上显示小时、分钟时间。

代码片段和文件信息
#include //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
uchar code dis[]={0x060x5b0x4f0x660x6d0x7d0x070x7f0x080x400x010x390x5E0x790x710x3F}; //1-F 、0
uint code yinse[]={636286383664020641036426064400645246458064694647776482064898649686503065058651106516465178652176525265283};//低1~7、中1~7、高1~7
uchar code music1[]={88121213131211111010998121211111010912121111101098812121313121111101099810080};//音调
uchar code music2[]={4810048571157137134568464864857115710080};
uchar code music3[]={121012101213121013128891012109100101210080};
uchar code music4[]={58101287101212131415131210988810988891099610910080};
uint code de1[]={222222422222242222224222222422222242222224};//节奏
uint code de2[]={11014111141111410.50.51141111411114};
uint code de3[]={21116111142112112014};
uint code de4[]={1212121212121611212112121121226};
uchar code dis1[]={0x3F0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5E0x790x71};
uint time=100;
uchar own[50];
uchar index=0;
char jilu=0;
char bofang=0;
//key 8 低音 9中音 10高音 14 手动 15自动
char mode=0;//手动
uchar yindiao=0;//低音 初值yinse[num+yindiao*7]
sbit rect_wave=P2^3;
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
uchar code table[]={0x060x5b0x4f0x660x6d0x7d0x070x7C0x080x400x010x390x5E0x790x710x3F};
uint th=0;
uchar show[]={0x000x080x3F0x3F0x3f0x3F};//六个数码管显示的内容
void delayms(uint xms)
{
uint ij;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void int_timer ()//定时器0初始化 输出一定频率的方波
{
TMOD=0x11;
TH0=th/256;
TL0=th%256;
EA=1;
ET0=1;
TR0=1;
}
void Timer0_ISR(void) interrupt 1
{
TH0=th/256;
TL0=th%256;
rect_wave=!rect_wave;
}
void simple(uchar numuint tim)//播放单个音符
{
th=yinse[num];
int_timer();
delayms(tim);
TR0=0;//关闭中断
rect_wave=1;
}
void music (uchar mu[]uint d[])//播放曲子
{ uint k;
for(k=0;mu[k]!=80;k++)
{ for(;mu[k]!=100;k++)
{
time=d[k]*300;
simple(mu[k]-1time);//time 音符的节奏拍子长短
delayms(10);
}
delayms(80);
}
jilu=0;
bofang=0;
}
void mus(uchar mu[]) //播放储存的曲子
{ uint k;
for(k=0;mu[k]!=80;k++)
{ for(;mu[k]!=100;k++)
{
simple(mu[k]-1300);
delayms(300);
}
delayms(80);
}
}
void notsimple(uchar num)//播放曲子 判断曲号/储存的曲子
{
switch(num)
{
case 0:
music(music1de1);
break;
case 1:
music(music2de2);
break;
case 2:
music(music3de3);
break;
case 3:
music(music4de4);
break;
d
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 114747 2019-01-11 13:13 基于51单片机的数字电子琴\HL-1原理图.pdf
文件 5746 2019-01-11 13:16 基于51单片机的数字电子琴\music.c
....... 70766 2019-01-11 13:16 基于51单片机的数字电子琴\music.uvgui.15520
....... 4667 2019-01-11 13:16 基于51单片机的数字电子琴\music.uvopt
....... 13900 2019-01-11 13:16 基于51单片机的数字电子琴\music.uvproj
目录 0 2019-01-11 13:14 基于51单片机的数字电子琴\Listings
目录 0 2019-01-11 13:14 基于51单片机的数字电子琴\ob
目录 0 2019-01-11 13:16 基于51单片机的数字电子琴
----------- --------- ---------- ----- ----
209826 8
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 25.数码管显示0-99
- STC12C5A60S2 CH4521 驱动数码管 显示
- C51单片机汇编指令查询、学习工具集
- CH454键盘与数码管显示程序
- 基于8051单片机的红外接收程序
- 利用启发式搜索解决八数码难题程序
- 基于EWB软件的数码管显示控制器
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 深度优先搜索算法和广度优先搜索算
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
评论
共有 条评论