基于51单片机蜂鸣器的音乐播放器设计C

原理图:

基于51单片机蜂鸣器的音乐播放器设计C

代码:

  1. #include <reg51.h>
  2. #include <stdio.h>
  3. sbit beep = P2^3;
  4. unsigned char timer0h, timer0l, time;
  5. code unsigned char high[] = {
  6.     0xF8, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC,//低音1234567
  7.     0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,//中音1234567 
  8.     0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF,//高音1234567
  9. };
  10. code unsigned char low[] = {
  11.     0x8C, 0x56, 0x22, 0x64, 0x04, 0x90, 0x0C,//低音1234567
  12.     0x44, 0xAA, 0x08, 0x32, 0x82, 0xC8, 0x06,//中音1234567
  13.     0x22, 0x56, 0x84, 0x9A, 0xC0, 0xE4, 0x02,//高音1234567
  14. };
  15. code unsigned char music[] = {
  16.    5,2,1,3,2,1,5,2,1,3,2,1,5,2,1,3,2,1,1,2,2,
  17.    2,2,1,4,2,1,3,2,1,2,2,1,5,2,2,
  18.    5,2,1,3,2,1,5,2,1,3,2,1,5,2,1,3,2,1,1,2,2,
  19.    2,2,1,4,2,1,3,2,1,2,2,1,1,2,3,
  20.    2,2,1,2,2,1,4,2,1,4,2,1,3,2,1,3,2,1,2,2,1,5,2,2,
  21.    2,2,1,4,2,1,3,2,1,2,2,1,5,2,2,
  22.    5,2,1,3,2,1,5,2,1,3,2,1,5,2,1,3,2,1,1,2,2,
  23.    2,2,1,4,2,1,3,2,1,2,2,1,1,2,3,
  24.    0,0,0,
  25.    };//《我是一个粉刷匠》可更改此处代码播放不同歌曲
  26. void t0int() interrupt 1 //T0中断程序,控制发音的音调
  27. {
  28. TR0 = 0; //先关闭T0
  29. beep = !beep; //输出方波, 发音
  30. TH0 = timer0h; //下次的中断时间, 这个时间, 控制音调高低
  31. TL0 = timer0l;
  32. TR0 = 1; //启动T0
  33. }
  34. void delay(unsigned char time) //延时程序,控制发音的时间长度
  35. {
  36. unsigned char i;
  37. unsigned long j;
  38. for(i = 0; i < time; i++) //双重循环, 共延时t个半拍
  39. for(j = 0; j < 5000; j++); //延时期间, 可进入T0中断去发音
  40. TR0 = 0; //关闭T0, 停止发音
  41. }
  42. void song() //演奏一个音符
  43. {
  44. TH0 = timer0h; //控制音调
  45. TL0 = timer0l;
  46. TR0 = 1; //启动T0, 由T0输出方波去发音
  47. delay(time); //控制时间长度
  48. }
  49. void main(void)
  50. {
  51. unsigned char k, i;
  52. TMOD = 0x01; //置T0定时工作方式1
  53. ET0 = 1; //开T0中断
  54. EA = 1; 
  55. while(1) {
  56. i = 0;
  57. time = 1;
  58. while(time) {
  59. k = music[i] + 7 * music[i + 1] - 1;
  60. //第i个是音符, 第i+1个是第几个八度
  61. timer0h = high[k]; 
  62. timer0l = low[k]; 
  63. time = music[i + 2]; 
  64. i += 3;
  65. song(); //发出一个音符
  66. }
  67. }
  68. }