電子開發網

              電子開發網電子設計 | 電子開發網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. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
              1分 2分 3分 4分 5分

              還可以輸入 200 個字
              [ 查看全部 ] 網友評論
              關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
              返回頂部
              刷新頁面
              下到頁底
              晶體管查詢
              欧美国产日本精品一区二区三区 | 国产精品99爱免费视频| 亚洲国产小视频精品久久久三级| 992tv精品视频tv在线观看| 91久久精品国产一区二区| 日韩亚洲精品福利| 国产亚洲精品精品国产亚洲综合| 久久免费国产精品一区二区| 国产精品推荐天天看天天爽| 99热日韩这里只有精品| 精品久久久久久综合日本| 国产精品女同久久久久电影院| 亚洲2022国产成人精品无码区 | 好硬好湿好爽在深一点动态图 | 蜜桃麻豆www久久国产精品 | 亚洲精品国产精品乱码不卞 | 国产精品 日韩欧美| 亚洲欧美日韩国产精品一区二区| 精品久久久久国产免费| 国产精品人成在线观看| 亚洲美女在线视频| 伊人精品久久久久7777| 国语自产精品视频在线区| 国产综合精品一区二区三区| 亚洲综合一区二区国产精品| 99久久精品无码一区二区毛片| 亚洲午夜精品第一区二区8050| 91精品国产综合久久久久久| 国产亚洲欧洲精品| 久久精品国产99国产精偷| 欧美精品一区二区三区免费观看| 四虎成人精品永久免费AV| 亚洲一区精品中文字幕| 大桥未久磁力迅雷链接中文字幕| 日本精品久久久久中文字幕| 四虎影视在线免费观看| 国产精品久久久久影院色| 欧美人与性动交α欧美精品| 91老司机深夜福利精品视频在线观看 | 精品久久一区二区| 中国又粗又大又爽的毛片|