资源简介
利用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单片机指令系统与汇编语言程序
- 新西达电调 hw30a 51单片机驱动无刷电
- RN8302B智能电表芯片程序基于STC12系列
- 51单片机蜂鸣器音乐实验(致爱丽丝)
- 基于51单片机和Proteus仿真的波形发生
- 数码管原理图库
- 用51单片机解析GPS数据的源代码程序
- 08年全国大学生数学建模竞赛A题数码
- 分享一个51单片机做的简易示波器
- 51单片机空闲和掉电模式应用带程序
- KNN识别LED数码管
- 利用51单片机计数器测频率最简程序
- 51单片机驱动继电器例程+pretues仿真
- 51单片机A4988驱动源码
- 51单片机ADC0832_1602 proteus仿真源程序加
- 51单片机ADC0832电压测量液晶1602显示的
- 51单片机 MPU6050读取并通过串口输出
- nrf24L01双向通信程序51单片机
- 基于AT89C51单片机的电子计价秤的设计
- 51单片机用433M无线模块控制程序
- AD采集数据在数码管上显示
- at89c51单片机开发板原理图
- 51单片机可显示频谱电子琴
- 基于51单片机的modbus rtu 通信测试程序
- 51单片机交通灯汇编程序
- 基于51单片机的简单计算器数码管显示
- 51单片机485(modbus协议)通信程序
- 基于AT89c51单片机的数字温度测量及显
- 51单片机播放音乐、电子琴、快进
评论
共有 条评论