欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 32336|回復: 33
收起左側

ACS712+單片機實現電流檢測與報警的電路原理圖與源碼

  [復制鏈接]
ID:139086 發表于 2018-3-24 11:18 | 顯示全部樓層 |閱讀模式
ACS712電流檢測與報警模塊系統的外觀:
0.jpg

ACS712電路原理圖:
0.jpg


ACS712單片機源程序如下:
  1. 實現功能:檢測電流,數碼管顯示電流值
  2. 使用芯片:STC12C2054AD  
  3. 產品模塊編號:kzs1211-75150k (雙路輸入,繼電器單路輸出,三個按鍵,四位數碼管模塊)
  4. 晶振:片內晶振

  5. #include<STC12C56.h>                 //庫文件
  6. #include <intrins.h>
  7. #define uchar unsigned char//宏定義無符號字符型
  8. #define uint unsigned int  //宏定義無符號整型
  9. #define FOSC 11059200L
  10. #define BAUD  9600

  11. #define ADC_POWER   0x80            //ADC 電源控制位
  12. #define ADC_FLAG    0x10            //ADC 轉換結束標志位
  13. #define ADC_START   0x08            //ADC 開始轉換控制位
  14. #define ADC_SPEEDLL 0x00            //1080個時鐘周期轉換一次
  15. #define ADC_SPEEDL  0x20            //810 個時鐘周期轉換一次
  16. #define ADC_SPEEDH  0x40            //540個時鐘周期轉換一次
  17. #define ADC_SPEEDHH 0x60            //270個時鐘周期轉換一次

  18. sfr ADC_DATA=0xc6;           //70個時鐘周期轉換一次
  19. void display(void);                  //顯示函數
  20. void t_to_dis(uint num);

  21. #define DUAN P2                   //P0口控制段
  22. #define WEI  P1                   //P2口控制位
  23. /********************************************************************
  24.                             初始定義
  25. *********************************************************************/
  26. //數碼管顯示段碼
  27. code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
  28. //數碼管位控制端
  29. sbit wei1=P1^0;
  30. sbit wei2=P1^1;
  31. sbit wei3=P1^2;
  32. sbit wei4=P1^3;  
  33. //繼電器輸出控制端                           
  34. sbit OUT=P3^7;
  35. //按鍵輸入控制端
  36. sbit key1=P3^2;
  37. sbit key2=P3^3;
  38. sbit key3=P3^4;
  39. //兩路輸入控制端可做ad采樣
  40. sbit IN1=P1^6;
  41. sbit IN2=P1^5;
  42. sbit IC=P1^7;
  43. uchar numb[4];              //定義字符串用于數值轉換
  44. uint tcnt;
  45. uchar cnt,times,date;
  46. uint ad,ad2;
  47. float ad1;
  48. /********************************************************************
  49.                             命令定義
  50. *********************************************************************/
  51. #define CMD_IDLE     0         //EEPROM無操作
  52. #define CMD_READ     1         //讀取字節
  53. #define CMD_PROGRAM  2         //寫入字節
  54. #define CMD_ERASE    3         //擦除字節
  55. /********************************************************************
  56.                        編程周期由晶振決定
  57. *********************************************************************/
  58. #define ENABLE_IAP 0X83         //編程周期由晶振決定(如果<12MHZ選用此項)
  59. #define IAP_ADDRESS 0X0000                      //內部EEPROM地址

  60. /********************************************************************
  61.                             操作函數
  62. *********************************************************************/
  63. void IapIdle()
  64. {
  65.         IAP_CONTR=0;
  66.         IAP_CMD=0;
  67.         IAP_TRIG=0;
  68.         IAP_ADDRH=0X80;
  69.         IAP_ADDRL=0;
  70. }
  71. /********************************************************************
  72.                             讀取一個字節函數
  73. *********************************************************************/
  74. uchar IapReadByte(uint addr)
  75. {
  76.         uchar dat;  
  77.         IAP_CONTR=ENABLE_IAP;
  78.         IAP_CMD=CMD_READ;
  79.         IAP_ADDRL=addr;
  80.         IAP_ADDRH=addr>>8;
  81.         IAP_TRIG=0X46;
  82.         IAP_TRIG=0XB9;
  83.         _nop_();
  84.         _nop_();
  85.         _nop_();
  86.         dat=IAP_DATA;
  87.         IapIdle();
  88.         return dat;
  89. }
  90. /********************************************************************
  91.                             寫入一個字節函數
  92. *********************************************************************/
  93. void IapProgramByte(uint addr,uchar dat)
  94. {
  95.         IAP_CONTR=ENABLE_IAP;
  96.         IAP_CMD=CMD_PROGRAM;
  97.         IAP_ADDRL=addr;
  98.         IAP_ADDRH=addr>>8;
  99.         IAP_DATA=dat;
  100.         IAP_TRIG=0X46;
  101.         IAP_TRIG=0XB9;
  102.         _nop_();
  103.         _nop_();
  104.         _nop_();
  105.         IapIdle();
  106. }
  107. /********************************************************************
  108.                             擦除一個字節函數
  109. *********************************************************************/
  110. void IapEraseSector(uint addr)
  111. {
  112.         IAP_CONTR=ENABLE_IAP;
  113.         IAP_CMD=CMD_ERASE;
  114.         IAP_ADDRL=addr;
  115.         IAP_ADDRH=addr>>8;
  116.         IAP_TRIG=0X46;
  117.         IAP_TRIG=0XB9;
  118.         _nop_();
  119.         _nop_();
  120.         _nop_();
  121.         IapIdle();
  122. }
  123. /********************************************************************
  124.                             延時函數
  125. *********************************************************************/
  126. void delay(uint x)//延時程序 0.1秒
  127. {
  128.         uint m,n,s;
  129.         for(m=x;m>0;m--)
  130.         for(n=20;n>0;n--)
  131.         for(s=248;s>0;s--);
  132. }
  133. /********************************************************************
  134.                          AD轉換初始化程序
  135. *********************************************************************/
  136. void InitADC()
  137. {
  138.     P1=P1M0|=0xf0;
  139.         P1M1=0x00;
  140.         ADC_DATA=0;        //AD數據寄存器清空
  141.     ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;//打開AD電源,轉換周期XX
  142.     delay(10);                //延時
  143. }
  144. /********************************************************************
  145.                          AD轉換控制程序
  146. *********************************************************************/
  147. uint GetADCResult(uchar px)          //轉換輸出的數據 (PX為通道口)
  148. {
  149.     uint t;
  150.         ADC_CONTR=ADC_POWER | ADC_SPEEDHH | px | ADC_START;//開始轉換
  151.     _nop_();                        //延時一個機器周期
  152.     _nop_();                                                //延時一個機器周期
  153.     _nop_();                                                //延時一個機器周期
  154.     _nop_();                                                //延時一個機器周期
  155.         while (!(ADC_CONTR & ADC_FLAG));//等待轉換結束
  156.         ADC_CONTR &= ~ADC_FLAG;       //關閉AD轉換
  157.         t=(ADC_DATA<<2)|ADC_LOW2;
  158.         return t;
  159. }                  
  160. /********************************************************************
  161.                            IO口初始化函數
  162. *********************************************************************/   
  163. void init_all(void)
  164. {               
  165.     P2M1=0;
  166.         P2M0=0xff;
  167.         P1M1=0x80;
  168.         P1M0=0x0f;
  169.         P3M1&=0x7f;
  170.         P3M0|=0x80;
  171. }
  172. /********************************************************************
  173.                            定時器T1初始化
  174. *********************************************************************/
  175. void timer0init(void)
  176. {
  177.          TMOD=0X01;                  //設定定時器工作方式
  178.          TH0 =(655336-1000)/256;
  179.      TL0 =(655336-1000)%256;
  180.          ET0=1;
  181.          TR0=1;
  182.          EA=1;
  183. }
  184. /********************************************************************
  185.                             主函數
  186. *********************************************************************/
  187. void main()
  188. {         
  189.    
  190.     init_all();         //初始化IO
  191.         timer0init();//定時器初始化
  192.    // InitADC();  //AD初始化
  193.           date=IapReadByte(0);
  194.          
  195.         while(1)
  196.         {  
  197.              if(key1==0)
  198.                  {
  199.                    delay(20);
  200.                    if(key1==0)
  201.                    {
  202.                             while(!key1);
  203.                          date++;
  204.                          if(date>=25)
  205.                            date=25;
  206.                          IapEraseSector(0);
  207.                          IapProgramByte(0,date);
  208.                    }
  209.                  }
  210.                   if(key2==0)
  211.                  {
  212.                    delay(20);
  213.                    if(key2==0)
  214.                    {
  215.                             while(!key2);
  216.                          date--;
  217.                          if(date<=2)
  218.                            date=2;
  219.                          IapEraseSector(0);
  220.                          IapProgramByte(0,date);
  221.                    }
  222.                  }
  223.                   t_to_dis(date);   //數值變換
  224. //                 ad=GetADCResult(7);
  225. //                 if(times>=250)
  226. //                 {
  227. //                    times=0;
  228. //                        ad=ad-2;
  229. //                    ad1=(ad*50.0)/1024-25;
  230. //                    ad1=ad1*100;
  231. //                    t_to_dis(ad1);   //數值變換
  232. //                 }
  233.     }
  234. }
  235. /********************************************************************
  236. ……………………

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

所有資料51hei提供下載:
電流報警模塊資料.rar (2.37 MB, 下載次數: 705)


評分

參與人數 2黑幣 +10 收起 理由
shadeb + 5 很給力!
LIUXue12345634 + 5 贊一個!

查看全部評分

回復

使用道具 舉報

ID:321828 發表于 2018-7-20 09:57 | 顯示全部樓層
看看,,,,,
回復

使用道具 舉報

ID:81365 發表于 2018-7-20 16:49 | 顯示全部樓層
XUEXI學習了
回復

使用道具 舉報

ID:377614 發表于 2018-7-22 22:59 | 顯示全部樓層
這個可以作為商業用途嗎?我感覺蠻好的
回復

使用道具 舉報

ID:394505 發表于 2018-9-6 13:31 | 顯示全部樓層
學習了。!
回復

使用道具 舉報

ID:381274 發表于 2018-9-18 13:46 | 顯示全部樓層
這個能測最低多少瓦的負載?感性負載測量測量準確么
回復

使用道具 舉報

ID:415940 發表于 2018-10-26 18:41 | 顯示全部樓層
請教版主    板子鏈接有嗎 我搜不到
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
ID:409028 發表于 2018-11-12 19:51 | 顯示全部樓層
        很給力!
回復

使用道具 舉報

ID:409028 發表于 2018-11-12 19:52 | 顯示全部樓層

XUEXI學習了哈哈哈
回復

使用道具 舉報

11#
無效樓層,該帖已經被刪除
ID:465191 發表于 2019-1-9 16:05 | 顯示全部樓層
感謝分享  學習了
回復

使用道具 舉報

ID:465191 發表于 2019-1-10 10:02 | 顯示全部樓層
這個很有用 真是太及時了
回復

使用道具 舉報

ID:277230 發表于 2019-1-21 19:33 | 顯示全部樓層
正好在找這一塊的資料。 謝謝大佬,仔細閱讀肯定有長進~
回復

使用道具 舉報

ID:79874 發表于 2019-1-22 14:31 | 顯示全部樓層
能提供畫的PCB啊
回復

使用道具 舉報

ID:486105 發表于 2019-3-7 11:02 | 顯示全部樓層
過來看看
回復

使用道具 舉報

ID:490231 發表于 2019-3-29 14:04 | 顯示全部樓層
非常不錯的
回復

使用道具 舉報

ID:190160 發表于 2019-4-11 16:46 | 顯示全部樓層
感謝分享,學習了
回復

使用道具 舉報

ID:190160 發表于 2019-4-11 16:50 | 顯示全部樓層
值得學習,研究研究這個算法
回復

使用道具 舉報

ID:110606 發表于 2019-4-17 14:21 | 顯示全部樓層
已下載,學習啦,謝謝
回復

使用道具 舉報

ID:519271 發表于 2019-4-23 09:17
那個電流報警下載不了

ID:448229 發表于 2019-5-14 16:10 | 顯示全部樓層
學習了學習了
回復

使用道具 舉報

ID:139201 發表于 2019-5-27 10:18 | 顯示全部樓層
剛好有用到,學習學習
回復

使用道具 舉報

ID:579642 發表于 2019-7-8 01:07 | 顯示全部樓層
主要學習下交流電流的檢測算法
回復

使用道具 舉報

ID:653902 發表于 2019-12-2 00:22 | 顯示全部樓層
現在正好再使用ACS712模塊方面遇到一些問題,學習一下樓主的經驗。
回復

使用道具 舉報

ID:668067 發表于 2019-12-19 10:04 | 顯示全部樓層
匯編語言可以轉換這個嗎?
回復

使用道具 舉報

27#
無效樓層,該帖已經被刪除
28#
無效樓層,該帖已經被刪除
ID:682323 發表于 2020-4-29 12:01 | 顯示全部樓層
不錯,學習的好東西
回復

使用道具 舉報

ID:60263 發表于 2020-5-9 14:47 | 顯示全部樓層
ACS712模塊,精度高嗎?可以用來做電流表嗎?
回復

使用道具 舉報

ID:142485 發表于 2020-5-10 20:16 | 顯示全部樓層
不錯,報警功能怎么設置
回復

使用道具 舉報

32#
無效樓層,該帖已經被刪除
ID:669690 發表于 2020-6-11 22:23 | 顯示全部樓層
下載看看,謝謝
回復

使用道具 舉報

34#
無效樓層,該帖已經被刪除
ID:214628 發表于 2020-9-17 09:39 | 顯示全部樓層
謝謝樓主,正好需要研究一下。
回復

使用道具 舉報

36#
無效樓層,該帖已經被刪除
ID:752974 發表于 2021-1-6 15:47 | 顯示全部樓層
樓主不來了!
回復

使用道具 舉報

38#
無效樓層,該帖已經被刪除
ID:890524 發表于 2021-4-9 13:26 | 顯示全部樓層
大佬666在學習ACS712怎么用,就刷到這個帖子了
回復

使用道具 舉報

40#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表