博客
关于我
51单片机 音乐播放器
阅读量:362 次
发布时间:2019-03-04

本文共 9818 字,大约阅读时间需要 32 分钟。

//宏定义部分#define L1 262 //低音1#define L2 286 //低音2#define L3 311 //低音3#define L4 349 //低音4#define L5 392 //低音5#define L6 440 //低音6#define L7 494 //低音7#define Z1 523 //中音1#define Z2 587 //中音2#define Z3 659 //中音3#define Z4 698 //中音4#define Z5 784 //中音5#define Z6 880 //中音6#define Z7 987 //中音7#define H1 1046 //高音1#define H2 1174 //高音2#define H3 1318 //高音3#define H4 1396 //高音4#define H5 1567 //高音5#define H6 1760 //高音6#define H7 1975 //高音7//硬件端口定义sbit sound = P1 ^ 4; //蜂鸣器sbit KAISHI = P1 ^ 0; //开始sbit ZANTING = P1 ^ 1; //暂停sbit PRE_KEY = P1 ^ 2; //上一首sbit NEXT_KEY = P1 ^ 3; //下一首sbit yianjian = P1 ^ 5; //选择第1首歌的按键sbit eranjian = P1 ^ 6; //选择第2首歌的按键sbit sananjian = P1 ^ 7; //选择第3首歌的按键//程序变量定义unsigned int C;unsigned char u, t;unsigned char velocity = 60; //100ms一个拍子unsigned char press_key = 0; //按键按下状态unsigned char open_flag = 1; //1表示正在播放unsigned char music_crr = 0; //当前播放的音乐编号(0、1、2)//音乐节拍定义unsigned int code music0[] = { Z6, Z7, H1, Z7, H1, H3, Z7, Z3, Z3, Z6, Z5, Z6, H1, Z5, Z3, Z3, Z4, Z3, Z4, H1, Z3, H1, H1, H1, Z7, Z4, Z4, Z7, Z7, Z6, Z7, H1, Z7, H1, H3, Z7, Z3, Z3, Z6, Z5, Z6, Z5, Z3, Z3, Z4, H1, Z7, H1, H2, H2, H2, H1, H1, Z6, Z6, Z5, Z6, H1, Z5, Z3, Z4, H1, Z7, H1, H2, H5, H5, H2, Z5, Z5, Z6, Z6, Z3, Z2, Z3, Z5, Z3, Z2, Z1, Z1, Z2, Z1, 0xff};unsigned char code music0_JP[] = { 4, 4, 12, 4, 8, 8, 20, 4, 4, 12, 4, 8, 8, 20, 4, 4, 4, 12, 4, 8, 8, 20, 4, 4, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 2, 2, 4, 12, 8, 8};unsigned int code music1[] = { Z3, Z3, Z5, Z6, H1, H1, Z6, Z5, Z5, Z6, Z5, Z3, Z3, Z3, Z5, Z6, H1, H1, Z6, Z5, Z5, Z6, Z5, Z3, Z3, Z2, Z3, Z5, Z3, Z2, Z1, Z1, Z2, Z1, 0xff};unsigned char code music1_JP[] = { 16, 8, 8, 8, 8, 8, 8, 16, 8, 8, 32, 16, 8, 8, 32, 16, 16, 16, 8, 8, 16, 16, 32, 16, 8, 8, 16, 8, 8, 32, 1, 8, 8};unsigned int code music2[] = { H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6, H1, H2, H5, H5, H2, H1, H2, H2, Z1, H3, H3, H3, H2, H1, H2, H5, H5, H1, H1, H1, H1, Z6, Z7, H3, H3, Z5, Z6, H6, H5, H4, H3, H2, H1, H1, Z6};unsigned char code music2_JP[] = { 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 4, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 2, 2, 4, 4, 8, 8, 2, 2, 2, 2, 4, 4, 8, 4, 2, 2, 4, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2};//延时函数void delay(uint z) { uint x; while (z--) { for (x = 125; x > 0; x--) { ; } }}void delay1() { uint i, j; for (i = 0; i < velocity; i++) { for (j = 0; j < 125; j++) { ; } }}void init_timer() { EA = 1; //总中断使能 ET1 = 1; //定时器T1中断允许 TMOD &= 0x0f; //清除TMOD的低4位 TMOD |= 0x01; //使用定时器T1的模式1(13位计数器) TR1 = 1; //启动定时器T1 ET0 = 1; //定时器T0中断允许}unsigned char ScanKey() { if (KAISHI == 0) { delay(1); if (KAISHI == 0) { while (KAISHI == 0) { return 1; } } } if (ZANTING == 0) { delay(1); if (ZANTING == 0) { while (ZANTING == 0) { return 2; } } } if (PRE_KEY == 0) { delay(1); if (PRE_KEY == 0) { while (PRE_KEY == 0) { return 3; } } } if (NEXT_KEY == 0) { delay(1); if (NEXT_KEY == 0) { while (NEXT_KEY == 0) { return 4; } } } if (yianjian == 0) { delay(1); if (yianjian == 0) { while (yianjian == 0) { return 5; } } } if (eranjian == 0) { delay(1); if (eranjian == 0) { while (eranjian == 0) { return 6; } } } if (sananjian == 0) { delay(1); if (sananjian == 0) { while (sananjian == 0) { return 7; } } } return 0;}void delay_key() { if (press_key == 1) { open_flag = 1; press_key = 0; } if (press_key == 2) { open_flag = 0; press_key = 0; } if (press_key == 3) { press_key = 0; if (music_crr > 0) { music_crr = (music_crr - 1) % 3; } else { music_crr = 2; } LCD_write_char(9, 0, music_crr + '1'); rtc_hour = 0; rtc_min = 0; rtc_sec = 0; } if (press_key == 4) { press_key = 0; music_crr = (music_crr + 1) % 3; LCD_write_char(9, 0, music_crr + '1'); rtc_hour = 0; rtc_min = 0; rtc_sec = 0; } if (press_key == 5) { press_key = 0; music_crr = 0; LCD_write_char(9, 0, music_crr + '1'); rtc_hour = 0; rtc_min = 0; rtc_sec = 0; open_flag = 1; } if (press_key == 6) { press_key = 0; music_crr = 1; LCD_write_char(9, 0, music_crr + '1'); rtc_hour = 0; rtc_min = 0; rtc_sec = 0; open_flag = 1; } if (press_key == 7) { press_key = 0; music_crr = 2; LCD_write_char(9, 0, music_crr + '1'); rtc_hour = 0; rtc_min = 0; rtc_sec = 0; open_flag = 1; } if (open_flag == 1) { TR0 = 1; } else { TR0 = 0; } LCD_dis_TIME(6, 1, rtc_hour, rtc_min, rtc_sec);}void main() { LCD_init(); LCD_write_str(0, 0, " WELCOME!"); delay(1000); LCD_write_str(0, 0, "Playing: "); LCD_write_char(9, 0, '1'); LCD_write_str(0, 1, "Time:"); LCD_dis_TIME(6, 1, rtc_hour, rtc_min, rtc_sec); init_timer(); TR1 = 0; sound = 0; open_flag = 0; TR0 = 0; LCD_dis_TIME(6, 1, rtc_hour, rtc_min, rtc_sec); while (1) { press_key = ScanKey(); delay_key(); if (music_crr == 0 && open_flag == 1) { u = 0; changdu = sizeof(music0); while (music0[u] != 0xff) { press_key = ScanKey(); delay_key(); if (music_crr != 0) { init_timer(); TR1 = 0; sound = 1; break; } if (open_flag == 0) { while (open_flag == 0) { press_key = ScanKey(); delay_key(); } } C = 460830 / music0[u]; TH1 = (8192 - C) / 32; TL1 = (8192 - C) % 32; TR1 = 1; changdu--; for (t = 0; t < music0_JP[u]; t++) { delay1(); } TR1 = 0; u++; } init_timer(); TR1 = 0; sound = 1; } if (music_crr == 1 && open_flag == 1) { u = 0; changdu = sizeof(music1); while (music1[u] != 0xff) { press_key = ScanKey(); delay_key(); if (music_crr != 1) { init_timer(); TR1 = 0; sound = 1; break; } if (open_flag == 0) { while (open_flag == 0) { press_key = ScanKey(); delay_key(); } } C = 460830 / music1[u]; TH1 = (8192 - C) / 32; TL1 = (8192 - C) % 32; TR1 = 1; changdu--; for (t = 0; t < music1_JP[u]; t++) { delay1(); } TR1 = 0; u++; } init_timer(); TR1 = 0; sound = 1; } if (music_crr == 2 && open_flag == 1) { u = 0; changdu = sizeof(music2); while (music2[u] != 0xff) { press_key = ScanKey(); delay_key(); if (music_crr != 2) { init_timer(); TR1 = 0; sound = 1; break; } if (open_flag == 0) { while (open_flag == 0) { press_key = ScanKey(); delay_key(); } } C = 460830 / music2[u]; TH1 = (8192 - C) / 32; TL1 = (8192 - C) % 32; TR1 = 1; changdu--; for (t = 0; t < music2_JP[u] / 2; t++) { delay1(); } TR1 = 0; u++; } init_timer(); TR1 = 0; sound = 1; } }}void Time1() interrupt 3 { sound = !sound; TH1 = (8192 - C) / 32; TL1 = (8192 - C) % 32;}void Time0() interrupt 1 { TH0 = (65535 - 50000) / 255; TL0 = (65535 - 50000) % 255; num2++; if (num2 == 20) { num2 = 0; rtc_sec++; if (rtc_sec == 60) { rtc_sec = 0; rtc_min++; if (rtc_min == 60) { rtc_min = 0; rtc_hour++; if (rtc_hour == 24) { rtc_hour = 0; } } } }}

转载地址:http://fkce.baihongyu.com/

你可能感兴趣的文章
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>