久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7288|回復: 4
打印 上一主題 下一主題
收起左側

51單片機蜂鳴器生日歌程序中的幾個疑問,65536是什么意思呢?

[復制鏈接]
跳轉到指定樓層
樓主
ID:688693 發表于 2020-3-30 21:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
初學單片機(c語言也比較菜),望大佬救救我,萬分感謝。以下是使用無源蜂鳴器播放的生日歌,
請問65536是什么意思呢?
請問T是計數值是機械周期的個數嗎?
請問程序中的延時程序的for語句中的120是什么意思,這個for語句是做什么呢?
請問程序的主函數中的for(k=0;k<SONG_TONE[ i]/3;k++); 是什么意思呢?
請問程序的主函數中的DelayMS(10); i++; 是做什么呢?


  1. T=65536-N=65536-Fi/2/Fr
  2. 計算舉例:
  3. 設K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)
  4. 的計數值。
  5. T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr
  6. 低音DO 的T=65536-500000/262=63627
  7. 中音DO 的T=65536-500000/523=64580
  8. 高音DO 的T=65536-500000/1047=65059
  9. 參考程序:
  10. #include<reg51.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. sbit BEEP=P3^7;
  14. // 生日快樂歌的音符頻率表,不同頻率由不同的延時來決定
  15. uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
  16. 212,212,106,126,159,169,190,119,119,126,159,142,159,0};
  17. // 生日快樂歌節拍表,節拍決定每個音符的演奏長短
  18. uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
  19. 9,3,12,12,12,12,12,9,3,12,12,12,24,0};
  20. // 延時
  21. void DelayMS(uint x)
  22. {
  23. uchar t;
  24. while(x--) for(t=0;t<120;t++);
  25. }
  26. // 播放函數
  27. void PlayMusic()
  28. {
  29. uint i=0,j,k;
  30. while(SONG_LONG[ i]!=0||SONG_TONE[ i]!=0)
  31. { //播放各個音符,SONG_LONG 為拍子長度
  32. for(j=0;j<SONG_LONG[ i]*20;j++)
  33. {
  34. BEEP=~BEEP;
  35. //SONG_TONE延時表決定了每個音符的頻率
  36. for(k=0;k<SONG_TONE[ i]/3;k++);
  37. }
  38. DelayMS(10);
  39. i++;
  40. }
  41. }
  42. void main()
  43. {
  44. BEEP=0;
  45. while(1)
  46. {
  47. PlayMusic(); //播放生日快樂
  48. DelayMS(500); //播放完后暫停一段時間
  49. }
  50. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-3-31 01:15 | 只看該作者
請問65536是什么意思呢?
是定時計數器TH0TL0計數溢出時的最大數,學好象兩位十進制溢出時是100
請問T是計數值是機械周期的個數嗎?
T是定時計數器從初始值至溢出時的計數值,如兩位十進制 初始值是90,只需10次就溢出
請問程序中的延時程序的for語句中的120是什么意思,這個for語句是做什么呢?
120是用C語言寫程序時延時1ms的經驗值,用for循環計數120次就是1ms時間,有些地方用110 123 124等
請問程序的主函數中的for(k=0;k<SONG_TONE[ i]/3;k++); 是什么意思呢?
這一句是控制發出不同的音符
請問程序的主函數中的DelayMS(10); i++; 是做什么呢?
這一句是控制上面音符的播放時間,一般是一個節拍,i++是控制播放下一個音符
回復

使用道具 舉報

板凳
ID:475247 發表于 2020-3-31 10:06 | 只看該作者
將視頻多看必次,里面講的很清楚
回復

使用道具 舉報

地板
ID:584814 發表于 2020-3-31 10:12 | 只看該作者
1、65536=0xFF+1;
2、用for循環計數120次就是1ms時間不僅是經驗值還與主頻有關負責的寫法都備注;
3、DelayMS(10);的作用是讓兩個不同音符中間容易分辨增加節奏感。
湊數的40行代碼你已自問自答了不少,以上供參考沒明白多看書就可以了。
回復

使用道具 舉報

5#
ID:720276 發表于 2020-4-5 16:08 | 只看該作者
1、65536指的是計數器T0是一個可以對機器周期進行65536次計數。2、T我感覺應該寫成T=(65536-50000)/262。3、for是循環語句,循環120次,只要t不到120,就一直執行他的語句。4、SONG_TONE[ i]生日歌有頻率表,i 是幾對應表里第幾個數,k初值為0,k小于SONG_TONE[ i]/3時,k加1,繼續循環,直到大于SONG_TONE[ i]/3時跳出循環。5、當k小于SONG_TONE[ i]/3時,執行下面括號語句,延時10ms,i 自加1,再去if里判斷,實現頻率表里每個頻率逐個掃描
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一道本视频 | av黄色免费在线观看 | 精久久久 | 草草视频在线观看 | 啪啪av | 国产精品一区二区福利视频 | 日韩在线视频观看 | 国产日韩av一区二区 | 日本视频一区二区三区 | 久久九 | 日韩电影免费在线观看中文字幕 | 欧美一区二区三区在线看 | 日本一道本 | 国产精品福利在线观看 | 日韩av福利在线观看 | 久久久区 | 久久国产精品免费视频 | 亚洲国产精品人人爽夜夜爽 | 国产丝袜一区二区三区免费视频 | 色综合一区二区三区 | 国产黄视频在线播放 | 黄色毛片一级 | 毛片一级网站 | 美国一级毛片a | 欧美日本在线观看 | 国产一区欧美 | 欧美日本高清 | 一级片av| 亚洲精选一区 | 亚洲综合天堂 | 亚洲欧美日韩在线 | aaa精品 | 香蕉视频久久久 | 国产精品二区三区 | 国产精品久久久99 | 亚洲在线一区二区 | 91精品国产91 | 亚洲网在线| 午夜成人在线视频 | 色香婷婷 | 成人在线电影网站 |