精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品成人国产乱| 亚洲欧美日韩网站| 成人亚洲综合天堂| 国内精品久久久久影院色| 九九热精品视频| 免费a在线观看播放| 成人看片网页| 一区二区三区在线观看视频| 蜜桃臀一区二区三区| 一级黄在线观看| 激情久久综合| 国产亚洲精品一区二区| 久久久久亚洲av无码网站| 免费毛片b在线观看| 国产精品久久久久久久久动漫| 99re视频| 亚洲一级特黄毛片| 亚洲欧美日韩精品一区二区 | 久久精品视频91| av文字幕在线观看| 欧美国产日产图区| 亚洲第一福利视频| 四季av一区二区| 草莓视频丝瓜在线观看丝瓜18| 欧美国产精品一区二区| 国产午夜精品在线| 国产乱人伦真实精品视频| av小说在线观看| 综合伊人久久| 欧美日韩三级一区| 114国产精品久久免费观看| 国产一级做a爱片久久毛片a| 91精品91| 中文在线不卡视频| 国产ts丝袜人妖系列视频 | 欧美破处大片在线视频| 欧美色图一区二区三区| 国产人妻777人伦精品hd| 免费观看在线黄色网| 国产日韩成人精品| 精品国产区在线| 亚洲乱码精品久久久久..| 毛片基地黄久久久久久天堂| 日本亚洲欧美成人| 日韩毛片在线视频| 国产一区二区三区四区三区四| 中文字幕一精品亚洲无线一区| 中国毛片在线观看| 美日韩中文字幕| 亚洲精品久久久久| 国产激情视频网站| 老牛国内精品亚洲成av人片| 色婷婷亚洲婷婷| 欧美人成在线观看| 尤物yw193can在线观看| 成人禁用看黄a在线| 亚洲综合精品伊人久久| 99久久国产热无码精品免费| 久国产精品韩国三级视频| 国产精品入口免费视频一| 天天爱天天做天天爽| 爽好久久久欧美精品| 国产福利成人在线| 欧美日韩在线视频播放| 日韩黄色免费电影| 九九精品视频在线观看| 欧美三级黄色大片| 一区二区三区四区日韩| 欧美成人精品h版在线观看| 日本福利片在线观看| 自产国语精品视频| 欧美精品成人在线| 欧美亚洲精品天堂| 日日夜夜免费精品| 国产美女精品视频免费观看| 国产乱码一区二区| 鲁大师成人一区二区三区| 91成人免费观看网站| 色一情一乱一伦| 青青青爽久久午夜综合久久午夜| 国产欧美韩国高清| 成人黄色免费视频| 99久久精品国产毛片| 欧美一区二区福利| 国产在线激情视频| 国产午夜亚洲精品午夜鲁丝片| 日韩欧美精品久久| 超碰在线观看免费| 精品久久在线播放| 国产精品一二三在线观看| 四虎亚洲成人| 亚洲一区在线观看免费| 中国丰满人妻videoshd| 日韩五码电影| 亚洲第一区第二区| аⅴ天堂中文在线网| 欧美激情视频一区二区三区在线播放 | 国产精品不卡在线| 激情小视频网站| 日本精品不卡| 一区二区三区欧美日韩| 337p粉嫩大胆噜噜噜鲁| 日韩精品一级毛片在线播放| 亚洲精品一区二区三区精华液| a级在线免费观看| 在线国产一区二区| 日本精品久久中文字幕佐佐木| 国产人妻精品一区二区三区| 久久久久一区二区三区四区| 成人在线免费高清视频| 精品免费av在线| 精品动漫一区二区三区在线观看| 亚洲av毛片基地| 99国产精品| 1卡2卡3卡精品视频| 你懂的在线播放| 亚洲在线免费播放| 第一区免费在线观看| 日韩高清影视在线观看| 成年人精品视频| 久久高清内射无套| 亚洲欧美成人| 国产成人精品一区二区三区福利| aⅴ在线视频男人的天堂 | 国产freexxxx性播放麻豆| 国产黄色精品| 国产丝袜高跟一区| 国产精久久久久久| 国产成人精品亚洲午夜麻豆| 亚洲丰满在线| 韩国精品主播一区二区在线观看 | 婷婷国产在线| 一级特黄大欧美久久久| 九九热精品国产| 日韩1区2区| 日本亚洲欧美成人| 欧美精品a∨在线观看不卡| 亚洲成av人影院| 国产吃瓜黑料一区二区| 中国精品18videos性欧美| 国产精品久久久久久久久粉嫩av | www国产免费| 国产激情精品一区二区三区| 中文字幕日韩专区| 中文字幕+乱码+中文字幕明步| 日本sm残虐另类| 蜜桃999成人看片在线观看| 阿v视频在线观看| 色综合久久天天| 中文字幕一区二区久久人妻网站| 99精品国产99久久久久久福利| 国产精品对白一区二区三区| 密臀av在线| 欧美亚洲综合一区| 四虎国产精品成人免费入口| 日日嗨av一区二区三区四区| 欧美高清一区二区| 大胆人体一区二区| 亚洲片国产一区一级在线观看| 日韩精品一区不卡| 国产欧美视频一区二区| 中国黄色片免费看| 国产精品国产三级国产在线观看| 久久久久久久久久久91| 不卡视频在线播放| 五月天亚洲精品| 免费观看av网站| 欧美黄色免费| 国产精品大全| 中文字幕在线直播| 在线播放国产精品| 在线免费观看毛片| 91丨九色丨尤物| 无码日韩人妻精品久久蜜桃| 97精品国产| www.成人三级视频| 涩涩视频在线免费看| 亚洲一区二区精品| 国产又黄又大又爽| 图片区小说区国产精品视频| 一二三不卡视频| 美腿丝袜亚洲综合| 免费日韩在线观看| 一区二区三区日本久久久| 国产精品视频一区国模私拍| 在线xxxx| 国产视频久久网| 一级片aaaa| 午夜精品一区二区三区电影天堂| 91久久免费视频| 国产在线播放一区二区三区| 日韩精品 欧美| 日韩精品久久| 国产精品免费看一区二区三区| 欧美无毛视频| 九色成人免费视频| 国产免费a∨片在线观看不卡| 91精品国产欧美一区二区18| 亚洲永久精品在线观看| 成人欧美一区二区三区小说 | 国产欧美日韩在线视频| 黄色aaaaaa| 久久精品人人| 久久香蕉视频网站| 日韩中文欧美| 精品一卡二卡三卡四卡日本乱码| 亚洲青青一区| 欧日韩不卡在线视频| 2024最新电影在线免费观看| 亚洲色图13p| 亚洲AV无码精品色毛片浪潮| 欧美专区亚洲专区| 日本熟妇毛耸耸xxxxxx| 中文字幕一区二区三| 成人性生交大免费看| 国产高清不卡二三区| 色片在线免费观看| 久久精品观看| 日本欧美视频在线观看| 亚洲精品一二三区区别| 天堂精品视频| 亚洲8888| 国产亚洲一区二区三区在线播放| 少妇高潮一区二区三区99| 国产成人精品一区二区| 色网在线免费观看| 性日韩欧美在线视频| 影音先锋中文在线视频| 久久精品电影一区二区| 国产精品四虎| 亚洲欧美日韩一区二区在线| 性xxxx18| 亚洲另类激情图| 天天舔天天干天天操| 精品国产精品网麻豆系列| 99久久国产免费| 在线观看91av| 91欧美日韩麻豆精品| 欧美手机在线视频| 中文字幕免费视频观看| 色94色欧美sute亚洲13| 4438国产精品一区二区| 欧美性xxxx极品hd欧美风情| 国产一二三四五区| av欧美精品.com| 娇妻高潮浓精白浆xxⅹ| 国产suv一区二区三区88区| 被黑人猛躁10次高潮视频| 国产伦精一区二区三区| 四川一级毛毛片| 国产精品亚洲综合一区在线观看| 青青草精品在线| 国产福利一区在线| 熟妇高潮一区二区| 99久久国产综合精品色伊| 在线免费播放av| 91丨porny丨中文| b站大片免费直播| 国产香蕉久久精品综合网| 刘亦菲国产毛片bd| 成人免费一区二区三区视频| 欧美日韩国产精品综合| 亚洲超丰满肉感bbw| 特级西西444www大精品视频免费看| 欧美日韩中文在线| 亚洲高清视频免费观看| 欧美日韩三级视频| 亚洲av永久纯肉无码精品动漫| 日韩区在线观看| 少妇精品高潮欲妇又嫩中文字幕 | 国产精品精品一区二区三区午夜版 | 91精品国产99久久久久久| 一区二区电影免费观看| 国产精品第三页| 国内精品视频| 国内精品小视频在线观看| 在线免费观看黄色| 久久亚洲影音av资源网| 丁香花在线电影| 欧美在线视频网站| 亚洲tv在线| 国产偷国产偷亚洲高清97cao| 少妇精品久久久一区二区| 亚洲一区二区三区色| 亚洲成色精品| 男人添女人下面免费视频| 国产成人在线网站| 六月婷婷七月丁香| 亚洲伦理在线精品| 五月天激情四射| 91精品免费观看| 飘雪影院手机免费高清版在线观看 | 欧美1区2区| 91看片就是不一样| 国产精品一区二区在线播放 | 日韩av网址大全| 亚洲欧美成人一区| 亚洲福利免费| www.久久av.com| 91麻豆123| wwwav国产| 在线观看成人小视频| 丰满少妇高潮在线观看| 中文字幕精品av| 日本黄色免费在线| 7777精品伊久久久大香线蕉语言| 亚洲自拍电影| 人人妻人人做人人爽| 久久精品av麻豆的观看方式| 亚洲国产果冻传媒av在线观看| 中文字幕人成不卡一区| 成人免费视频国产免费| 亚洲高清在线观看| 国产网友自拍视频导航网站在线观看| 欧美中文字幕视频在线观看| 9l视频自拍九色9l视频成人| 亚洲欧洲国产日韩精品| 久久精品亚洲| 国产麻豆xxxvideo实拍| 亚洲靠逼com| 中文字幕人成人乱码亚洲电影| 日韩高清免费在线| 欧美人与禽猛交乱配| 成人午夜黄色影院| jiujiure精品视频播放| 99久久久无码国产精品6| 久久伊人亚洲| 在线精品视频播放| 一区二区视频在线看| 国产一区二区三区黄片| 尤物yw午夜国产精品视频| 欧美一区久久久| 免费亚洲精品视频| 国产精品亚洲综合久久| 国产xxxx视频| 亚洲一区在线播放| www久久久久久| 九九精品视频在线| 欧州一区二区三区| 麻豆视频传媒入口| 激情综合色播激情啊| 三级黄色免费观看| 欧美日韩国产电影| 欧美人xxx| 成人免费视频在线观看超级碰| 成人影院天天5g天天爽无毒影院 | 中文字幕一区二区精品区| 手机看片一级片| 国产精品国产三级国产专播品爱网 | 国产青青草在线| 国产精品99久久久久久人| 国产一区二区三区91| www.激情小说.com| 国产精品人人做人人爽人人添| 中文字幕人妻一区二区在线视频| 国产一区二区三区在线观看视频| 无人区在线高清完整免费版 一区二| 日本一区视频在线观看免费| 蜜臀国产一区二区三区在线播放| 精品一区二区在线观看视频| 7777精品伊人久久久大香线蕉超级流畅| 视频一区二区三区不卡| 亚洲精品欧美日韩| 欧美日韩视频一区二区三区| 妖精视频一区二区| 日韩欧美在线一区| 91在线免费看| 91网在线免费观看| 啄木系列成人av电影| 999香蕉视频| 国产精品久久久久久亚洲伦| 国产乱码精品一区二区三区精东| 久久99热精品| 亚洲精品国产精品粉嫩| 九一精品在线观看| 亚洲免费观看高清在线观看| 天堂av2024| 国产精品99久久久久久人| 欧美国产另类| 无码人妻精品一区二区三应用大全| 在线观看欧美精品| 羞羞的视频在线观看| 蜜桃导航-精品导航| 美女视频一区二区三区| 久久久久无码国产精品| 亚洲男人天堂手机在线| 不卡精品视频| 精品99在线视频| 亚洲视频免费观看| 性插视频在线观看| 91久热免费在线视频| 国产精品久久久一区二区| 99热6这里只有精品| 亚洲国产精品资源| 青青草国产一区二区三区| 人妻久久久一区二区三区| 国产精品三级视频| 天天躁日日躁狠狠躁伊人| 91精品国产自产在线老师啪| 亚洲影院免费|