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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

HLW8032芯片單相電能計量模塊單片機程序-UART接口

  [復制鏈接]
跳轉到指定樓層
樓主
L91-01是基于HLW8032的單相交流電能計量模塊(以下簡稱模塊),該模塊包含一路交流電壓和一路交流電流的采集,通過串口的形式送到單片機,模塊可以測量電壓,電流,功率,電量以及功率因數,例程中僅給出了測量電壓,電流,功率,通過四位數碼管顯示。
適用:
Ø 單片機學習、DIY等。


附件包含原理圖,51單片機的驅動例程,和芯片的Datasheet。

單片機源程序如下:
  1. #include "Config.H"
  2. //數碼管0-9顯示代碼                    0         1          2           3        4    5    6           7        8    9       
  3. u8 DISPLAY_CODE[10]         = {        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
  4. //數碼管帶點的0-9顯示代碼           0         1          2           3        4    5    6           7        8    9       
  5. u8 DISPLAY_Point_CODE[10]         = {        0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef };
  6. //數碼管位數                                 1         2    3           4
  7. u8 DIG_BIT_CODE[4]          = {        0x68,0x6a,0x6c,0x6e };
  8. //8段顯示亮度等級                           1         2          3           4        5         6    7           8                       
  9. u8 Light_Level_CODE[8]        = {        0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x01 };

  10. void I2CStart(void)//開始信號
  11. {
  12.         CLK_H;
  13.         DIO_H;
  14.         Delay_us(5);
  15.         DIO_L;
  16. }

  17. void I2Cask(void) //ACK信號
  18. {
  19.         u8 timeout = 1;
  20.         CLK_H;
  21.         Delay_us(5);
  22.         CLK_L;
  23.         while((DIO)&&(timeout<=100))
  24.         {
  25.                 timeout++;
  26.         }
  27.         Delay_us(5);
  28.         CLK_L;
  29. }

  30. void I2CStop(void) //停止信號
  31. {
  32.         CLK_H;
  33.         DIO_L;
  34.         Delay_us(5);
  35.         DIO_H;
  36. }

  37. void I2CWrByte(u8 oneByte) //寫一個字節高位在前,低位在后
  38. {
  39.         u8 i;
  40.         CLK_L;
  41.         Delay_us(1);
  42.         for(i=0;i<8;i++)
  43.         {
  44.                 oneByte = oneByte<<1;
  45.                 DIO = CY;
  46.                 CLK_L;
  47.                 Delay_us(5);
  48.                 CLK_H;
  49.                 Delay_us(5);
  50.                 CLK_L;
  51.         }
  52. }

  53. void AiP650_Set(u8 add,u8 dat) //數碼管顯示
  54. {
  55.         //寫顯存必須從高地址開始寫
  56.         I2CStart();
  57.         I2CWrByte(add); //第一個顯存地址
  58.         I2Cask();
  59.         I2CWrByte(dat);
  60.         I2Cask();
  61.         I2CStop();
  62. }

  63. void AiP650_DisPlay(u8 DIG_Bit, u8 Display_num)                //顯示一位數字
  64. {
  65.         AiP650_Set(DIG_BIT_CODE[DIG_Bit-1],DISPLAY_CODE[Display_num]);
  66. }

  67. void AiP650_CLR()                                                                   //清屏
  68. {
  69.         u8 i;
  70.         for(i=0;i<4;i++)
  71.         {
  72.                 AiP650_Set(DIG_BIT_CODE[i],0x00);               
  73.         }
  74. }

  75. void AiP650_DisPlayFourNum(u16 Display_num)                //顯示一個四位數 (0-9999)
  76. {
  77.         u8 One,Two,Three,Four;
  78.         One   = Display_num/1000;
  79.         Two   = Display_num%1000/100;
  80.         Three = Display_num%100/10;
  81.         Four  = Display_num%10;
  82.         if(One == 0)
  83.         {
  84.                 AiP650_Set(DIG_BIT_CODE[0],0x00);       
  85.                 if(Two == 0)
  86.                 {
  87.                         AiP650_Set(DIG_BIT_CODE[1],0x00);
  88.                         if(Three == 0)
  89.                         {
  90.                                 AiP650_Set(DIG_BIT_CODE[2],0x00);
  91.                         }
  92.                         else
  93.                         {
  94.                                 AiP650_DisPlay(3,Three);
  95.                         }
  96.                         AiP650_DisPlay(4,Four);
  97.                 }
  98.                 else
  99.                 {
  100.                         AiP650_DisPlay(2,Two);
  101.                         AiP650_DisPlay(3,Three);
  102.                         AiP650_DisPlay(4,Four);       
  103.                 }
  104.         }
  105.         else  
  106.         {
  107.                 AiP650_DisPlay(1,One);
  108.                 AiP650_DisPlay(2,Two);
  109.                 AiP650_DisPlay(3,Three);
  110.                 AiP650_DisPlay(4,Four);
  111.         }                       
  112. }
  113. void AiP650_DisPlayOnePointNum(u16 Display_num)                //顯示帶一位小數
  114. {
  115.         u8 One,Two,Three,Four;
  116.         One   = Display_num/1000;
  117.         Two   = Display_num%1000/100;
  118.         Three = Display_num%100/10;
  119.         Four  = Display_num%10;
  120.         if(One == 0)
  121.         {
  122.                 AiP650_Set(DIG_BIT_CODE[0],0x00);       
  123.                 if(Two == 0)
  124.                 {
  125.                         AiP650_Set(DIG_BIT_CODE[1],0x00);
  126.                         AiP650_Set(DIG_BIT_CODE[2],DISPLAY_Point_CODE[Three]);
  127.                         AiP650_DisPlay(4,Four);
  128.                 }
  129.                 else
  130.                 {
  131.                         AiP650_DisPlay(2,Two);
  132.                         AiP650_Set(DIG_BIT_CODE[2],DISPLAY_Point_CODE[Three]);
  133.                         AiP650_DisPlay(4,Four);       
  134.                 }
  135.         }
  136.         else  
  137.         {
  138.                 AiP650_DisPlay(1,One);
  139.                 AiP650_DisPlay(2,Two);
  140.                 AiP650_Set(DIG_BIT_CODE[2],DISPLAY_Point_CODE[Three]);
  141.                 AiP650_DisPlay(4,Four);
  142.         }                       
  143. }
  144. void AiP650_DisPlayTwoPointNum(u16 Display_num)                //顯示帶兩位小數
  145. {
  146.         u8 One,Two,Three,Four;
  147.         One   = Display_num/1000;
  148.         Two   = Display_num%1000/100;
  149.         Three = Display_num%100/10;
  150.         Four  = Display_num%10;
  151.         if(One == 0)
  152.         {
  153.                 AiP650_Set(DIG_BIT_CODE[0],0x00);       
  154.                 AiP650_Set(DIG_BIT_CODE[1],DISPLAY_Point_CODE[Two]);
  155.                 AiP650_DisPlay(3,Three);
  156.                 AiP650_DisPlay(4,Four);
  157.         }
  158.         else  
  159.         {
  160.                 AiP650_DisPlay(1,One);
  161.                 AiP650_Set(DIG_BIT_CODE[1],DISPLAY_Point_CODE[Two]);
  162.                 AiP650_DisPlay(3,Three);
  163.                 AiP650_DisPlay(4,Four);
  164.         }                       
  165. }
  166. void Light_Level_Set(u8 Level)                                           //設置亮度等級 1-8級
  167. {
  168.         AiP650_Set(0x48,Light_Level_CODE[Level-1]);
  169. }
  170. ……………………

  171. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
【實用電子小模塊】單相電能計量模塊-UART接口-HLW8032芯片.rar (1.91 MB, 下載次數: 537)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:600684 發表于 2019-8-19 14:14 | 只看該作者
第一次做,程序會持續優化,歡迎大家交流。
回復

使用道具 舉報

板凳
ID:202599 發表于 2019-10-12 09:31 | 只看該作者
謝謝樓主,辛苦了。
回復

使用道具 舉報

地板
ID:59423 發表于 2019-10-12 13:50 | 只看該作者
計量芯片都是使用SPI接口居多。
回復

使用道具 舉報

5#
ID:79874 發表于 2019-11-4 15:10 來自手機 | 只看該作者
樓主能否提供下PCB設計源文件
回復

使用道具 舉報

6#
ID:65956 發表于 2019-11-5 09:53 | 只看該作者
這個我以前也作過,但效果不是很好,可能跟當時需求部門要求有一定的難度造成的,所以后來沒有繼續,現在下載你的下來參考一下
回復

使用道具 舉報

7#
ID:250660 發表于 2019-12-27 21:43 | 只看該作者
你的 CUR_Flag==0 注釋了是為什么
回復

使用道具 舉報

8#
ID:55115 發表于 2020-7-28 13:25 | 只看該作者
不能知道和HLW8110通用不?下載來看看吧!
回復

使用道具 舉報

9#
ID:721297 發表于 2020-9-25 21:02 | 只看該作者
在幫別人寫個測交流電壓電流程序,用的HLW8110,沒想到這個片子只有SOP8封裝而且只支持串口9600bps通訊,網上想找個程序好難啊
回復

使用道具 舉報

10#
ID:824001 發表于 2020-9-27 21:17 來自手機 | 只看該作者
這個模塊要校準嗎
回復

使用道具 舉報

11#
ID:588044 發表于 2021-10-28 10:17 | 只看該作者
下來學習下,謝謝樓主分享!
回復

使用道具 舉報

12#
ID:1013669 發表于 2022-3-28 13:52 | 只看該作者
電量圖不全啊。單片機電路在哪里?
回復

使用道具 舉報

13#
ID:373 發表于 2022-8-12 11:35 | 只看該作者
學習下,希望有用,有用我再來回帖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲免费精品 | 久草精品视频 | 超碰在线国产 | 精品亚洲一区二区三区四区五区 | 特级生活片 | 国产在线一区观看 | 97热在线| 国产一区二区视频在线 | 日本不卡一区 | 国产福利视频导航 | 日韩毛片在线免费观看 | 国产一区二区激情视频 | 久久久久久国产精品 | 国产一区免费视频 | 亚洲精品乱码久久久久久蜜桃91 | 中文字幕免费在线观看 | 日日摸日日爽 | 久久久久久亚洲精品 | 日本一二三区电影 | 成人福利影院 | 欧美成人精品激情在线观看 | 九九免费观看视频 | 丝袜美腿一区二区三区动态图 | 成人免费视屏 | zzzwww在线看片免费 | 伊人久麻豆社区 | 欧美一区二区三区精品免费 | 亚洲精品毛片av | 国产精品久久久久久福利一牛影视 | 午夜亚洲| 男女羞羞网站 | 精品久久精品 | 四季久久免费一区二区三区四区 | 人和拘一级毛片c | 高清黄色网址 | 97人人澡人人爽91综合色 | 先锋资源吧 | 久久久国产一区 | 久久av一区 | 草久久| 久久99蜜桃综合影院免费观看 |