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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2163|回復: 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. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91亚洲精品国偷拍自产在线观看 | 在线国产一区二区 | 亚洲网址在线观看 | 久久久国产一区二区三区四区小说 | 久久久国产精品一区 | 91精品国产91久久综合桃花 | 中文字幕不卡在线观看 | 亚洲免费在线观看 | 日韩中文字幕一区二区三区 | 国产最新网址 | 亚洲一区二区三区四区五区午夜 | www.国产日本 | 日日夜夜精品视频 | 国产精品国产精品国产专区不卡 | 国产在线精品一区二区三区 | 色婷婷一区 | 亚洲最大成人综合 | 国产中文 | 亚洲精品在线观看视频 | 久久久区 | 亚洲精品一区中文字幕乱码 | 国产欧美精品一区二区 | 成人在线日韩 | 夜夜操天天操 | 国产激情视频在线观看 | 先锋影音资源网站 | 亚洲一区 | 九九热这里只有精品6 | 农村真人裸体丰满少妇毛片 | 中文字幕日韩在线观看 | 国产一区高清 | 久草福利 | 国产1区在线| 成人精品免费视频 | 特黄色一级毛片 | 91一区二区三区在线观看 | 亚洲91精品 | 欧美一级电影免费 | 国产高清视频在线观看 | 国产色在线 | 毛片.com|