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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4489|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+ACS712ELCTR+PCF8591電壓電流表程序原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
電路原理圖如下:


直流電壓表單片機(jī)源程序如下:
#include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
#include<stdio.h>
#include "1602.h"
#include "delay.h"
#include "i2c.h"

char dis0[16];                           //打印數(shù)組初始化
unsigned long time_20ms=0;                   //定時(shí)器計(jì)數(shù)

float Volt=0.0;                          //檢測(cè)電壓
float Acurrent=0.0;                                  //檢測(cè)電流

void Init_Timer0(void);                //函數(shù)聲明
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();        //定時(shí)器0初始化
        UART_Init();                  //串口初始化
                     
        LCD_Init();           //初始化液晶
        DelayMs(20);          //延時(shí)有助于穩(wěn)定
        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)         //主循環(huán)
        {
                midvolt=ReadADC(1);                                //讀取AD檢測(cè)到的 電壓值
                DelayMs(50);          //延時(shí)有助于穩(wěn)定
                midcur=ReadADC(0);                //讀取電流轉(zhuǎn)化后的電壓值

                Volt=(float)midvolt*5.13/255*3;                //計(jì)算出電壓 *3表示分壓值
                Acurrent=(float)midcur*5.13/255;                //計(jì)算出電流
                                                                                                
                if(Acurrent>2.62)                         //如果電流轉(zhuǎn)換后的電壓值超過(guò)2.62
                {
                        Acurrent=(Acurrent-2.62)/0.185;         //電流模塊 電壓轉(zhuǎn)換計(jì)算
                }
                else
                {
                        Acurrent=0;
                }        

                sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印電壓電流值
                LCD_Write_String(0,1,dis0);//顯示第二行
//                uartSendStr(dis0,16);          //串口上報(bào)
//                uartSendStr("\n",1);                           //換行
                DelayMs(500);          //延時(shí)有助于穩(wěn)定
        }
}


void Init_Timer0(void)
{
        TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
        TH0=(65536-20000)/256;                  //重新賦值 20ms
        TL0=(65536-20000)%256;
        EA=1;            //總中斷打開(kāi)
        ET0=1;           //定時(shí)器中斷打開(kāi)
        TR0=1;           //定時(shí)器開(kāi)關(guān)打開(kāi)
}

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 打開(kāi)                        
    EA    = 1;                  //打開(kāi)總中斷
    ES    = 1;                  //打開(kāi)串口中斷
}

void uartSendByte(unsigned char dat)
{
        unsigned char time_out;
        time_out=0x00;
        SBUF = dat;                          //將數(shù)據(jù)放入SBUF中
        while((!TI)&&(time_out<100))  //檢測(cè)是否發(fā)送出去
        {time_out++;DelayUs2x(10);}        //未發(fā)送出去 進(jìn)行短暫延時(shí)
        TI = 0;                                                //清除ti標(biāo)志
}

void uartSendStr(unsigned char *s,unsigned char length)
{
        unsigned char NUM;
        NUM=0x00;
        while(NUM<length)        //發(fā)送長(zhǎng)度對(duì)比
        {
                uartSendByte(*s);  //放松單字節(jié)數(shù)據(jù)
                s++;                  //指針++
                NUM++;                  //下一個(gè)++
           }
}

void UART_SER (void) interrupt 4         //串行中斷服務(wù)程序
{
        if(RI)                        //判斷是接收中斷產(chǎn)生
        {
                RI=0;                      //標(biāo)志位清零
        }
        if(TI)  //如果是發(fā)送標(biāo)志位,清零
        TI=0;
}

全部資料51hei下載地址:
電壓電流表資料.rar (141.7 KB, 下載次數(shù): 138)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:907943 發(fā)表于 2021-4-23 16:22 | 只看該作者
樓主我想把他改成測(cè)8路電流電壓怎么改
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 射欧美 | 久久精品色欧美aⅴ一区二区 | av在线一区二区三区 | 精品三区 | 亚洲综合色网 | 久久精品国产久精国产 | 国产视频精品区 | 日日夜夜天天综合 | 亚洲资源站 | 日韩毛片播放 | 国产精品s色 | 91电影院 | 黄网站在线播放 | 国产欧美一区二区三区久久 | 黄网站免费在线观看 | 成人二区 | 国产日韩一区二区 | 日本在线免费看最新的电影 | www.久久久久久久久 | 最新日韩精品 | 成人h视频在线 | 可以免费看的毛片 | av在线免费播放 | 日本国产欧美 | 成人国产精品视频 | 亚洲一区二区免费视频 | 欧美日韩中文在线观看 | 国产精品成人在线 | 亚洲国产精品一区二区久久 | 国产精品久久久久久久久久 | 男人电影天堂 | 影音先锋中文在线 | 午夜影院在线观看视频 | av在线电影网 | 91久久北条麻妃一区二区三区 | av天天爽 | 高清国产一区二区 | 亚洲国产伊人 | 婷婷丁香在线视频 | 国产资源在线观看 | 久久久久国产一区二区三区四区 |