電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

STC89C52單片機數字電流表電壓表源碼與電路圖  51單片機電流電壓表

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2022-11-23

STC89C52單片機數字電流表電壓表電路原理圖如下:
51單片機電流表電壓表線路原理圖 

電流表電壓表原理框圖 

51單片機電流表電壓表程序流程圖 

BOM元器件報表 

51單片機源程序如下:

#include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#include

#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(200);          //延時有助于穩定

        }

}



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        {

                uartSendByte(*s);  //放松單字節數據

                s++;                  //指針++

                NUM++;                  //下一個++

           }

}


void UART_SER (void) interrupt 4         //串行中斷服務程序

{

        if(RI)                        //判斷是接收中斷產生

        {

                RI=0;                      //標志位清零

        }

        if(TI)  //如果是發送標志位,清零

        TI=0;

}


……………………

Tags:單片機,電流表,電壓表,設計  
責任編輯:admin
  • 上一篇文章:
  • 下一篇文章: 沒有了
  • 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
    1分 2分 3分 4分 5分

    還可以輸入 200 個字
    [ 查看全部 ] 網友評論
    關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
    返回頂部
    刷新頁面
    下到頁底
    晶體管查詢
    久久综合视频网| www四虎在线高清| 性XXXXBBBBXXXXX国产| 久久久精品午夜免费不卡| 日本三人交xxx69| 久久久国产乱子伦精品| 成人短视频完整版在线播放| 中文字幕国产日韩| 好男人在线神马影视在线观看www 好男人在线观看高清视频www | 亚洲免费人成视频观看| 最好的最新中文字幕8| 亚洲av永久无码精品古装片| 日本护士xxxx黑人巨大| 久久福利一区二区| 成人精品一区二区不卡视频| 两个人看的www视频日本| 天堂8在线天堂资源bt| AV无码免费一区二区三区| 国产精品无码久久久久久| 2021精品国产品免费观看| 国产激情视频一区二区三区 | 黑巨人与欧美精品一区| 国产极品美女高潮无套| 色妞妞www精品视频| 国产gaysexchina男同menxnxx| 精品一区二区三区无码免费直播| 公侵犯玩弄漂亮人妻优| 毛片女人毛片一级毛片毛片| 亚洲最大激情中文字幕| 日韩视频精品在线| 久久国产真实乱对白| 性欧美videos另类视频| segui久久综合精品| 国产精品单位女同事在线| 韩国男男腐啪GV肉视频| 国产不卡视频在线| 男女xx动态图| 亚洲第一网站男人都懂| 最近2019中文字幕mv免费看| 久久亚洲国产欧洲精品一| 好男人好视频手机在线|