欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電壓電流1602單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:545003 發(fā)表于 2019-5-22 19:47 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式


單片機(jī)源程序如下:

  1. /**********************BST-V51實(shí)驗(yàn)開發(fā)板例程************************
  2. *  平臺:BST-V51 + Keil U3 + STC89C52
  3. *  名稱:AD模塊實(shí)驗(yàn)

  4. *  晶振:11.0592MHZ
  5. *  說明:免費(fèi)開源,不提供源代碼分析.
  6. ******************************************************************/
  7. /*-----------------------------------------------
  8.   名稱:IIC協(xié)議 PCF8591ADDA轉(zhuǎn)換                  顯示有4個,注意只有2個可以調(diào)節(jié)電壓的
  9.   內(nèi)容:此程序通過IIC協(xié)議對DAAD芯片操作,讀取電位器的電壓通過液晶顯示,并輸出模擬量,用LED亮度漸變指示
  10. ------------------------------------------------*/
  11. #include<reg52.h>    //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  12. #include <intrins.h> //包含NOP空指令函數(shù)_nop_();
  13. #include<LCD1602.h>

  14. #define AddWr 0x90   //寫數(shù)據(jù)地址
  15. #define AddRd 0x91   //讀數(shù)據(jù)地址
  16.   #define uint unsigned int
  17.          #define uchar unsigned char
  18. uint num1;   
  19. sbit RST=P2^4;   //時(shí)鐘 加上后可以關(guān)掉DS1302芯片輸出
  20. sbit Sda=P2^0;       //定義總線連接端口
  21. sbit Scl=P2^1;
  22. sbit dula=P2^6;
  23. sbit wela=P2^7;

  24. bit ADFlag;          //定義AD采樣標(biāo)志位
  25. unsigned char code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段數(shù)共陰碼管段碼表
  26. data unsigned char  Display[8];//定義臨時(shí)存放數(shù)碼管數(shù)值
  27. /*------------------------------------------------
  28.                     延時(shí)程序
  29. ------------------------------------------------*/
  30. void mDelay(unsigned char j)
  31. {
  32.   unsigned int i;
  33.   for(;j>0;j--)
  34.      {
  35.           for(i=0;i<125;i++)
  36.              {;}
  37.           }
  38.   }
  39. /*------------------------------------------------
  40.                     初始化定時(shí)器1
  41. ------------------------------------------------*/
  42. void Init_Timer1(void)
  43. {
  44. TMOD |= 0x10;                             
  45. TH1=0xff;                              /* Init value */
  46. TL1=0x00;
  47. //PT1=1;                   /* 優(yōu)先級    */
  48. EA=1;                      /* interupt enable */
  49. ET1=1;                     /* enable timer1 interrupt */
  50. TR1=1;  
  51. }
  52. /*------------------------------------------------
  53.                     啟動IIC總線
  54. ------------------------------------------------*/
  55.   void Start(void)
  56.   {
  57.    Sda=1;
  58.    _nop_();
  59.    Scl=1;
  60.    _nop_();
  61.    Sda=0;
  62.    _nop_();
  63.    Scl=0;
  64.   }


  65. /*------------------------------------------------
  66.                     停止IIC總線
  67. ------------------------------------------------*/
  68.   void Stop(void)
  69.   {
  70.    Sda=0;
  71.    _nop_();
  72.    Scl=1;
  73.    _nop_();
  74.    Sda=1;
  75.    _nop_();
  76.    Scl=0;
  77.    }


  78. /*------------------------------------------------
  79.                    應(yīng)答IIC總線
  80. ------------------------------------------------*/
  81.    void Ack(void)
  82.    {
  83.     Sda=0;
  84.         _nop_();
  85.         Scl=1;
  86.         _nop_();
  87.         Scl=0;
  88.         _nop_();
  89.         }


  90. /*------------------------------------------------
  91.                  非應(yīng)答IIC總線
  92. ------------------------------------------------*/
  93.         void NoAck(void)
  94.         {
  95.          Sda=1;
  96.          _nop_();
  97.          Scl=1;
  98.          _nop_();
  99.          Scl=0;
  100.          _nop_();
  101.          }


  102. /*------------------------------------------------
  103.               發(fā)送一個字節(jié)
  104. ------------------------------------------------*/
  105.          void Send(unsigned char Data)
  106.          {
  107.           unsigned char BitCounter=8;
  108.           unsigned char temp;

  109.           do
  110.             {
  111.                  temp=Data;
  112.                  Scl=0;
  113.                  _nop_();
  114.                  if((temp&0x80)==0x80)
  115.                     Sda=1;
  116.                  else
  117.                     Sda=0;

  118.                         Scl=1;
  119.                         temp=Data<<1;
  120.                         Data=temp;
  121.                         BitCounter--;
  122.                   }
  123.           while(BitCounter);
  124.               Scl=0;
  125.           }


  126. /*------------------------------------------------
  127.                讀入一個字節(jié)并返回
  128. ------------------------------------------------*/
  129.           unsigned char Read(void)
  130.           {
  131.            unsigned char temp=0;
  132.            unsigned char temp1=0;
  133.            unsigned char BitCounter=8;

  134.            Sda=1;
  135.            do
  136.              {
  137.                   Scl=0;
  138.       _nop_();
  139.                   Scl=1;
  140.                   _nop_();
  141.                   if(Sda)
  142.                      temp=temp|0x01;
  143.                   else
  144.                      temp=temp&0xfe;

  145.                   if(BitCounter-1)
  146.                      {
  147.                           temp1=temp<<1;
  148.                           temp=temp1;
  149.                           }
  150.                           BitCounter--;
  151.                          }
  152.                 while(BitCounter);
  153.                 return(temp);
  154.           }

  155. /*------------------------------------------------
  156.                     寫入DA數(shù)模轉(zhuǎn)換值
  157. ------------------------------------------------*/
  158.           void DAC(unsigned char Data)
  159.           {
  160.                    Start();
  161.                    Send(AddWr); //寫入芯片地址
  162.                    Ack();
  163.                    Send(0x40);  //寫入控制位,使能DAC輸出
  164.                    Ack();
  165.                    Send(Data);  //寫數(shù)據(jù)
  166.                    Ack();
  167.                    Stop();
  168.                  
  169.            }

  170. /*------------------------------------------------
  171.                  讀取AD模數(shù)轉(zhuǎn)換的值,有返回值
  172. ------------------------------------------------*/
  173.           unsigned char ReadADC(unsigned char Chl)
  174.           {
  175.        unsigned char Data;
  176.                    Start();        //寫入芯片地址
  177.                    Send(AddWr);
  178.                    Ack();
  179.                    Send(0x40|Chl);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
  180.                                   //Chl的值分別為0、1、2、3,分別代表1-4通道
  181.                    Ack();
  182.                    Start();
  183.                    Send(AddRd);    //讀入地址
  184.                    Ack();
  185.                    Data=Read();    //讀數(shù)據(jù)
  186.                    Scl=0;
  187.                    NoAck();
  188.                    Stop();
  189.                    return Data;   //返回值
  190.           }

  191. void cmg(void)//數(shù)碼管鎖存函數(shù)                   關(guān)時(shí)鐘DS1302
  192. {
  193. dula=1;
  194. P0=0x00;
  195. dula=0;
  196. wela=1;
  197. P0=0x00;
  198. wela=0;
  199. RST=0;                //                關(guān)時(shí)鐘DS1302
  200. }


  201. /*------------------------------------------------
  202.                    主程序
  203. ------------------------------------------------*/
  204.         void main()
  205.         {
  206.          unsigned char num,temp1,temp2;                   //DA數(shù)模輸出變量
  207.          unsigned char ADtemp,ADtemp0,ADtemp1,ADtemp2;          //定義中間變量
  208.          InitLcd();
  209.      mDelay(20);
  210.      Init_Timer1();
  211.          cmg();                                //數(shù)碼管鎖存
  212.          while(1)
  213.               {
  214.        DAC(num);       //DA輸出,可以用LED模擬電壓變化
  215.                    num++;          //累加,到256后溢出變?yōu)?,往復(fù)循環(huán)。顯示在LED上亮度逐漸變化
  216.                    mDelay(20);     //延時(shí)用于清晰看出變化
  217.                    if(ADFlag)      //定時(shí)采集輸入模擬量
  218.            {
  219.                    ADFlag=0;
  220.            ADtemp=ReadADC(0);
  221.                 temp1=ADtemp*50.0/255;
  222.                  temp1=ReadADC(0)*500.0/255;
  223.           TempData[0]=temp1/1000;
  224.                 TempData[1]=temp1/100%100;      //處理0通道電壓顯示
  225.           TempData[2]=temp1/10%10;                         
  226.                 TempData[3]=temp1%10;                                         
  227.                                                  
  228.     ADtemp0=ReadADC(1);
  229.                 TempData[4]=ReadADC(1)*20/1000%100;  //處理1通道電流顯示
  230.           TempData[5]=ReadADC(1)*20/100%10;
  231.           TempData[6]=ReadADC(1)*20/10%10;                         
  232.                        
  233.                                                  
  234.     ADtemp1=ReadADC(2);
  235.                 TempData[7]=ReadADC(2)*200/10000%100;   //處理2通道電壓顯示
  236.                 TempData[8]=ReadADC(2)*200/1000%10;  
  237.           TempData[9]=ReadADC(2)*200/100%10;                         
  238.                 TempData[10]=ReadADC(2)*200%10;                                         
  239.                        
  240.         ADtemp=ReadADC(2);
  241.                 temp2=ADtemp*50.0/255;
  242.                  temp2=ReadADC(2)*500.0/255;
  243.           TempData[7]=temp2/1000;
  244.                 TempData[8]=temp2/100%100;      //處理0通道電壓顯示
  245.           TempData[9]=temp2/10%10;                         
  246.                 TempData[10]=temp2%10;               


  247.     ADtemp2=ReadADC(3);       
  248.                 TempData[11]=ReadADC(3)*20/1000%100;//處理3通道電流顯示
  249.           TempData[12]=ReadADC(3)*20/100%10;
  250.           TempData[13]=ReadADC(3)*20/10%10;                         
  251.                
  252.     disp();
  253.                    }}}

  254. /*------------------------------------------------
  255.                    定時(shí)器中斷程序
  256. ------------------------------------------------*/
  257. void Timer1_isr(void) interrupt 3 using 1//定時(shí)器1執(zhí)行數(shù)碼管動態(tài)掃描
  258. {

  259. static unsigned int j;
  260. TH1=0xfb;                //重新賦值
  261. TL1=0x00;
  262. j++;
  263. if(j==200)
  264.     {j=0;ADFlag=1;} //定時(shí)置位AD采樣標(biāo)志位
  265.          
  266.    // P0=Display[count];//用于動態(tài)掃描數(shù)碼管
  267.    // P2=count;
  268.    // count++;
  269.   // if(count==8)     //表示掃描8個數(shù)碼管
  270.    //   count=0;


  271. }
復(fù)制代碼

所有資料51hei提供下載:
電壓電流1602.zip (53.4 KB, 下載次數(shù): 35)


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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-5-23 03:05 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表