標(biāo)題: 請問各位手里頭有沒有一些音普的延時代碼,現(xiàn)學(xué)蜂鳴器初級階段,想試試其他的 [打印本頁]

作者: 哈哈我哈哈    時間: 2018-10-15 21:52
標(biāo)題: 請問各位手里頭有沒有一些音普的延時代碼,現(xiàn)學(xué)蜂鳴器初級階段,想試試其他的
如上所說
在百度上找不到,如果方便的話可否告知這種延時代碼是怎么想出來的,感謝感謝。

作者: angmall    時間: 2018-10-16 05:52
我給你來個程序試試

  1. /*-----------------------------------------------
  2.   名稱:音樂播放
  3.   修改:無
  4.   內(nèi)容:
  5. ------------------------------------------------*/
  6. #include<reg52.h>        //包含頭文件,一般情況不需要改動?
  7.                          //頭文件包含特殊功能寄存器的定義
  8. /*------------------------------------------------
  9.                  硬件端口定義
  10. ------------------------------------------------*/
  11. sbit      SPK=P1^2;  //定義音樂輸出端口

  12. unsigned char Timer0_H,Timer0_L,Time;
  13.                          //世上只有媽媽好數(shù)據(jù)表
  14. code unsigned char MUSIC[]={          6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1,
  15.                                       6,2,4,      3,2,2,      5,2,1,    6,2,1,           5,2,2,         3,2,2,           1,2,1,
  16.                                       6,1,1,      5,2,1,      3,2,1,         2,2,4,           2,2,3,         3,2,1,    5,2,2,
  17.                                       5,2,1,      6,2,1,      3,2,2,         2,2,2,    1,2,4,         5,2,3,           3,2,1,
  18.                                       2,2,1,      1,2,1,      6,1,1,         1,2,1,           5,1,6,         0,0,0
  19.                                       };
  20.                          // 音階頻率表 高八位
  21. code unsigned char FREQH[]={
  22.                                 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  23.                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  24.                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  25.                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  26.                                } ;
  27.                          // 音階頻率表 低八位
  28. code unsigned char FREQL[]={
  29.                                  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  30.                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  31.                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  32.                                  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  33.                                 };
  34. /*------------------------------------------------
  35. uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  36. unsigned char 是定義無符號字符變量,其值的范圍是
  37. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  38. 長度如下 T=tx2+5 uS
  39. ------------------------------------------------*/
  40. void DelayUs2x(unsigned char t)
  41. {   
  42. while(--t);
  43. }
  44. /*------------------------------------------------
  45. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  46. unsigned char 是定義無符號字符變量,其值的范圍是
  47. 0~255 這里使用晶振12M,精確延時請使用匯編
  48. ------------------------------------------------*/
  49. void DelayMs(unsigned char t)
  50. {
  51.      
  52. while(t--)
  53. {
  54.      //大致延時1mS
  55.      DelayUs2x(245);
  56.          DelayUs2x(245);
  57. }
  58. }
  59. /*------------------------------------------------
  60.                 節(jié)拍延時函數(shù)
  61. 各調(diào)1/4節(jié)拍時間:
  62. 調(diào)4/4  125ms
  63. 調(diào)2/4  250ms
  64. 調(diào)3/4  187ms
  65. ------------------------------------------------*/
  66. void delay(unsigned char t)
  67. {
  68.     unsigned char i;
  69.         for(i=0;i<t;i++)
  70.             DelayMs(250);
  71.     TR0=0;
  72. }
  73. /*------------------------------------------------
  74.                定時器0中斷
  75. ------------------------------------------------*/
  76. void TIM0_ISR() interrupt 1
  77. {
  78. TR0=0;      
  79. SPK=!SPK;
  80. TH0=Timer0_H;
  81. TL0=Timer0_L;
  82. TR0=1;
  83. }
  84. /*------------------------------------------------
  85.                 歌曲處理函數(shù)
  86. ------------------------------------------------*/
  87. void Song()
  88. {
  89. TH0=Timer0_H;//賦值定時器時間,決定頻率
  90. TL0=Timer0_L;
  91. TR0=1;       //打開定時器
  92. delay(Time); //延時所需要的節(jié)拍                     
  93. }
  94. /*------------------------------------------------
  95.                 主函數(shù)
  96. ------------------------------------------------*/
  97. void main(void)
  98. {
  99. unsigned char k,i;
  100. TMOD|=0x01; //置定時器0工作方式1
  101. EA=1;       //打開全局中斷
  102. ET0=1;      //打開定時0中斷
  103. while(1)
  104.       {
  105.        i=0;  
  106.        while(i<100)
  107.                 {         //音樂數(shù)組長度 ,唱完從頭再來        
  108.             k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數(shù)據(jù)
  109.             Timer0_H=FREQH[k];
  110.             Timer0_L=FREQL[k];
  111.             Time=MUSIC[i+2];          //節(jié)拍時長
  112.             i=i+3;
  113.             Song();
  114.            }
  115.        }
  116.   }
復(fù)制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1