精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用鴻蒙OS在蜂鳴器上播放一曲《兩只老虎》

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[350170]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

本文介紹如何在HiSpark Wi-Fi IoT套件上,使用Harmony OS IoT硬件子系統的PWM接口 驅動蜂鳴器 播放音樂。

用PWM輸出方波的API

鴻蒙系統IoT硬件子系統提供了PWM相關接口,接口頭文件為wifiiot_pwm.h,其中開始輸出方波的接口為:

  1. /** 
  2.  
  3.  * @brief Outputs PWM signals based on the input parameters. 
  4.  
  5.  * 
  6.  
  7.  * This function outputs PWM signals from a specified port based on 
  8.  
  9.  * the configured frequency division multiple and duty cycle. 
  10.  
  11.  * 
  12.  
  13.  * @param port Indicates the PWM port number. 
  14.  
  15.  * @param duty Indicates the PWM duty cycle. 
  16.  
  17.  * @param freq Indicates the frequency-division multiple. 
  18.  
  19.  * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful; 
  20.  
  21.  * returns an error code defined in {@link wifiiot_errno.h} otherwise. 
  22.  
  23.  * @since 1.0 
  24.  
  25.  * @version 1.0 
  26.  
  27.  */ 
  28. unsigned int PwmStart(WifiIotPwmPort port, unsigned short duty, unsigned short freq); 

PWM輸出的方波頻率

通過PwmStart接口的注釋,可以知道freq參數是分頻倍數,PWM實際輸出的方波頻率等于 PWM時鐘源頻率 除以 分頻倍數,即

f = Fcs / freq

其中,Fcs是PWM時鐘源頻率;

PWM輸出方波的占空比
通過PwmStart接口的duty參數可以控制輸出方波的占空比,占空比是指PWM輸出的方波波形的高電平時間占整個方波周期的比例,具體占空比值是 duty 和 freq的比值,例如想要輸出占空比 50%的方波信號,那么duty填的值就要是 freq/2;

音符-頻率對應關系
音符-頻率對照表

這個表中有一個規律——音高升高一個八度,頻率升高一倍。

表格來自:https://liam.page/2018/04/09/pitch-interval-and-harmonic/

開發板可以輸出的最低頻率
通過前面的公式,我們知道:

  1. PWM輸出的方波頻率和freq成反比,freq越大,輸出的方波頻率越?。?/li>
  2. freq是unsinged short類型,最大值為65535;
    因此,輸出頻率的最小值取決于時鐘源,而PWM的默認時鐘源為160M:
  1. unsigned int HalPwmInit(HalWifiIotPwmPort port) 
  2.     if (hi_pwm_set_clock(PWM_CLK_160M) != HI_ERR_SUCCESS) { 
  3.         return (unsigned int)HAL_WIFI_IOT_FAILURE; 
  4.     } 
  5.     return hi_pwm_init((hi_pwm_port)port); 

160M時鐘源條件下,輸出方波的最低頻率是:160M/65535=2441.44...,這個頻率還是略高,在上面的表格中沒有找到音名。但是我可以用上面表格值繼續往后推算兩個八度,就能夠覆蓋這個頻率(不過通常只使用7個八度,所以還是有點高)。

如果時鐘源頻率可以更低,那么輸出頻率也可以更低!
幸運的是,通過調用hi_pwm_set_clock接口,可以修改時鐘源:

  1. /** 
  2.  * @ingroup iot_pwm 
  3.  * 
  4.  * Enumerates the PWM clock sources.CNcomment:PWM時鐘源枚舉。CNend 
  5.  */ 
  6. typedef enum { 
  7.     PWM_CLK_160M, /**< 160M APB clock.CNcomment:160M 工作時鐘 CNend */ 
  8.     PWM_CLK_XTAL, /**< 24M/40M crystal clock.CNcomment:24M或40M 晶體時鐘 CNend */ 
  9.     PWM_CLK_MAX   /**< Maximum value, which cannot be used.CNcomment:最大值,不可使用CNend */ 
  10. } hi_pwm_clk_source; 
  11.  
  12. hi_u32 hi_pwm_set_clock(hi_pwm_clk_source clk_type); 

通過注釋我們知道hi_pwm_set_clock(PWM_CLK_XTAL);可以將時鐘源設置為晶體時鐘,晶體時鐘可能為24M或40M;

那么問題來了——晶體時鐘頻率到底是多少?

