找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6412|回復(fù): 0
收起左側(cè)

單片機控制蜂鳴器發(fā)出1~7音階

[復(fù)制鏈接]
ID:662089 發(fā)表于 2020-8-2 20:13 | 顯示全部樓層 |閱讀模式
這是關(guān)于51單片機驅(qū)動蜂鳴器的一個很簡單的代碼。主要功能是依次輸出 do re mi fa so la si,然后反復(fù)循環(huán)輸出。

單片機源程序如下:
  1. #include<reg52.h>
  2. /*反復(fù)輸出1~7七個音階*/
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;
  5. sbit beep=P1^5;
  6. sbit led=P2^0;
  7. /*C調(diào)音符對應(yīng)的hz:1:523 1#:553 2:586 2#:621 3:658 4:697
  8.                    4#:739 5:783 5#:830 6:879 6#:931 7:987
  9.                                    根據(jù)T=1/f,單片機通過對beep的IO口反復(fù)跳轉(zhuǎn)電平從而輸出相應(yīng)的頻率
  10.                                    輸出的每一個脈沖的高電平和低電平時間都為T的一半
  11. C調(diào)音符對應(yīng)的小時間為:1:956;  2:853; 3:760; 4:717; 5:639; 6:569; 7:507;
  12.   關(guān)于節(jié)拍:設(shè)四分音符一拍等于400ms;則八分音符一拍等于200ms;十六分音符一拍等于100ms;                                            
  13. */

  14. int csign[]={956,853,760,717,639,569,507};
  15. int tho[]={0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe};//高位定時器的值
  16. int tlo[]={0x44,0xab,0x08,0x33,0x81,0xc7,0x05};//低位定時器的值
  17. static u8 k=0;
  18. static int HT,LT;//高低位定時器的值
  19. void Time0_init()
  20. {
  21. TMOD|=0X01;
  22. TR0=1;
  23. TH0=HT;
  24. TL0=LT;
  25. ET0=1;
  26. EA=1;
  27. }
  28. void delay(u16 ms){u16 b;for(ms;ms>0;ms--)for(b=120;b>0;b--);}

  29. void main()
  30. {


  31. Time0_init();
  32. while(1)
  33. {
  34. HT=tho[k];
  35. LT=tlo[k];
  36. k++;
  37. if(k>6)k=0;
  38. delay(1000);TR0=0;
  39. delay(1000);TR0=1;
  40. }
  41. }

  42. void intf() interrupt 1
  43. {
  44. TH0=HT;
  45. TL0=LT;
  46. beep=~beep;
  47. }
復(fù)制代碼

hex文件51hei提供下載:
蜂鳴器輸出1~7音階.rar (18.83 KB, 下載次數(shù): 21)


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表