標(biāo)題: 基于51單片機(jī)的無線音樂門鈴設(shè)計 [打印本頁]

作者: 33237654    時間: 2018-6-8 23:36
標(biāo)題: 基于51單片機(jī)的無線音樂門鈴設(shè)計
  采用STC89C51單片機(jī)作為主控制器,外部加上三極管驅(qū)動放音設(shè)備,超再生無線模塊實現(xiàn)無線的鏈接。

制作出來的實物圖如下:



遙控器采用PT2262編碼芯片對信號編碼,由超再生無線模塊發(fā)射信號。

遙控器結(jié)構(gòu)圖:


電路原理圖如下:


◆發(fā)射器采用電池供電,靜態(tài)電流;
◆采用無線電進(jìn)行遙控,具有一定的遙控距離;
◆在同一區(qū)域范圍內(nèi)能有多套系統(tǒng)同時工作而相互間不影響;
◆門鈴按鍵按下有音樂響起;
◆主機(jī)有復(fù)位按鍵,可以隨時關(guān)閉音樂;
◆門鈴的音樂為3首以上,可以通過程序更改。


pt2262與pt2272無線模塊的焊接:
3、模塊焊接好后,每個模塊的ANT都要接一個23cm長的天線(導(dǎo)線就可以)。這樣遙控距離更遠(yuǎn)!


無線音樂門鈴元件清單:

接收:
1.7*9萬用板
2.8歐喇叭
3.自鎖開關(guān)
4.12m晶振
5.10k電阻
6.1k電阻*2
7.820k(振蕩電阻)
8.30pf電容*2
9.22uf電容
10.40腳IC座
11.18腳IC座
12.PT2272-M4
13.3MM紅色LED燈
14.stc89c51
15.315接收模塊
16.4P母座
17.8550三極管
18.usb電源線+DC插頭
發(fā)射:
1.    7*9萬用板
2.18腳ic插座
3.PT2262
4.4.7m電阻(振蕩電阻)
5.10k*2
6.3mm紅色led燈
7.輕觸按鍵
8.SIP3母座
9.315發(fā)射
10.電池
11.電池盒

