找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3487|回复: 1
打印 上一主题 下一主题
收起左侧

单片机+ACS712ELCTR+PCF8591电压电流表程序原理图

[复制链接]
跳转到指定楼层
楼主
电路原理图如下:


直流电压表单片机源程序如下:
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"
#include "i2c.h"

char dis0[16];                           //打印数组初始化
unsigned long time_20ms=0;                   //定时器计数

float Volt=0.0;                          //检测电压
float Acurrent=0.0;                                  //检测电流

void Init_Timer0(void);                //函数声明
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);

void main (void)
{     
        unsigned char midvolt,midcur;  //电压电流中间变量值

        Init_Timer0();        //定时器0初始化
        UART_Init();                  //串口初始化
                     
        LCD_Init();           //初始化液晶
        DelayMs(20);          //延时有助于稳定
        LCD_Clear();
        sprintf(dis0,"My Designer!!  ");//打印
        LCD_Write_String(0,0,dis0);//显示第一行
        sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值
        LCD_Write_String(0,1,dis0);//显示第二行
        uartSendStr("reday ok!!",10);
        while (1)         //主循环
        {
                midvolt=ReadADC(1);                                //读取AD检测到的 电压值
                DelayMs(50);          //延时有助于稳定
                midcur=ReadADC(0);                //读取电流转化后的电压值

                Volt=(float)midvolt*5.13/255*3;                //计算出电压 *3表示分压值
                Acurrent=(float)midcur*5.13/255;                //计算出电流
                                                                                                
                if(Acurrent>2.62)                         //如果电流转换后的电压值超过2.62
                {
                        Acurrent=(Acurrent-2.62)/0.185;         //电流模块 电压转换计算
                }
                else
                {
                        Acurrent=0;
                }        

                sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值
                LCD_Write_String(0,1,dis0);//显示第二行
//                uartSendStr(dis0,16);          //串口上报
//                uartSendStr("\n",1);                           //换行
                DelayMs(500);          //延时有助于稳定
        }
}


void Init_Timer0(void)
{
        TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
        TH0=(65536-20000)/256;                  //重新赋值 20ms
        TL0=(65536-20000)%256;
        EA=1;            //总中断打开
        ET0=1;           //定时器中断打开
        TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1
{
        TH0=(65536-20000)/256;                  //重新赋值 20ms
        TL0=(65536-20000)%256;
        
        time_20ms++;
}


void UART_Init(void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
        TL1 = TH1;  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

void uartSendByte(unsigned char dat)
{
        unsigned char time_out;
        time_out=0x00;
        SBUF = dat;                          //将数据放入SBUF中
        while((!TI)&&(time_out<100))  //检测是否发送出去
        {time_out++;DelayUs2x(10);}        //未发送出去 进行短暂延时
        TI = 0;                                                //清除ti标志
}

void uartSendStr(unsigned char *s,unsigned char length)
{
        unsigned char NUM;
        NUM=0x00;
        while(NUM<length)        //发送长度对比
        {
                uartSendByte(*s);  //放松单字节数据
                s++;                  //指针++
                NUM++;                  //下一个++
           }
}

void UART_SER (void) interrupt 4         //串行中断服务程序
{
        if(RI)                        //判断是接收中断产生
        {
                RI=0;                      //标志位清零
        }
        if(TI)  //如果是发送标志位,清零
        TI=0;
}

全部资料51hei下载地址:
电压电流表资料.rar (141.7 KB, 下载次数: 125)

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:907943 发表于 2021-4-23 16:22 | 只看该作者
楼主我想把他改成测8路电流电压怎么改
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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