找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2174|回复: 0
收起左侧

基于51单片机的电子琴程序设计

[复制链接]
ID:919266 发表于 2021-5-11 13:16 | 显示全部楼层 |阅读模式
使用的是普中开发板
可实现音乐播放和自己弹琴功能
通过keil4软件编程,在普中科技HC6800-MS开发板上实现两个主要功能,电子琴功能与音乐播放器功能。本次项目的设计目标有两个
一:按下矩阵键盘上的不同按键发出不同的音调实现电子琴功能;
二:按下指定按键开始播放预设音乐,再次按动播放结束,实现音乐播放器功能。

0698b22a0c9a2d624290cf6547545ff1.png e1af6797ce227bdca199bf12f43e3009.png

单片机源程序如下:
  1. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  2. #include "SoundPlay.h"
  3. #include"music.h"

  4. extern int num;
  5. extern u8 piano;
  6. extern u8 KeyValue;
  7. extern unsigned char Sound_Temp_TH0,Sound_Temp_TL0;        //音符定时器初值暂存  

  8. unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};


  9. // 频率-半周期数据表 高八位 本软件共保存了四个八度的28个频率数据
  10. code unsigned char FREQH[] = {
  11. 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC}; //1,2,3,4,5,6,7,i
  12.                 //超高音 1234567

  13. // 频率-半周期数据表 低八位
  14. code unsigned char FREQL[] = {
  15. 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F};                 //超高音 1234567

  16. void Delay1ms(unsigned int count)
  17. {
  18.         unsigned int i,j;
  19.         for(i=0;i<count;i++)
  20.         for(j=0;j<120;j++);
  21. }

  22. void main()
  23. {
  24.         InitialSound();
  25.         while(1)
  26.         {              
  27.                 while(piano){
  28.                    keypros();
  29.                                    if(KeyValue>=5&&KeyValue<=12)
  30.                                                 P0 = LED7Code[(KeyValue-4)%16]&0x7f;
  31.                    if((piano==1)&&(GPIO_KEY!=0xf0)){
  32.                                                 if(KeyValue>=4){
  33.                                                         Sound_Temp_TH0 = FREQH[KeyValue-5];
  34.                                                         Sound_Temp_TL0 = FREQL[KeyValue-5];
  35.                                                            TH0 = Sound_Temp_TH0; //控制音调
  36.                                                         TL0 = Sound_Temp_TL0;
  37.                                                         TR0 = 1; //启动T0, 由T0输出方波去发音
  38.                                                 }
  39.                                         }
  40.                         else  
  41.                         {
  42.                                     TR0 = 0;
  43.                         }
  44.                 }
  45.                 P0=0xFF;
  46.                 if(piano==0){
  47.                         if(num==1){
  48.                                 Play(Music_Girl,0,3,360);
  49.                                 Delay1ms(500);
  50.                         }
  51.                         if(num==2){
  52.                                 Play(Music_Same,0,3,360);
  53.                                 Delay1ms(500);
  54.                         }
  55.                         if(num==3){
  56.                                 Play(Music_Two,0,3,360);
  57.                                 Delay1ms(500);
  58.                         }
  59.                 }
  60.         }
  61. }
复制代码
51hei.png

所有资料51hei提供下载:
音乐播放器程序.zip (56.38 KB, 下载次数: 12)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表