我把程序加了注释,去掉了让人不好理解的和无实际作用的暂停函数,修正了音律赋值代码后音准更准了,要换歌自己按前段演示的音符把简谱编入音律符节拍数组即可,才学了2周单片机,这是我仔细消化后的改进了前辈的作业。

#include #define uchar unsigned charsbit beepIO=P0^7; //定义蜂鸣器端口为p0^7,根据单片机实际蜂鸣器实际接口改变uchar m,n;     //定义4个八度每八度12分音律共48音律uchar code T[49][2]={{0,0},//定义音律49个二维数组{0xF9,0x1F},{0xF9,0x82},{0xF9,0xDF},{0xFA,0x37},{0xFA,0x8A},{0xFA,0xD8},{0xFB,0x23},{0xFB,0x68},{0xFB,0xAA},{0xFB,0xE9},{0xFC,0x24},{0xFC,0x5B},{0xFC,0x8F},{0xFC,0xC1},{0xFC,0xEF},{0xFD,0x1B},{0xFD,0x45},{0xFD,0x6C},{0xFD,0x91},{0xFD,0xB4},{0xFD,0xD5},{0xFD,0xF4},{0xFE,0x12},{0xFE,0x2D},{0xFE,0x48},{0xFE,0x60},{0xFE,0x78},{0xFE,0x86},{0xFE,0xA3},{0xFE,0xB6},{0xFE,0xC9},{0xFE,0xDA},{0xFF,0xEB},{0xFE,0xFA},{0xFF,0x09},{0xFF,0x17},{0xFF,0x24},{0xFF,0x30},{0xFF,0x3C},{0xFF,0x47},{0xFF,0x51},{0xFF,0x5B},{0xFF,0x64},{0xFF,0x6D},{0xFF,0x75},{0xFF,0x7D},{0xFF,0x84},{0xFF,0x8B}};uchar code music[][2]={{0,4},//定义曲谱数组,前数为音律,后数为音符节拍 ,要换歌改变简谱对应的音律号即可{0,1},{1,1},{3,1},{5,1},{6,1},{8,1},{10,1},{12,1},{13,1},//演示超低音八度 123457671{0,1},{13,1},{15,1},{17,1},{18,1},{20,1},{22,1},{24,1},{25,1},//演示低音八度12345671{0,1},{25,1},{27,1},{29,1},{30,1},{32,1},{34,1},{36,1},{37,1},//演示中音八度12345671{0,1},{37,1},{39,1},{41,1},{42,1},{44,1},{46,1},{48,2},//演示高音八度 1234567{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{14,8},{19,4},{21,4},{24,4},{21,4},{19,16},//记录菊花台简谱歌词:0553236 23532 天青色等烟雨 而我在等你{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{12,8},{19,4},{21,4},{24,4},{19,4},{17,16},//简谱歌词:0553235 23521 炊烟袅袅升起 隔江千万里{0,4},{17,4},{19,4},{21,4},{24,4},{26,4},{24,4},{22,4},{24,4},{21,4},{21,4},{19,4},{19,16},//简谱歌词:01235654 53322 在平地书刻你房间上的飘影{0,4},{17,4},{19,4},{17,4},{17,4},{19,4},{17,4},{19,4},{19,4},{21,8},{24,4},{21,4},{21,12},//简谱歌词:就当我为遇见你伏笔{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{14,8},{19,4},{21,4},{24,4},{21,4},{19,16}, //简谱歌词:0553236 23532 天青色等烟雨 而我在等你{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{12,8},{19,4},{21,4},{24,4},{19,4},{17,16}, //简谱歌词:0553235 23521 月色被打捞起 掩盖了结局{0,4},{17,4},{19,4},{21,4},{24,4},{26,4},{24,4},{22,4},{24,4},{21,4},{21,4},{19,4},{19,12},//简谱歌词:0123 5654 5332 25 322 11 如传世的青花瓷在独自美丽{12,4},{21,8},{19,8},{19,4},{17,20},                                           //简谱歌词:你眼带笑意{0xFF,0xFF}}; //歌曲结尾标识void delay(uchar p)  //延时函数  无符号字符型变量{uchar i,j;     //定义无符号字符型变量J和Ifor(;p>0;p--)  // 此处P值即主函数的n值节拍个数for(i=181;i>0;i--) //延时181*181个机器周期约25毫秒,即一个1/16节拍for(j=181;j>0;j--);}  void T0_int() interrupt 1{beepIO=!beepIO;  //蜂鸣器翻转发声TH0=T[m][0]; TL0=T[m][1]; //音律延时周期次数码表赋给定时寄存器作为计数初始值,每TH0TL0个机器周期触发蜂鸣器端口翻转,演奏出不同音符}void main(){uchar i=0;      //定义无符号字符型变量i,初始值为0TMOD=0x01; EA=1; ET0=1;  //开启T0定时16位方式,总中断开启,开启T0外部中断请求while(1) //开始曲谱演奏,循环无限重复{m=music[ i][0];n=music[ i][1];  //将音律号赋值给m, 将节拍号赋值给nif(m==0x00)       //如果音律号为0,{TR0=0;delay(n);i++;}     //关闭计时器,延迟n拍,将循环数I加1 ,准备读下一个音符else if(m==0xFF)     //否则如果音律数为FF{TR0=0;delay(30);i=0;}     //开启节拍延时30个1/16节拍,歌曲停顿2秒,将循环数I置0else if(m==music[i+1][0])  // 否则如果把下一个音律号数给变量m{TR0=1;delay(n);TR0=0;i++;} //定时器0打开延迟n拍,关闭定时器T0,读下一个音符,循环数加1读下一个音律else     //音符若不为零{TR0=1;delay(n);i++;}//打开定时器,延时n个1/16拍,循环数I加1 ,准备演奏下一个音符}}

