#include

#define KeyPort P1

unsigned char High,Low; //定时器预装值的高8位和低8位

sbit SPK=P3^7;          //定义蜂鸣器接口

sbit playSongKey=P0^0;          //功能键

sbit RS=P2^0;//液晶数据命令选择

sbit RW=P2^1;//液晶读写选择

sbit EN=P2^2;//液晶使能端

unsigned char code freq[][2]={

0xD8,0xF7,//00440HZ 1

0xBD,0xF8,//00494HZ 2

0x87,0xF9,//00554HZ 3

0xE4,0xF9,//00587HZ 4

0x90,0xFA,//00659HZ 5

0x29,0xFB,//00740HZ 6

0xB1,0xFB,//00831HZ 7

0xEF,0xFB,//00880HZ `1

};

unsigned char Time;

unsigned char code YINFU[9][1]={{' '},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'}};

//世上只有妈妈好数据表

unsigned char code MUSIC[]={ 6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1,

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

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

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

2,2,1,      1,2,1,      6,1,1,         1,2,1,           5,1,6,         0,0,0

};

// 音阶频率表 高八位

unsigned char code FREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,

} ;

// 音阶频率表 低八位

unsigned char code FREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i

0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,

};

void Init_Timer0(void);//定时器初始化

//延时函数大约约2*z+5us

void delay2xus(unsigned char z)

{

while(z--);

}

// 延时函数大约约1ms

void delayms(unsigned char x)

{

while(x--)

{

delay2xus(245);

delay2xus(245);

}

}

/*------------------------------------------------

节拍延时函数

各调1/4节拍时间:

调4/4  125ms

调2/4  250ms

调3/4  187ms

------------------------------------------------*/

void delayTips(unsigned char t)