晶體時鐘頻率是多少?
可以通過實驗測算出晶體時鐘頻率,具體步驟如下:

  1. 使用 hi_pwm_set_clock(PWM_CLK_XTAL); 設置時鐘源為晶體時鐘;
  2. 使用PwmStart(WIFI_IOT_PWM_PORT_PWM0, 20*1000, 40*1000);輸出方波信號;
  3. 使用示波器測量方波頻率,根據測量的頻率計算時鐘源頻率;

經實際測量,方波頻率為1000Hz,

因此,時鐘頻率為 1000 * 40 * 1000,即 40 MHz;
可以輸出的方波最低頻率
因此,方波最低頻率就是 40M / 65535 ,也就是:

>>> 40 * 1000 * 1000 / 65535
610.3608758678569
對照上面的頻率表,可以知道,能夠輸出E5及以上的所有音符;

準備曲譜
為了代碼實現起來簡單,我選擇了《兩只老虎》的曲譜作為素材,在簡譜網找到了簡譜:
 兩只老虎 簡譜

簡譜說明
簡譜上的一些記號,有的同學可能不太清楚是什么意思,這里簡單說明一下:

  1. 左上角的1=C是表示調式(可以不用關心),1是唱名,C是音名,1=C是正調(就是常規的對應關系: 1-C,2-D, 3-E, 4-F, 5-G, 6-A, 7-B);
  2. 左上角的 4/4 是四四拍,是指 四分音符為一拍, 每小節有四拍;
  3. 下面譜子上的豎線就是每個小節分隔符,和4/4對應;
  4. “跑得快”上面5后面的橫線表示延時一拍;
  5. “一只沒有眼睛”一句,5后面的點表示順延半拍,一條下劃線表示二分之一時間,兩條下劃線表示四分之一時間;
    編寫代碼
    有了以上知識,我們就可以編寫代碼了,關鍵代碼如下:
  1. static const uint16_t g_tuneFreqs[] = { // 音符對應的分頻系數 
  2.     0, // 40M Hz 時鐘源,C6 ~ B6: 
  3.     38223, // 1 1046.5 
  4.     34052, // 2 1174.7 
  5.     30338, // 3 1318.5 
  6.     28635, // 4 1396.9 
  7.     25511, // 5 1568 
  8.     22728, // 6 1760 
  9.     20249, // 7 1975.5 
  10.     51021 // 5_ 783.99 // 低一個八度的 5 
  11. }; 
  12.  
  13. // 曲譜音符 
  14. static const uint8_t g_scoreNotes[] = { 
  15.     // 《兩只老虎》簡譜:http://www.jianpu.cn/pu/33/33945.htm 
  16.     1, 2, 3, 1,        1, 2, 3, 1,        3, 4, 5,  3, 4, 5, 
  17.     5, 6, 5, 4, 3, 1,  5, 6, 5, 4, 3, 1,  1, 8, 1,  1, 8, 1, // 最后兩個 5 應該是低八度的,鏈接圖片中的曲譜不對,聲音到最后聽起來不太對勁 
  18. }; 
  19.  
  20. // 曲譜時值,根據簡譜記譜方法轉寫 
  21. static const uint8_t g_scoreDurations[] = { 
  22.     4, 4, 4, 4,        4, 4, 4, 4,        4, 4, 8,  4, 4, 8, 
  23.     3, 1, 3, 1, 4, 4,  3, 1, 3, 1, 4, 4,  4, 4, 8,  4, 4, 8, 
  24. }; 
  25.  
  26. static void *BeeperMusicTask(const char *arg) 
  27.     (void)arg; 
  28.  
  29.     printf("BeeperMusicTask start!\r\n"); 
  30.  
  31.     hi_pwm_set_clock(PWM_CLK_XTAL); // 設置時鐘源為晶體時鐘(40MHz,默認時鐘源160MHz) 
  32.  
  33.     for (size_t i = 0; i < sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]); i++) { 
  34.         uint32_t tune = g_scoreNotes[i]; // 音符 
  35.         uint16_t freqDivisor = g_tuneFreqs[tune]; 
  36.         uint32_t tuneInterval = g_scoreDurations[i] * (125*1000); // 音符時間 
  37.         printf("%d %d %d %d\r\n", tune, (40*1000*1000) / freqDivisor, freqDivisor, tuneInterval); 
  38.         PwmStart(WIFI_IOT_PWM_PORT_PWM0, freqDivisor/2, freqDivisor); 
  39.         usleep(tuneInterval); 
  40.         PwmStop(WIFI_IOT_PWM_PORT_PWM0); 
  41.     } 
  42.  
  43.     return NULL; 

譜子中最后兩個5是錯誤的,應該是低八度的5,也就是5下面應該打一個點;我修改了代碼,讓整個曲子聽起來更自然;