單片機(jī)源碼:
  1. include<REG51.H>
  2. #define sound_amount 5 // 歌曲的數(shù)量
  3. sbit pause=P2^5; // 播放 暫停
  4. sbit speaker=P2^7; // 無源蜂鳴器
  5. //////////////////////////////////////////////
  6. unsigned char timer0h,timer0l,time;//timer0h,timer0l 為定時器 T0的高低位初
  7. 值,time 為對應(yīng)的節(jié)拍時間
  8. unsigned char music_num,num; //music_num 為歌曲編號 ,music_num=0表示剛
  9. 開機(jī)時的狀態(tài) ,num 是查找歌曲數(shù)據(jù)表的地址
  10. signed char fre; // 對應(yīng)頻率數(shù)據(jù)表的地址
  11. bit play_enable; // 歌曲播放的使能標(biāo)志位 , 用于播放 暫停
  12. void delay(unsigned char t);  // 延時子函數(shù) , 控制發(fā)音的時間長度
  13. void delayms(unsigned int t);  // 普通延時子程序 , 可用于按鍵消抖
  14. void song(void);  // 演奏一個音符
  15. void music_play(void); // 播放歌曲
  16. //////////////////////////////////////////////
  17. // 每三個數(shù)字 , 代表一個音符
  18. // 第一個數(shù)字是音符的數(shù)值 1234567之一( 第幾個音 ), 代表哆來咪發(fā) ...
  19. // 第二個數(shù)字是 0123之一, 代表低音 中音 高音 超高音 ( 第幾個八度 )
  20. // 第三個數(shù)字是時間長度 , 以半拍為單位 , 樂曲數(shù)據(jù)表的結(jié)尾是三個 0
  21. //////////////////////////////////////////////
  22. // 《祝你生日快樂》
  23. unsigned char code song1[]={
  24. 5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,
  25. 5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
  26. 5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,
  27. 4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4, 0,0,0};
  28. - 29 -
  29. // 《世上只有媽媽好》
  30. unsigned char code song2[]={
  31. 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,
  32. //6,2,3 代表 6, 中音,3 個半拍 ;
  33. //5,2,1 代表 5, 中音,1 個半拍 ;
  34. //3,2,2 代表 3, 中音,2 個半拍 ;
  35. //5,2,2 代表 5, 中音,2 個半拍 ;
  36. //1,3,2 代表 1, 高音,2 個半拍 ;
  37. //...
  38. 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1,
  39. 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2,
  40. 1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};
  41. // 《當(dāng)你孤單你會想起誰》
  42. unsigned char code song3[]={
  43. 3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,2, 5,2,2, 2,2,2, 2,2,3,
  44. 1,2,2, 1,2,1, 2,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3,
  45. 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1,
  46. 1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6,
  47. 0,0,0 };
  48. // 《鄉(xiāng)間小路》
  49. unsigned char code song4[]={
  50. 3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,
  51. 6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1,
  52. 2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,1,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,
  53. 4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1,
  54. 5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2,
  55. 3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1,
  56. 6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1,
  57. - 30 -
  58. 3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1,
  59. 6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0};
  60. // 《送別》
  61. unsigned char code song5[]={
  62. 5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,
  63. 5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2,
  64. 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1,
  65. 3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,
  66. 7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1,
  67. 1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2,
  68. 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};
  69. // 頻率- 半周期數(shù)據(jù)表 高八位 共保存了四個八度的 28 個頻率數(shù)據(jù)
  70. unsigned char code FREQH[]={
  71. 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, // 低音 1234567
  72. 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
  73. 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, // 高音 234567
  74. 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; // 超高音 1234567
  75. // 頻率- 半周期數(shù)據(jù)表 低八位
  76. unsigned char code FREQL[]={
  77. 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, // 低音 1234567
  78. 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  79. 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, // 高音 234567
  80. 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; // 超高音 1234567
  81. void main(void)
  82. {
  83. - 31 -
  84. TMOD=0x11; //T0 T1 均在工作方式 1
  85. ET0=1; //T0 開中斷
  86. EA=1; //CPU 開中斷
  87. while(1)
  88. {
  89. music_play();  // 根據(jù)當(dāng)前狀態(tài)播放相應(yīng)歌曲的某個音符
  90. if(!pause)  // 暫停鍵處理
  91. {
  92. delayms(5);
  93. if(!pause)
  94. {
  95. if(music_num==0) //music_num=0 只有在剛開機(jī) , 且未按
  96. 下暫停鍵時存在 , 表示剛開機(jī)時的狀態(tài) , 按下后從第一首開始播放
  97. {
  98. music_num=1; // 歌曲序號置 1
  99. num=0; // 從頭播放
  100. play_enable=1;  // 允許播放
  101. }
  102. else
  103. {
  104. play_enable=~play_enable;
  105. speaker=1;
  106. }
  107. while(!pause)  // 若按著暫停鍵不放手時的處理
  108. {
  109. if(play_enable==0){}  // 如果是暫停,則顯示時
  110. 間不變 // (暫停時 play_enable==0 )
  111. }
  112. - 32 -
  113. }// 暫停鍵處理結(jié)束
  114. }//while 結(jié)束
  115. }
  116. }
  117. void delayms(unsigned int t)  //MS 延時子程序
  118. {
  119. unsigned int i,j;
  120. for(i=0;i<t;i++)
  121. {
  122. for(j=0;j<123;j++)
  123. ;
  124. }
  125. }
  126. void delay(unsigned char t)  // 延時子函數(shù) , 控制發(fā)音的時間長度 , 每個節(jié)拍
  127. 0.4S
  128. {
  129. unsigned char t1;
  130. unsigned long t2;
  131. for(t1=0;t1<t;t1++)  // 嵌套循環(huán) , 共延時 t 個半拍
  132. {
  133. for(t2=0;t2<8000;t2++) // 延時期間 , 可進(jìn)入 T0中斷去發(fā)音
  134. }
  135. TR0=0;  // 關(guān)閉 T0, 停止發(fā)音
  136. }
  137. void timer0(void) interrupt 1 //T0 中斷程序 , 控制發(fā)音的音調(diào)
  138. {
  139. speaker=!speaker;// 輸出方波 , 發(fā)音
  140. - 33 -
  141. TH0=timer0h;  // 下次的中斷時間 , 這個時間控制音調(diào)高低
  142. TL0=timer0l;
  143. }
  144. void song(void) // 演奏一個音符
  145. {
  146. TH0=timer0h; // 控制音調(diào)
  147. TL0=timer0l;
  148. TR0=1;  // 啟動 T0, 由 T0 輸出方波發(fā)音
  149. delay(time); // 每個音符的演奏時間
  150. }
  151. ///////////////////////////////////////////////////////////////////////////
  152. /////////
  153. void music_play(void)// 播放相應(yīng)歌曲的某個音符
  154. {
  155. if((music_num==1)&&(play_enable==1))
  156. {
  157. fre=song1[num]+7*song1[num+1]-1;// 第 i 個是音符 , 第 i+1 個是第幾
  158. 個八度
  159. timer0l=FREQL[fre];
  160. time=song1[num+2]; // 讀出時間長度數(shù)值
  161. num+=3;
  162. if(fre==-1)  // 判斷歌曲的結(jié)束位 , 結(jié)束后轉(zhuǎn)到下一首
  163. {
  164. num=0; // 下一首從頭播放
  165. music_num=2;
  166. play_enable=0;
  167. }
  168. song(); // 發(fā)出一個音符
  169. }
  170. - 34 -
  171. if((music_num==2)&&(play_enable==1))
  172. {
  173. fre=song2[num]+7*song2[num+1]-1;
  174. timer0h=FREQH[fre];
  175. timer0l=FREQL[fre];
  176. time=song2[num+2];
  177. num+=3;
  178. if(fre==-1)
  179. {
  180. play_enable=0;
  181. }
  182. song();
  183. }
  184. if((music_num==3)&&(play_enable==1))
  185. {
  186. fre=song3[num]+7*song3[num+1]-1;
  187. timer0h=FREQH[fre];
  188. timer0l=FREQL[fre];
  189. time=song3[num+2];
  190. num+=3;
  191. if(fre==-1)
  192. {
  193. num=0;
  194. music_num=4;
  195. play_enable=0;
  196. }
  197. song();
  198. if((music_num==4)&&(play_enable==1))
  199. {
  200. fre=song4[num]+7*song4[num+1]-1;
  201. - 35 -
  202. timer0h=FREQH[fre];
  203. num+=3;
  204. if(fre==-1)
  205. {
  206. num=0;
  207. music_num=5;
  208. play_enable=0;
  209. }
  210. song();
  211. }
  212. if((music_num==5)&&(play_enable==1))
  213. {
  214. fre=song5[num]+7*song5[num+1]-1;
  215. timer0h=FREQH[fre];
  216. timer0l=FREQL[fre];
  217. time=song5[num+2];
  218. num+=3;
  219. if(fre==-1)
  220. {
  221. num=0;
  222. music_num=1;
  223. play_enable=0;
  224. }
  225. song();
  226. }
  227. }
復(fù)制代碼



全部資料51hei下載地址:
無線音樂門鈴資料.rar (10.68 MB, 下載次數(shù): 179)



作者: QQQQQQQQQQQQQQ    時間: 2018-6-9 09:31
好資料,51黑有你更精彩!!!

作者: nanzhong174    時間: 2018-9-1 06:49
能通過改造無線鼠標(biāo)來制作無線門鈴嗎?鼠標(biāo)左擊,門鈴響。
作者: lijijian    時間: 2018-9-11 17:57
您好,請問有實物圖的原理圖嗎,您上面給的PCB圖與清單對應(yīng)不上

作者: 南城    時間: 2019-5-5 16:43
沒有仿真圖嘛?

作者: 陳陳陳陳陳陳。    時間: 2019-5-7 10:32
沒有仿真嗎
作者: 遷就    時間: 2019-5-7 17:57
謝謝分享
作者: liyuanttjb    時間: 2019-6-4 22:49
謝謝分享
作者: GVWN    時間: 2019-6-19 13:31
為什么我的門鈴沒聲音哈,程序哪里出現(xiàn)了缺少什么?

程序.png (62.66 KB, 下載次數(shù): 79)

程序.png

作者: slw7627    時間: 2020-5-18 21:24
感謝分享
作者: qiaomuyouzhi    時間: 2021-4-3 22:09
室友做這個玩,順便給你加了塊PCB,哈哈




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