{

unsigned char i;

for(i=0;i

{

delayms(250);

}

TR0=0;

}

//播放音乐的函数

void PlaySong()

{

TH0=High;//赋值定时器时间,决定频率

TL0=Low;

TR0=1;      //打开定时器

delayTips(Time); //延时所需要的节拍

}

//定时器T0初始化子程序

void Init_Timer0(void)

{

TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

EA=1;            //总中断打开

ET0=1;           //定时器中断打开

}

//定时器T0中断子程序

void Timer0_isr(void) interrupt 1

{

TH0=High;

TL0=Low;

SPK=!SPK;

}

//主函数

void main (void)

{

unsigned char num,k,i;

Init_Timer0();    //初始化定时器0,主要用于数码管动态扫描

SPK=0;                        //在未按键时,喇叭低电平,防止长期高电平损坏喇叭

while (1)

{

switch(KeyPort)          //对按键进行处理

{

case 0xfe:num= 1;break;

case 0xfd:num= 2;break;

case 0xfb:num= 3;break;

case 0xf7:num= 4;break;

case 0xef:num= 5;break;

case 0xdf:num= 6;break;

case 0xbf:num= 7;break;

case 0x7f:num= 8;break;      //分别对应不用的音调

default:num= 0;break;

}

P2 = KeyPort;

if(num==0)

{

TR0=0;

SPK=0;   //在未按键时,喇叭低电平,防止长期高电平损坏喇叭

}

else

{

High=freq[num-1][1];

Low =freq[num-1][0];

TR0=1;

}

if(playSongKey==0)        //如果播放音乐按键被按下

{

delayms(10);

if(playSongKey==0)

{

i=0;

while(i<100)

{

k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据

High=FREQH[k];

Low=FREQL[k];

Time=MUSIC[i+2];          //节拍时长

i=i+3;

if(P1!=0xff)//长按任意8音键退出播放

{

delayms(10);

if(P1!=0xff)

i=101;

}

PlaySong();

}

TR0=0;

}

}

}

}

电子琴仿真c语言程序,基于单片机简易电子琴仿真和源程序相关推荐

  1. 基于单片机的密码锁c语言设计程序,基于单片机的电子密码锁及程序

    <基于单片机的电子密码锁及程序>由会员分享,可在线阅读,更多相关<基于单片机的电子密码锁及程序(17页珍藏版)>请在人人文库网上搜索. 1.基于单片机的电子密码锁设计摘要随着科 ...

  2. 基于8086简易电子琴系统仿真设计-基于8086红外自动门控制系统设计-基于单片机8x8矩阵键盘两机串口通信-基于单片机8层电梯控制系统仿真设计-基于单片机ADC0809和DAC0832模数和数模设计

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  3. 基于单片机家具窗帘控制系统设计、基于单片机路灯教室灯光家具智能控制设计-基于单片机简易电饭煲电饭锅仿真系统设计、基于单片机酒精检测控制系统仿真设计-设计资料

    1426基于单片机酒精检测控制系统仿真设计-全套资料 (1)  学习气体测量传感器的原理和使用,并完成数据采集.调理电路的设计: (2)  学习单片机系统的设计及编程,完成系统整体设计: (3)  通 ...

  4. 单片机多功能电子琴课设_基于单片机的电子琴设计(最终版)最新版

    <基于单片机的电子琴设计.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的电子琴设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里 ...

  5. 基于8086简易电子琴系统仿真设计、基于8086红外自动门控制胸设计-全套设计资料【转发】

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  6. 三菱PLC分拣程序基于三菱FX系列的分拣程序,可用于学习

    三菱PLC分拣程序基于三菱FX系列的分拣程序,可用于学习 ID:7620637759674572猫猫工控

  7. 简易电子琴c语言程序,基于单片机的简易电子琴设计(C语言编程).docx

    单片机课程设计报告 基于单片机的简易电子琴设计 摘 要 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器.它在现代音乐 扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经 ...

  8. 单片机spwm c语言程序,基于单片机SPWM简易逆变电路及程序设计

    作为当今电子行业一种比较成熟的,目前使用较广泛的PWM法,SPWM法是以冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同的结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM ...

  9. 29、基于51单片机简易电子琴(有存储功能)系统设计

    摘  要 随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶.我们都会抽空欣赏世界名曲,作为对精神的洗礼.本论文设计一个基于单片机的简易电子琴.我们对于电子琴如何实 ...

最新文章

  1. SubVersion(SVN) 服务器Windows安装指南
  2. python奇数和_请问python如何判断奇偶数?
  3. pycharm和python在mac里安装_MAC安装python-opencv及在pycharm下的配置
  4. cf#582div3 D——暴力
  5. POJ 2395 Out of Hay
  6. 重置系统_开课了,如何重置电脑系统?1分钟教会你!
  7. 用OSSIM平台轻松发现“心脏出血”漏洞
  8. poj 2181 jumping cows
  9. Matter-JS Composites 混合材料 · 下
  10. 课堂笔记_图形学基础课程_简单认知00
  11. matlab基于技术的磨皮,美颜磨皮SDK中关于磨皮算法的大致实现流程
  12. 关于PD协议的简要说明
  13. python代码画樱花教程-如何用Python代码实现樱花树效果
  14. 后台管理登陆注册跳转以及基础模板 附Gitlab源码
  15. 单片机开发和嵌入式开发流程图
  16. 【模型部署】NNI:剪枝和量化
  17. 利用Python实现股票可视做T盈亏
  18. 微信小程序显示折线图
  19. 西乡中学2021艺体生高考成绩查询,2019年西乡中学特长生评分标准
  20. [wx·part]微信小程序通过positon:absolute布局解决元素浮动显示后,如何设置显示位置问题

热门文章

  1. linux里gdb配置插件peda, gef, gdbinit
  2. 对抗疫情,让我们来一场酷酷的在线考试
  3. matlab脚本页怎么还原,当前的页面脚本发生错误matlab
  4. Java毕设项目社区团购系统计算机(附源码+系统+数据库+LW)
  5. 人流量统计、特定目标搜索+跟踪!
  6. “华为天才少年”自制百大Up奖杯,网友:技术难度不高侮辱性极强
  7. C语言实现的音乐播放器
  8. 用ArcGIS制作专题地图
  9. audio标签的样式修改
  10. 忆阻器与深度学习-忆阻加速神经网络