完整代碼:https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development/blob/master/02_device_control/beeper_music_demo.c

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2019-01-23 16:07:54

數據倉庫Hadoop

2013-09-03 13:14:15

諾基亞Google

2016-03-25 16:02:49

中國企業新聞網

2023-12-29 13:25:22

AI模型

2009-04-14 15:30:25

2011-09-21 11:28:03

HTCWindows 8平板電腦

2010-04-30 14:33:56

HTML 5FlashH.264

2015-08-19 09:53:17

技術電商創業

2017-12-01 05:11:52

2024-08-12 09:52:00

2012-12-04 17:13:21

2018-01-10 10:45:37

2010-10-13 09:29:53

JUnit單元測試Android

2021-06-29 06:39:21

Linuxdust命令du命令

2023-05-11 13:55:00

LinuxKdenlive編輯視頻

2021-12-03 15:04:06

FlatpakLinux

2022-01-09 15:00:16

LinuxAudacity聲音編輯器

2017-01-15 17:06:16

程序員藝術家

2009-08-18 11:16:05

Ubuntu系統高清視頻linux系統

2009-05-26 16:08:38

網管軟件網絡拓撲摩卡
點贊
收藏

51CTO技術棧公眾號

欧美精品福利在线| 精品福利视频一区二区三区| 日本一区二区三区四区高清视频 | 国产精品丝袜久久久久久不卡| 99久久99久久精品免费看小说.| 欧美a视频在线| 亚洲一区在线电影| 久久伊人一区| 亚洲最大成人在线视频| 亚洲特色特黄| 国产一区二区黑人欧美xxxx| 国内精品国产三级国产aⅴ久| 欧美aa在线| 亚洲视频你懂的| 国产精品日韩高清| 正在播放亚洲精品| 在线不卡亚洲| 日韩在线观看网站| 日本69式三人交| 国精品产品一区| 精品人伦一区二区三区蜜桃网站| 正在播放国产精品| 日本ー区在线视频| 国产成人免费网站| 国产精品自拍偷拍| 中文字幕亚洲精品一区| 永久91嫩草亚洲精品人人| 亚洲欧美国产视频| 亚洲精品久久一区二区三区777| jizz久久久久久| 精品女同一区二区三区在线播放| eeuss中文| 8888四色奇米在线观看| 99热精品国产| 99精品国产一区二区| 亚洲天堂999| 日本中文字幕一区| 91福利视频在线观看| 深夜福利影院在线观看| 欧美精品尤物在线观看| 精品视频在线播放| 中文字幕一区二区人妻电影丶| 免费一级欧美片在线观看网站| 精品视频色一区| av免费在线播放网站| 九九精品调教| 亚洲精品国产a| 日本三日本三级少妇三级66| 1024视频在线| 中文av一区特黄| 久久亚洲午夜电影| 日本黄视频在线观看| 国产成人日日夜夜| 99re资源| 亚洲国产精品国自产拍久久| 国产成人在线色| 99精品99久久久久久宅男| 国产欧美日韩成人| 国产精品一区二区你懂的| 成人字幕网zmw| 一区二区三区亚洲视频| 久久国产精品区| 国产精品中文字幕久久久| 中文字幕乱码一区二区| 日韩av电影免费观看高清完整版| 国产精品xxx视频| 中文字幕一区二区三区免费看| 日韩av网站在线观看| 国产欧美精品在线播放| 国产精品嫩草影院精东| 狠狠色丁香婷婷综合| 91在线看www| 亚洲精品久久久久avwww潮水| 国产成人在线视频网站| 国产一区二区精品免费| 欧美视频综合| 国产日韩亚洲欧美综合| 一本色道久久综合亚洲二区三区| 欧美精品电影| 一区二区免费看| 国产午夜福利在线播放| 美女一区网站| 精品视频色一区| 久久久久久久久久久影视| 女仆av观看一区| 中文字幕国产亚洲| 久久久.www| 另类亚洲自拍| 国产在线a不卡| 欧美视频一二区| 国产亚洲精久久久久久| 99精品一区二区三区的区别| 国产在线xxx| 欧美这里有精品| 秋霞午夜鲁丝一区二区| 你懂的视频欧美| 久久精品在线视频| 久久精品国产成人av| 看片的网站亚洲| 国产传媒一区二区| jizz亚洲| 亚洲午夜三级在线| 日本黄大片一区二区三区| 91精品日本| 中文字幕九色91在线| 国产真实夫妇交换视频| 热久久国产精品| 国产区二精品视| 欧美三级黄网| 日本韩国欧美国产| 第一页在线视频| 成人在线丰满少妇av| 91精品国产免费久久久久久| 一炮成瘾1v1高h| 久久蜜臀中文字幕| 久久久久久免费看| 国产精品99久久免费| 一区二区三区视频观看| 久久免费视频99| 久久99精品国产麻豆婷婷洗澡| 精品免费一区二区三区蜜桃| 八戒八戒神马在线电影| 欧美在线观看视频在线| 日本一区二区在线免费观看| 中文精品久久| 国产精品久久久一区| 日本护士...精品国| 亚洲一区在线观看免费| 五月六月丁香婷婷| 日韩欧美自拍| 国产精品高潮在线| 精品av中文字幕在线毛片| 亚洲一级二级在线| 亚洲一区二区三区四区精品 | 特级毛片在线免费观看| 伊人久久在线| 亚洲国产婷婷香蕉久久久久久| 黄色一级片中国| 激情综合网最新| 先锋在线资源一区二区三区| 欧美xxx视频| 亚洲另类xxxx| 丰满少妇xoxoxo视频| 91免费在线看| 国产日韩一区二区在线观看| 亚洲国产国产| 日韩美女免费观看| 国产一级网站视频在线| 色婷婷综合久久久| 国产sm调教视频| 欧美aaa在线| 综合久久国产| 国产精品欧美一区二区三区不卡| 久久精品99久久香蕉国产色戒| 国产又粗又猛又色又| 国产精品蜜臀在线观看| 天天综合网久久| 91麻豆国产自产在线观看亚洲| 国产精品女主播| 久久日韩视频| 欧美一区二区三区白人| 青青草手机视频在线观看| 国产成人亚洲综合a∨婷婷图片 | 一区二区三区国产盗摄| 久久综合婷婷综合| japanese23hdxxxx日韩 | 成码无人av片在线观看网站| 91精品国产综合久久小美女| 人妻久久一区二区| 成人免费视频一区二区| 欧美色图色综合| 激情五月综合网| 成人激情视频网| 黄色污污视频在线观看| 国产视频丨精品|在线观看| 无码人妻丰满熟妇区五十路| 国产精品国产三级国产aⅴ入口 | 伊人久久久久久久久久久| 一区二区视频免费| 亚洲欧洲日韩女同| 在线观看一区二区三区四区| 香蕉久久久久久久av网站| 亚洲精品视频一区二区三区| 国产精品美女久久久久人| 97婷婷大伊香蕉精品视频| 欧洲天堂在线观看| 欧美一区二区三区成人| 欧美日韩一二三四区| 国产精品国产a级| 久草免费资源站| 久久久久久久高潮| 亚洲乱码日产精品bd在线观看| 欧美黑人巨大videos精品| 国产精品福利网站| 少女频道在线观看高清| 亚洲热线99精品视频| 国产精品系列视频| 丁香五六月婷婷久久激情| 久草福利资源在线| 成人免费毛片片v| 99re精彩视频| 午夜在线精品偷拍| 韩国黄色一级大片| 欧美日韩第一| 国产精品午夜av在线| 国产成人精品一区二区三区在线 | 另类专区欧美蜜桃臀第一页| 国产日韩欧美精品在线观看| 日本久久精品| 美女黄毛**国产精品啪啪| 国产 日韩 欧美| 国产精品96久久久久久| 国产乱妇乱子在线播视频播放网站| 国产亚洲视频在线| 日本免费一区视频| 6080国产精品一区二区| 亚洲 欧美 中文字幕| 亚洲伊人伊色伊影伊综合网| 成人欧美一区二区三区黑人一| 99视频精品在线| 日本中文字幕有码| 国内精品伊人久久久久av一坑| 北条麻妃av高潮尖叫在线观看| 国内精品福利| 日本xxxxx18| 四虎国产精品免费观看| 欧美亚洲国产免费| 人妖一区二区三区| 高清不卡一区二区三区| 久久av网站| 成人黄在线观看| 日韩一级特黄| 国产精品视频网| 粉嫩一区二区三区| 日韩av免费在线看| 惠美惠精品网| 欧美与欧洲交xxxx免费观看| 高清视频在线观看三级| 国产+人+亚洲| 韩国日本一区| 国内精品中文字幕| 国产直播在线| 欧美一级片在线播放| 手机在线观看av网站| 97在线看福利| 国产夫妻在线播放| 97久久久久久| 伊人成综合网站| 欧美一区二区.| 亚洲天堂一区二区| 国产精品99蜜臀久久不卡二区| 成人美女大片| 国产精品91一区| 色综合一区二区日本韩国亚洲| 国产色视频一区| 伊人久久综合网另类网站| 亚洲free嫩bbb| 久久久久久亚洲精品美女| av日韩中文字幕| 国产精品15p| 免费看成人片| 少妇一区二区视频| 亚洲欧美国产不卡| 一本到12不卡视频在线dvd| 国产一二三四区在线观看| 亚洲国产99| 久久久999免费视频| 三级久久三级久久久| 狠狠躁狠狠躁视频专区| 国产一区啦啦啦在线观看| 亚洲AV无码久久精品国产一区| 成人免费观看男女羞羞视频| 日本丰满少妇裸体自慰| 国产日产亚洲精品系列| 夫妻性生活毛片| 亚洲一区二区精品视频| 一级一片免费看| 制服丝袜在线91| 五月婷在线视频| 中文亚洲视频在线| 俄罗斯一级**毛片在线播放| 日韩美女写真福利在线观看| 亚洲爽爆av| 国产欧美在线一区二区| 日韩成人a**站| 青春草国产视频| 免费久久99精品国产| 亚洲午夜精品在线观看| 久久精品夜夜夜夜久久| 四虎免费在线视频| 欧美日韩国产页| 国产精品久久久久久在线| 亚洲国产成人爱av在线播放| 91社区在线观看| 98精品在线视频| 日韩黄色在线| 欧美日韩国产精品一区二区| 综合视频在线| 日本成人在线免费视频| 国产激情一区二区三区桃花岛亚洲| 大又大又粗又硬又爽少妇毛片| 国产精品久久久久久久久久免费看| 久久精品免费在线| 这里只有精品电影| 精品欧美不卡一区二区在线观看 | 亚洲国产精品中文| 日本中文在线观看| 欧美综合一区第一页| 视频一区中文字幕精品| 日韩欧美一区二区三区久久婷婷| 亚洲国产一区二区精品专区| 成人黄色一级大片| 久久精品水蜜桃av综合天堂| 四虎永久在线精品| 欧美一区二区网站| 在线日本视频| 人人爽久久涩噜噜噜网站| 国产福利资源一区| www.18av.com| 精品一区二区在线视频| 亚洲人成人无码网www国产| 亚洲成va人在线观看| 国内精品偷拍视频| 久久久成人的性感天堂| 精品三区视频| 日韩.欧美.亚洲| 免费日韩av片| 喷水视频在线观看| 亚洲.国产.中文慕字在线| www.黄色一片| 萌白酱国产一区二区| 欧洲亚洲精品久久久久| 亚洲不卡1区| 国产精品视区| www.色多多| 天天操天天综合网| 免费国产精品视频| 久久久久久久久国产| 中文在线免费一区三区| av磁力番号网| 国产剧情av麻豆香蕉精品| www.av免费| 91精品婷婷国产综合久久性色 | 亚洲乱码精品一二三四区日韩在线| 国产精品51麻豆cm传媒| 国产亚洲视频中文字幕视频| 成人日韩在线观看| 日韩欧美在线电影| 男人的天堂亚洲一区| 亚洲色图第四色| 欧美无乱码久久久免费午夜一区| 超碰国产在线观看| 国产精品麻豆va在线播放| 欧美日韩亚洲在线观看| 日本高清久久久| 亚洲人精品午夜| 亚洲AV无码乱码国产精品牛牛| 欧美激情久久久久久| 精品网站aaa| 逼特逼视频在线| 久久久精品黄色| 中文字幕久久久久| 欧美精品在线网站| 精品亚洲精品| av免费网站观看| 亚洲欧美在线另类| 国产美女主播在线观看| 欧美精品国产精品日韩精品| 亚洲精品无吗| 国产嫩草在线观看| 综合婷婷亚洲小说| 日本毛片在线观看| 国产精品91久久久久久| 91精品啪在线观看国产18| 无码av免费精品一区二区三区| 精品久久久久久国产| 国产大片在线免费观看| 亚洲一区二区免费| 国产精品免费看| 日韩在线不卡av| 亚洲精品videossex少妇| 外国电影一区二区| 久久福利一区二区| 91免费看`日韩一区二区| 怡春院在线视频| 久久乐国产精品| 欧美一区电影| 白丝校花扒腿让我c| 欧美影院一区二区| 欧美日韩在线视频免费观看| 欧美精品一区二区三区在线四季 | 免费看黄色aaaaaa 片| 欧美日韩在线电影| 国产精品蜜臀| 亚洲欧洲日夜超级视频| 99久久精品国产一区二区三区| 在线观看色网站| 欧美一级淫片播放口| 欧美成熟视频| 成人在线手机视频|