找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3395|回复: 1
收起左侧

用单片机对机械式电度表进行改进 附源程序

[复制链接]
ID:343102 发表于 2018-8-11 13:45 | 显示全部楼层 |阅读模式
电动车是吃得多才能跑的远,为方便测试电动车电瓶的容量,前段时间在某宝入手了一个机械式电度表,到手只有十几元。不过便宜没好货,这货经常停走。检查发现是机械计数器阻力太大造成的。于是采用单片机对其进行改进,改进思路是用单片机记录电度表的光耦输出脉冲,转换成电度数用数码管显示出来。另外还分时显示了充电器功率(瓦数)和充电时间(小时数)。程序见附件。
电度表改进.jpg

单片机源程序如下:
  1. #define MAIN_Fosc                11059200L        //定义主时钟
  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;
  14. unsigned long  kwh;
  15. unsigned int w,h;
  16. float s;
  17. bit flag;

  18. void init()
  19. {
  20.    IT0=1;        //INT0负跳变触发        
  21.    TMOD=0x01;//定时器工作于方式1
  22.    TH0=0x3c;          //50ms
  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. // 描述: 延时函数。
  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. }

  52. void time0() interrupt 1
  53. {
  54.   TH0=0x3c;
  55.   TL0=0xb0;         //50ms(实测每次循环52.9514ms,使用STC15W408AS内部时钟,11.0592Mhz,环境温度29℃)
  56.   s=s+.0529514;          //累计秒数
  57. }

  58. void display_SMG_kwh(void)
  59. {
  60.    P1=table[kwh/1000];
  61.    led1= 0;
  62.    Delayms(5);
  63.    led1 = 1;

  64.    P1=table[kwh%1000/100]&0x7f;
  65.    led2 = 0;
  66.    Delayms(5);
  67.    led2 = 1;

  68.    P1=table[kwh%100/10];
  69.    led3 = 0;
  70.    Delayms(5);
  71.    led3 = 1;

  72.    P1=table[kwh%10];
  73.    led4 = 0;
  74.    Delayms(5);
  75.    led4 = 1;
  76. }

  77. void display_SMG_w(void)
  78. {
  79.    P1=table[w%10000/1000];
  80.    led1= 0;
  81.    Delayms(5);
  82.    led1 = 1;

  83.    P1=(table[w%1000/100]);
  84.    led2 = 0;
  85.    Delayms(5);
  86.    led2 = 1;

  87.    P1=table[w%100/10];
  88.    led3 = 0;
  89.    Delayms(5);
  90.    led3 = 1;

  91.    P1=table[w%10];
  92.    led4 = 0;
  93.    Delayms(5);
  94.    led4 = 1;
  95. }

  96. void display_SMG_h(void)
  97. {
  98.    P1=0x8b;
  99. //   P1=table[h/1000];
  100.    led1= 0;
  101.    Delayms(5);
  102.    led1 = 1;

  103.    P1=table[h%1000/100];
  104.    led2 = 0;
  105.    Delayms(5);
  106.    led2 = 1;

  107.    P1=table[h%100/10]&0x7f;
  108.    led3 = 0;
  109.    Delayms(5);
  110.    led3 = 1;

  111.    P1=table[h%10];
  112.    led4 = 0;
  113.    Delayms(5);
  114.    led4 = 1;
  115. }

  116. void main()
  117. {
  118.   unsigned char a;
  119.   init();
  120.   while(1)
  121.   {
  122.    for(a=0;a<=50;a++)
  123.    {
  124.     kwh=count*.0625;               //用电度数=电度表闪灯次数*.000625kwh/1000*100,(2位小数)
  125.     display_SMG_kwh();
  126.    }
  127.    for(a=0;a<=50;a++)
  128.    {
  129.     w=kwh*1000*3600/s;                   //用电瓦数=累计千瓦时*1000*3600/累计秒数
  130.     display_SMG_w();
  131.    }
  132.    for(a=0;a<=50;a++)
  133.    {
  134.     h=s/360;                            //用电小时数=累计秒数/3600*10,(1位小数)
  135. ……………………

  136. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
STC15W408AS+电度表smg4.rar (47.84 KB, 下载次数: 15)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:137736 发表于 2022-11-2 09:37 | 显示全部楼层
请介绍的再详细些,多上些图。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表