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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15W408AS單片機+數碼管顯示電度表每閃功率程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:343102 發表于 2023-8-23 18:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
現在電子式電度表很便宜,買了一個測量電動車的充電量,以此估算電池性能。
為方便觀察充電時間和充電功率,本人用STC15W408AS做了一個計時計數器。利用光敏二極管將電度表的閃燈信號轉化為電脈沖信號,經單片機計算處理后,用一個4位數碼管輪流顯示充電度數、每閃功率和充電時長。程序見附件。

單片機源程序如下:

  1. #define MAIN_Fosc                12000000        //定義主時鐘
  2. //#include<reg52.h>
  3. #include        "STC15Fxxxx.H"
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit COUNT_IN=P3^2;
  7. unsigned code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  8. #define   DataPort P1;
  9. sbit led1=P3^4;
  10. sbit led2=P3^5;
  11. sbit led3=P3^6;
  12. sbit led4=P3^7;

  13. unsigned long count;   //max 4294967295*.000625Kwh=2684354Kws
  14. unsigned long  kwh;    //max 4294967295*.000625Kwh=2684354Kws
  15. unsigned int t0,t1,w0,w,s10;  //t0,t1 max 65535*.05=3276s, w max 45000w, s10 max 65535*10s/3600s=182h,7.58day
  16. unsigned char h;              //max 65535*10s/3600s=182h,7.58day
  17. bit flag;

  18. void init()
  19. {
  20.    IT0=1;        //INT0負跳變觸發        
  21.    TMOD=0x01;//定時器工作于方式1
  22.    TH0=0x3c;          //50ms 12Mhz
  23.    TL0=0xb0;
  24.          EA=1; //CPU開中斷總允許
  25.    ET0=1;//開定時中斷
  26.    EX0=1;//開外部INTO中斷
  27.    TR0=1;//啟動定時
  28. }
  29. //========================================================================
  30. // 函數: void  Delayms(unsigned int ms)
  31. // 描述: STC15延時函數。
  32. // 參數: ms,要延時的ms數, 這里只支持1~65535ms. 自動適應主時鐘.
  33. // 返回: none.
  34. // 版本: VER1.0
  35. // 日期: 2013-4-1
  36. // 備注:
  37. //========================================================================
  38. void  Delayms(unsigned int ms)
  39. {
  40.    unsigned int i;
  41.          do{
  42.              i = MAIN_Fosc / 13000;
  43.                   while(--i)        ;   //14T per loop
  44.      }while(--ms);
  45. }
  46. //**********************************************
  47. void EXINT0() interrupt 0
  48. {
  49. //  kwh=kwh+.000625;
  50.   count++;         //累計電度表輸出脈沖個數
  51.         w0=45000/t1;  //每閃功率瓦數 w=.625*3600*20/t1(50毫秒數)
  52.         t1=0;         //每閃時長清0
  53. }

  54. void time0() interrupt 1
  55. {
  56.   TH0=0x3c;
  57.   TL0=0xb0;         //50ms,STC15W408AS內部時鐘,12Mhz
  58.   t0++;          //累計時長
  59.   t1++;          //每閃時長
  60.         if(t0>199) //10s 200*.05s=10s
  61.         {
  62.          t0=0;
  63.          s10=s10+1;  //max 65535*10s/3600s=182h,7.58day
  64.         }
  65.         if(t1>65534) //max 65534*.05=3276s
  66.         {
  67.          t1=65534;
  68.         }
  69. }

  70. void display_SMG_kwh(void)
  71. {
  72.    P1=table[kwh/1000];
  73.    led1= 0;
  74.    Delayms(5);
  75.    led1 = 1;

  76.    P1=table[kwh%1000/100]&0x7f;
  77.    led2 = 0;
  78.    Delayms(5);
  79.    led2 = 1;

  80.    P1=table[kwh%100/10];
  81.    led3 = 0;
  82.    Delayms(5);
  83.    led3 = 1;

  84.    P1=table[kwh%10];
  85.    led4 = 0;
  86.    Delayms(5);
  87.    led4 = 1;
  88. }

  89. void display_SMG_w(void)
  90. {
  91.    P1=table[w%10000/1000];
  92.    led1= 0;
  93.    Delayms(5);
  94.    led1 = 1;

  95.    P1=(table[w%1000/100]);
  96.    led2 = 0;
  97.    Delayms(5);
  98.    led2 = 1;

  99.    P1=table[w%100/10];
  100.    led3 = 0;
  101.    Delayms(5);
  102.    led3 = 1;

  103.    P1=table[w%10];
  104.    led4 = 0;
  105.    Delayms(5);
  106.    led4 = 1;
  107. }

  108. void display_SMG_h(void)
  109. {
  110.    P1=0x8b;
  111. //   P1=table[h/1000];
  112.    led1= 0;
  113.    Delayms(5);
  114.    led1 = 1;

  115.    P1=table[h%1000/100];
  116.    led2 = 0;
  117.    Delayms(5);
  118.    led2 = 1;

  119.    P1=table[h%100/10]&0x7f;
  120.    led3 = 0;
  121.    Delayms(5);
  122.    led3 = 1;

  123.    P1=table[h%10];
  124.    led4 = 0;
  125.    Delayms(5);
  126.    led4 = 1;
  127. }

  128. void main()
  129. {
  130.   unsigned char a;
  131.   init();
  132.   while(1)
  133.   {
  134.    for(a=0;a<=50;a++)
  135.    {
  136.     kwh=count*.0625;               //用電度數=電度表閃燈次數*.000625kwh*100,(2位小數)
  137.     display_SMG_kwh();
  138.    }
  139.    for(a=0;a<=50;a++)
  140.    {
  141. //    w=kwh*1000*3600/s10;                   //用電瓦數=累計千瓦時*1000*3600/累計秒數
  142.                 w=w0;
  143.     display_SMG_w();
  144.    }
  145.    for(a=0;a<=50;a++)
  146.    {
  147.     h=s10/360;                            //用電小時數=累計秒數/3600*10,(1位小數)
  148.     display_SMG_h();
  149.    }
  150.   }
  151. }
復制代碼



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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女久久久久久免费 | 国产精品 欧美精品 | japan25hdxxxx日本| 91成人| 日韩中出 | 欧美6一10sex性hd | 爱爱小视频 | 欧美精品在线一区二区三区 | 亚洲国产视频一区二区 | 久久久久久久久久久高潮一区二区 | 国产日韩欧美激情 | 精品视频一区二区三区在线观看 | 国产欧美日韩综合精品一区二区 | 精品国产乱码久久久久久丨区2区 | 国产毛片视频 | 午夜精品久久久久久久99黑人 | 精品视频在线观看 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 欧美中文字幕一区 | 黄色成人国产 | 欧美寡妇偷汉性猛交 | 91视频一区二区 | 国产精品一区二区三区在线播放 | 伊人伊人伊人 | 精品欧美一区二区三区久久久 | 久久99精品久久久久久国产越南 | 国产成人av一区二区三区 | 日本激情一区二区 | 日韩视频国产 | 久久99精品久久久久久青青日本 | 99久久精品免费看国产高清 | 高清国产一区二区 | 色婷婷综合网站 | 中文字幕在线三区 | 日韩精品在线免费观看视频 | 久草新视频 | 99久久免费精品视频 | 国产亚洲精品精品国产亚洲综合 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 国产精品美女久久久久久久久久久 | 一区二区三区精品视频 |