青花瓷音乐的单片机c语言程序,单片机蜂鸣器演奏青花瓷的程序相关推荐

  1. 单片机c语言实验,单片机实验C语言编程.doc

    单片机实验C语言编程.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...

  2. 单片机c语言 u16,单片机C语言的误用

    单片机C语言的误用 导语:在学习单片机的时候才真正知道C语言是什么它是来干什么的,但是C语言用到嵌入式只是它小小的一部分他的应用还有很多地方呢,也经常出现误用,让我们了解一下吧! 我们是不是在写程序的 ...

  3. 适合自学单片机c语言教材,单片机编程入门看什么书 盘点单片机初学者适合看的书...

    本篇文章盘点:单片机编程入门看什么书.其实学习单片机重点就是C语言,其次实践重要,学习单片机不光要看书,建议初学者多多实践,自己做一些尝试性的开发.话不多说,下面就来盘点,初学者单片机编程入门适合看什 ...

  4. 单片机c51语言变量,单片机c语言教程:C51变量

    上课所提到变量就是一种在程序执行过程中其值能不断变化的量.要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间.定义一个变量的格式如下: ...

  5. 单片机c语言除法,单片机C语言知识点全攻略

    单片机C语言知识点全攻略 为了让有需要的朋友进一步了解单片机C语言知识,下面的文章将为大家讲解单片机C语言的知识内容,欢迎学习! C51运算符和表达式 运算符,双目运算符和三目运算符.单目就是指需要有 ...

  6. 单片机c语言字符,单片机C语言(一) - 控制/MCU - 电子发烧友网

    第三课.C51数据类型 每写一个程序,总离不开数据的应用,在学习 c51 语言的过程中掌握理解数据类型也是 很关键的.先看表 3-1,表中列出了 KEIL uVision2 单片机c语言编译器所支持的 ...

  7. stm单片机c语言编译,单片机开发之C语言编程基本规范

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...

  8. c51单片机的语言,51单片机,stm32,arduino都是用什么语言进行编程的?

    51单片机,STM32单片机用汇编或者C语言,现在基本都用C语言编程,Arduino有自己的编程环境,用户也是用C语言编程. 51单片机的编程 51单片机进入中国比较早,在早前用汇编编程比较多,我在上 ...

  9. 单片机 c语言 可控硅,单片机控制可控硅电路

    可用于单片机控制可控硅电路中,可减小产品的体积和重量.-- 为什么要分开用R1.R2.R3呢?都是串一起的,用一个电阻不行吗? 楼主做过零检测做什么用? 1.为了增加安全性 2.控制可控硅输出功率 如 ...

  10. c语言访问dph 单片机,(c语言版)单片机复习题(15页)-原创力文档

    单片机复习题 一.名词解释 1.时序:按照时间顺序显示的对象(或引脚.事件.信息)序列关系. 2.指令:CPU 用于指挥功能部件完成某一指定动作的指示和命令. 3.变量:在程序执行过程中,数值可以发生 ...

最新文章

  1. Get了!用Python制作数据预测集成工具 | 附代码
  2. 小程序页面之间的通讯利器 - nsevent
  3. 怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
  4. mac 黑窗口连接mysql_Mac系统Python、PyCharm安装及使用方法详解
  5. 带你剖析鸿蒙轻内核任务栈的源代码
  6. linux脚本自动修改网卡,Linux脚本程序自动修改网卡配置文件中的MAC地址
  7. caffe 利用Python API 做数据输入层
  8. Linux下替代grep高效文本搜索工具
  9. android ResideMenu使用
  10. 高效办公之Windows高效技巧提高你的工作效率
  11. Java开发面试书籍,28天肝完阿里面试通关宝典
  12. Go语言开发第1课-环境搭建及简单程序入门
  13. TQ2440开发板移植UBOOT-2010.06总结(2)
  14. 静态代理的实现-模拟中介代理房东出租房子给房客
  15. python win10 捕获 弹出窗口_[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录...
  16. CCSV5菜单栏中没有Tools按钮,如何显示出来?
  17. flask之flash
  18. 如何使用Towify在小程序中实现夜间模式和日间模式的自由切换?
  19. 杭州(含嘉兴,绍兴,金华,湖州,义乌)Uber优步司机奖励政策(1月25日~1月31日)...
  20. 马化腾: 你想想不充钱能不能玩这游戏? 丁磊:你仔细想想不充钱能不能玩这游戏? 张栋:CNM我就问你不充钱能玩我运营的游戏吗?...

热门文章

  1. nginx部署前端代码
  2. VB.NET连接SQL数据库
  3. pic单片机汇编 c语言,PIC单片机汇编语言指令详解
  4. DSP28335之中断系统笔记
  5. 什么是“元认知”?用具体的例子易懂地解说教育、商务中大受关注的能力!
  6. WEB3.0全球高峰论坛暨2022中民协分布式存储专委会新春团拜会即将隆重启幕
  7. w25qxx SPI读取数据出来为全FF
  8. Graph DataBase介绍
  9. 初识 InnoDB存储引擎
  10. mybatis代码自动生成工具-MyBatis Generator