wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3692|回復: 9
打印 上一主題 下一主題
收起左側

基于STC15W408AS單片機設計的一款4-20MA或者0-5V轉485數據變送器電路分享

  [復制鏈接]
跳轉到指定樓層
樓主















【聲明】此程序僅用于學習與參考!     
*********************************************************************/
/********************************************************************
                            宏定義
*********************************************************************/
#include<STC15W408AS.h>                 //庫文件
#include<intrins.h>
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型
#define ADC_POWER   0x80            //ADC 電源控制位
#define ADC_FLAG    0x10            //ADC 轉換結束標志位
#define ADC_START   0x08            //ADC 開始轉換控制位
#define ADC_SPEEDLL 0x00            //210 個時鐘周期轉換一次
#define ADC_SPEEDL  0x20            //420 個時鐘周期轉換一次
#define ADC_SPEEDH  0x40            //630 個時鐘周期轉換一次
#define ADC_SPEEDHH 0x60            //840 個時鐘周期轉換一次

typedef unsigned char  INT8U;
typedef unsigned int   INT16U;
#define ENABLE_ISP 0x82 //系統工作時鐘<20MHz 時,對IAP_CONTR 寄存器設置此值
#define WD1        0x5a        //使用STC11xx系列單片機時,先寫入0x5a,然寫入0xa5
#define WD2        0xa5
char IAPAddr=0;
/********************************************************************
                            初始定義
*********************************************************************/
code uchar seg7code[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //顯示段碼 數碼管字跟
/********************************************************************
                            I/O定義
*********************************************************************/
bit z=0,ba=0,k=0,zs=0,kk=0,sd=0,sd1=0;
uchar y=0,smg2=0,s1=0,s2=0,ii=0,dat3=0,dat4=0,dat5=0,h_1=0,l_1=0;
uint s=0,bai=0,shi=0,ge=0,js=0,js1=0,js2=0,js3=0,dat=0,dat1=0,dat2=0,h_2=0,l_2=0;
sbit aj1=P3^1;
sbit aj2=P3^0;
sbit out=P3^4;
sbit L1=P3^5;//數碼管位控制
sbit L2=P3^6;//數碼管位控制
sbit L3=P3^7;//數碼管位控制
sbit dp=P3^3;//小數點
sbit btv_1=P5^4;
sbit btv_2=P5^5;
sbit zc=P3^2;

bit kt=0,kt_1=0,bz=0,bz2=0;bz3=0;//超設定值發送標志位,bz2數碼管閃爍標志位
bit bb_1=0,bb_2=0,bb_3=0,bb_4=0;//調整波特率標志位
uchar ss=0,hz=0,lz=0;
uchar trg=0,trg_1=0,cont=0,cont_1=0;
uchar ReadData=0,ReadData_1=0;

bit flagOnceTxd = 0;  //單次發送完成標志,即發送完一個字節
bit cmdArrived = 0;   //命令到達標志,即接收到上位機下發的命令
unsigned char cntRxd = 0;
unsigned char pdata bufRxd[30]; //串口接收緩沖區
void UartDriver();
unsigned char UartRead(unsigned char *buf, unsigned char len);
void UartWrite(unsigned char *buf, unsigned char len);
void UartRxMonitor(unsigned char ms);
/********************************************************************
                            16進制轉10進制函數
*********************************************************************/
void HexToDec(uchar redat)
{
h_1 = redat>>4;
l_1 = redat&0x0f;
switch(h_1)
{
case 0:h_1=0;break;
case 1:h_1=1;break;
case 2:h_1=2;break;
case 3:h_1=3;break;
case 4:h_1=4;break;
case 5:h_1=5;break;
case 6:h_1=6;break;
case 7:h_1=7;break;
case 8:h_1=8;break;
case 9:h_1=9;break;
default:break;
}
switch(l_1)
{
case 0:l_1=0;break;
case 1:l_1=1;break;
case 2:l_1=2;break;
case 3:l_1=3;break;
case 4:l_1=4;break;
case 5:l_1=5;break;
case 6:l_1=6;break;
case 7:l_1=7;break;
case 8:l_1=8;break;
case 9:l_1=9;break;
default:break;
}

}
/********************************************************************
                            10進制轉10進制函數
*********************************************************************/
void HexToHex(uchar redat)
{
h_2 = redat/10;
l_2 = redat%10;
switch(h_2)
{
case 0:h_2=0x00;break;
case 1:h_2=0x10;break;
case 2:h_2=0x20;break;
case 3:h_2=0x30;break;
case 4:h_2=0x40;break;
case 5:h_2=0x50;break;
case 6:h_2=0x60;break;
case 7:h_2=0x70;break;
case 8:h_2=0x80;break;
case 9:h_2=0x90;break;
default:break;
}
switch(l_2)
{
case 0:l_2=0x00;break;
case 1:l_2=0x01;break;
case 2:l_2=0x02;break;
case 3:l_2=0x03;break;
case 4:l_2=0x04;break;
case 5:l_2=0x05;break;
case 6:l_2=0x06;break;
case 7:l_2=0x07;break;
case 8:l_2=0x08;break;
case 9:l_2=0x09;break;
default:break;
}

}
/********************************************************************
                            E2P函數
*********************************************************************/
union union_temp16
{
    INT16U un_temp16;
    INT8U  un_temp8[2];
}my_unTemp16;

INT8U Byte_Read(INT16U add);              //讀一字節,調用前需打開IAP 功能
void Byte_Program(INT16U add, INT8U ch);  //字節編程,調用前需打開IAP 功能
void Sector_Erase(INT16U add);            //擦除扇區
void IAP_Disable();                       //關閉IAP 功能
/********************************************************************
                         AD轉換初始化程序
*********************************************************************/
void InitADC()
{
   P1ASF = 0x80;          //設置P1.7口AD轉換,必須加
   P1M0=0X80;
   P1M1=0X80;        //設置P1.7口為開漏模式,使用AD功能
    ADC_RES = 0;                   //AD數據寄存器清空
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開AD電源,轉換周期210
    _nop_();                        //延時一個機器周期
    _nop_();
        _nop_();                        //延時一個機器周期
}
/********************************************************************
                         AD轉換控制程序
*********************************************************************/
uchar ADCRead(uchar px)          //轉換輸出的數據 (PX為通道口)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開始轉換
    _nop_();                        //延時一個機器周期
    _nop_();                                                //延時一個機器周期
    _nop_();                                                //延時一個機器周期
    _nop_();                                                //延時一個機器周期
    while (!(ADC_CONTR & ADC_FLAG));//等待轉換結束
    ADC_CONTR &= ~ADC_FLAG;         //關閉AD轉換
    return ADC_RES;                //返回數據
}
/*******************************************************************
*                        讀取按鍵狀態
********************************************************************/
void KeyRead()//讀取按鍵IO口函數
{
     ReadData = aj1^0xff;  // 讀取按鍵狀態取反后賦值給ReadData
     trg = ReadData & (ReadData ^ cont);  //trg短按,每按下按鍵trg=1;抬手后為trg=0,長按為trg=0
     cont = ReadData;   //cont長按,長按cont=1,抬手后cont=0

         ReadData_1 = aj2^0xff;  // 讀取按鍵狀態取反后賦值給ReadData
     trg_1 = ReadData_1 & (ReadData_1 ^ cont_1);  //trg短按,每按下按鍵trg=1;抬手后為trg=0,長按為trg=0
    cont_1 = ReadData_1;   //cont長按,長按cont=1,抬手后cont=0
}
/*******************************************************************
*                        按鍵
********************************************************************/
void key_1()
{          
  if(trg & 0x01) //短按
  {       
     kt_1=0;
         kt=1; //這是短按標志位,kt=1說明短按了
  }
  if((aj1!=0)&&(kt==1))//判斷
        {
         z=1; // 選位標志位
         y++; //選位
         out=1;
         if(y==4)
          {
           z=0;
           k=1;
           y=0;
//           s=s1+s2+s3;
          }
         kt=0;
    }           // 短按

}

void key_2()
{          
  if(trg_1 & 0x01) //短按
  {       
     kt=0;
         kt_1=1; //這是短按標志位,kt=1說明短按了
  }
  if((aj2!=0)&&(kt_1==1))//判斷
        {
         if(y==1)
          {
           s1++;
           if(s1>9)
            {
                 s1=0;
                }
          }
         if(y==2)
          {
           s2+=10;
           if(s2>20)
            {
                 s2=0;
                }
          }
         s=s1+s2;
         kt_1=0;
    }           // 短按
}
/*******************************************************************
*                       串口驅動
********************************************************************/
void UartDriver() //串口驅動函數,檢測接收到的命令并執行相應動作
{
    unsigned char len;
    xdata unsigned char buf[30];
    if (cmdArrived) //有命令到達時,讀取處理該命令
    {
        cmdArrived = 0;
        len = UartRead(buf, sizeof(buf)); //將接收到的命令讀取到緩沖區中

                if ((buf[0] == 0xAA)&&(buf[1] == ss)&&(buf[2] == 0x01)&&(buf[4] == 0xBB)&&(len == 5))  //修改板子地址
                {
                   ss=buf[3];k=1;
                   buf[0] = 0xAA;
                   buf[1] = ss;
                   buf[2] = 0x01;
                   buf[3] = 0x01;
                   buf[4] = 0xBB;
                   len = 5;
                   UartWrite(buf, len);
                }

                if((buf[0] == 0xAA)&&(buf[1] == ss)&&(buf[2] == 0x06)&&(buf[3] == 0x01)&&(buf[4] == 0xBB)&&(len == 5)) //查詢溫度
                {
                     HexToDec(dat1);
                         dat3 = h_1*16+l_1;         //轉換為10進制
                         h_1=0;l_1=0;
                         HexToHex(dat3);         //10進制轉換為16進制
                         dat4 = h_2|l_2;
                         h_2=0;l_2=0;
                          buf[0] = 0xAA;
                         buf[1] = ss;
                         buf[2] = 0x06;
                         buf[3] = dat4;
                         buf[4] = 0xBB;
                         len = 5;
                         UartWrite(buf,len);

                }

                if ((buf[0] == 0xAA)&&(buf[1] == 0x00)&&(buf[2] == 0x00)&&(buf[3] == 0x00)&&(buf[4] == 0xBB)&&(len == 5))  //查詢板子地址
                {
                   buf[0] = 0xAA;
                   buf[1] = ss;
                   buf[2] = 0x00;
                   buf[3] = 0x00;
                   buf[4] = 0xBB;
                   len = 5;
                   UartWrite(buf, len);
                }
    }
}
/*******************************************************************
*                        定時器配置
********************************************************************/
void ConfigTimer0(){
        TMOD=0x01;//將定時器0,1都設置為模式1
    TH0=0XFC;//1ms
    TL0=0X66;
        TR0=1;//開啟定時器0
        ET0=1;//開定時器0的中斷
        EA=1;//開總中斷
}

/*******************************************************************
*                        串口配置
********************************************************************/
void ConfigUART()  //串口配置函數,baud為波特率
{
        SCON = 0x50;                //8位數據,可變波特率
        AUXR |= 0x01;                //串口1選擇定時器2為波特率發生器
        AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
        T2L = lz;                //設定定時初值
        T2H = hz;                //設定定時初值
        AUXR |= 0x10;                //啟動定時器2
    ES  = 1;       //使能串口中斷
}
/*******************************************************************
*                         顯示
********************************************************************/
void led(uint date)
{
bai=date/100;
shi=date%100/10;
ge=date%10;
}
/*******************************************************************
*                         t0定時器
********************************************************************/
void timer0() interrupt 1
{
    TH0=0XFC;//1ms
    TL0=0X66;
        UartRxMonitor(1);  //串口接收監控
        KeyRead(); //按鍵掃描
        js++;
        if(js==200){ba=1;js=0;}        //200ms采集一次溫度數據
        if(sd==1){js1++;if(js1==2000){js1=0;kk=1;}}//主動模式發送模式2s發送一次溫度數據
        if(sd1==1){js2++;if(js2==1000){js2=0;kk=1;}}//超設定值發送模式1s發送一次溫度數據
        if(bz2==1){js3++;if(js3==300){z=1;smg2=5;bz3=1;}if(js3==600){z=0;smg2=0;js3=0;}}//數碼管閃爍         
    if(z==0)
          {
           smg2++;
           }else{
                 smg2=y;//讓逐個顯示位
           }

             switch(smg2){                 //數碼管掃描
        /**************數碼管-開始*****************/
          case 1:  P1=seg7code[ge];L3=1;L2=1;L1=0;dp=0;break;//從P2進P0出
          case 2:  P1=seg7code[shi];L3=1;L2=0;L1=1;dp=0;break;
          case 3:  P1=seg7code[bai]; L3=0;L2=1;L1=1;dp=0;break;       
        /**************數碼管-結束*****************/       
          default: smg2=0; L3=1;L2=1;L1=1; break;
         }
}
/********************************************************************
                            主函數
*********************************************************************/
void main()
{
   hz=0xFE;lz=0xE0;        //9600
  ConfigTimer0();        //定時器初始化
  ConfigUART();
    InitADC();           //AD初始化
    P1M0 = 0xff;   //設置強推挽和開漏模式
    P1M1 = 0x80;
        P3M0 = 0x08;   //小數點使用
        P3M1 = 0x00;
        if(Byte_Read(0X0001)==0xff){ss=0;s1=0;s2=0;}//首次讀取,如果讀到0xFF說明沒有存過數據,直接付給00值
        else
        {
         ss=Byte_Read(0X0001);//板子地址
         s1=Byte_Read(0X0002);//按鍵設定值
         s2=Byte_Read(0X0003);//按鍵設定值
        }
    s2=s2*10;
        s=s2+s1;  //按鍵設定值
   while(1)
    {
         if((btv_1 == 0)&&(btv_2 == 0)&&(bb_1 == 0)){hz=0xFF;lz=0x70;ConfigUART();bb_1=1;bb_2=0;bb_3=0;bb_4=0;}  //波特率設置兩個撥碼開關撥上去19200
         if((btv_1 == 0)&&(btv_2 == 1)&&(bb_2 == 0)){hz=0xFB;lz=0x80;ConfigUART();bb_1=0;bb_2=1;bb_3=0;bb_4=0;}  //波特率設置2400
         if((btv_1 == 1)&&(btv_2 == 0)&&(bb_3 == 0)){hz=0xFD;lz=0xC0;ConfigUART();bb_1=0;bb_2=0;bb_3=1;bb_4=0;}  //波特率設置4800
         if((btv_1 == 1)&&(btv_2 == 1)&&(bb_4 == 0)){hz=0xFE;lz=0xE0;ConfigUART();bb_1=0;bb_2=0;bb_3=0;bb_4=1;} //波特率設置都不撥 9600

         if(ba==1){dat=((ADCRead(7)*51)/255);dat1=dat*100/249;ba=0;} //51是單片機的工作電壓,單片機的工作電壓是多少這個就是多少
             
          if((y==0)&&(z==0)){led(dat1);} //zs標志位控制小數點
          if(y==1){zs=0;led(s1);}
          if(y==2){zs=0;led(s2);}
          if(y==3){zs=0;z=0;led(s);} //顯示設定時間
          if(dat1>s){sd1=1;bz=1;bz2=1;}else{sd1=0;bz=0;bz2=0;}//當溫度超過設定溫度時主動發送電流數據
          if((bz2==0)&&(bz3==1)){z=0;bz3=0;} //bz3防止數碼閃爍后變黑不亮標志位
          if((zc==0)&&(bz==0)){sd=1;}else{sd=0;} //主從模式
          key_1();
          key_2();
          UartDriver();
          if(kk==1)
          {
                   unsigned char len;
        xdata unsigned char buf[10];
                HexToDec(dat1);        //16進制轉10進制
                dat3 = h_1*16+l_1;
                h_1=0;l_1=0;
                HexToHex(dat3);
                dat4 = h_2|l_2;//10進制轉16進制
            h_2=0;l_2=0;
                buf[0]=0xAA;  //起始位
                buf[1]=ss;          //地址位
                buf[2]=0x06;  //功能位
                buf[3]=dat4;  //電流值
                buf[4]=0xBB;  //結束位
                len=5;
                UartWrite(buf,len);
                kk=0;
          }
          if(k==1)         //存儲板子地址
          {
             Sector_Erase(0);
                 Byte_Program(0x0001,ss);  //寫入扇區
                 Byte_Program(0x0002,s1);  //寫入扇區
                 Byte_Program(0x0003,(s2/10));  //寫入扇區
                 k=0;
          }
        }

}

/*******************************************************************
*                        串口讀,寫
********************************************************************/
void InterruptUART() interrupt 4  //UART中斷服務函數
{
            if (RI)  //接收到字節
    {
        RI = 0;   //手動清零接收中斷標志位
        if (cntRxd < sizeof(bufRxd)) //接收緩沖區尚未用完時,
        {
            bufRxd[cntRxd++] = SBUF; //保存接收字節,并遞增計數器
        }
            }
            if (TI)  //字節發送完畢
    {
                TI = 0;   //手動清零發送中斷標志位
        flagOnceTxd = 1;  //設置單次發送完成標志
    }
}

unsigned char UartRead(unsigned char *buf, unsigned char len) //串口數據讀取函數,數據接收指針buf,讀取數據長度len,返回值為實際讀取到的數據長度
{
    unsigned char i=0;

    if (len > cntRxd) //讀取長度大于接收到的數據長度時,
    {
        len = cntRxd; //讀取長度設置為實際接收到的數據長度
    }
    for (i=0; i<len; i++) //拷貝接收到的數據
    {
        *buf = bufRxd[ i];
        buf++;
    }
    cntRxd = 0;  //清零接收計數器

    return len;  //返回實際讀取長度
}

void UartWrite(unsigned char *buf, unsigned char len) //串口數據寫入函數,即串口發送函數,待發送數據指針buf,數據長度len
{
    while (len--)   //發送數據
    {
        flagOnceTxd = 0;
        SBUF = *buf;
        buf++;
        while (!flagOnceTxd);
    }
}

void UartRxMonitor(unsigned char ms)  //串口接收監控函數
{
    static unsigned char cntbkp = 0;
    static unsigned char idletmr = 0;
    if (cntRxd > 0)  //接收計數器大于零時,監控總線空閑時間
    {
        if (cntbkp != cntRxd)  //接收計數器改變,即剛接收到數據時,清零空閑計時
        {
            cntbkp = cntRxd;
            idletmr = 0;
        }
        else
        {
            if (idletmr < 5)  //接收計數器未改變,即總線空閑時,累積空閑時間
            {
                idletmr += ms;
                if (idletmr >= 5)  //空閑時間超過4個字節傳輸時間即認為一幀命令接收完畢
                {
                    cmdArrived = 1; //設置命令到達標志
                }
            }
        }
    }
    else
    {
        cntbkp = 0;
    }
}
//讀一字節,調用前需打開IAP 功能,入口:DPTR = 字節地址,返回:A = 讀出字節
INT8U Byte_Read(INT16U add)
{
    IAP_DATA = 0x00;
    IAP_CONTR = ENABLE_ISP;         //打開IAP 功能, 設置Flash 操作等待時間
    IAP_CMD = 0x01;                 //IAP/ISP/EEPROM 字節讀命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //設置目標單元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //設置目標單元地址的低8 位地址

    //EA = 0;
    IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發寄存器,每次都需如此
    IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發起動
    _nop_();
    //EA = 1;
    IAP_Disable();  //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
                    //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
    return (IAP_DATA);
}
/*********************************************************************************************/
//字節編程,調用前需打開IAP 功能,入口:DPTR = 字節地址, A= 須編程字節的數據
void Byte_Program(INT16U add, INT8U ch)
{
    IAP_CONTR = ENABLE_ISP;         //打開 IAP 功能, 設置Flash 操作等待時間
    IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字節編程命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //設置目標單元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //設置目標單元地址的低8 位地址

    IAP_DATA = ch;                  //要編程的數據先送進IAP_DATA 寄存器
    //EA = 0;
    IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發寄存器,每次都需如此
    IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發起動
    _nop_();
    //EA = 1;
    IAP_Disable();  //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
                    //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
}
/*********************************************************************************************
//擦除扇區, 入口:DPTR = 扇區地址 */
void Sector_Erase(uint addr)
{
    IAP_CONTR = ENABLE_ISP;         //打開IAP 功能, 設置Flash 操作等待時間
    IAP_CMD = 3;                 //IAP/ISP/EEPROM 扇區擦除命令

//    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = addr>>8;    //設置目標單元地址的高8 位地址
    IAP_ADDRL = addr;    //設置目標單元地址的低8 位地址

    IAP_TRIG = 0x5a;   //先送 WD1,再送WD2 到ISP/IAP 觸發寄存器,每次都需如此
    IAP_TRIG = 0xa5;   //送完WD2 后,ISP/IAP 命令立即被觸發起動
    _nop_();
    //EA = 1;
    IAP_Disable();  //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
                    //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
}
/*********************************************************************************************/
void IAP_Disable()
{
    //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
    //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
    IAP_CONTR = 0;      //關閉IAP 功能
    IAP_CMD   = 0;      //清命令寄存器,使命令寄存器無命令,此句可不用
    IAP_TRIG  = 0;      //清命令觸發寄存器,使命令觸發寄存器無觸發,此句可不用
    IAP_ADDRH = 0x80;
    IAP_ADDRL = 0;
}
/*********************************************************************************************/


GYJ-0310 NTC測溫程序.zip

85.83 KB, 下載次數: 70, 下載積分: 黑幣 -5

GYJ-0310 4~20MA電流程序.zip

80.24 KB, 下載次數: 79, 下載積分: 黑幣 -5

GYJ-0310 0~10V電壓程序.zip

79.86 KB, 下載次數: 73, 下載積分: 黑幣 -5

GYJ-301_4~20mA電流輸入485輸出原理圖及PCB圖.pdf

388.35 KB, 下載次數: 79, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:104472 發表于 2023-11-27 10:21 | 只看該作者
好文章,支持一下
回復

使用道具 舉報

板凳
ID:433219 發表于 2023-11-28 09:12 | 只看該作者
4-20mA 輸入,轉 485輸出?
回復

使用道具 舉報

無效樓層,該帖已經被刪除
5#
ID:462629 發表于 2024-3-14 11:08 | 只看該作者
這個實際使用情況怎么樣?
回復

使用道具 舉報

6#
ID:921339 發表于 2024-4-9 18:09 | 只看該作者
不錯!
回復

使用道具 舉報

7#
ID:90212 發表于 2024-4-15 08:50 | 只看該作者
LM1是什么降壓芯片?
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
9#
ID:1067504 發表于 2024-9-4 11:50 來自觸屏版 | 只看該作者
gongzhu 發表于 2024-4-15 08:50
LM1是什么降壓芯片?

沒猜錯的話,應該是LM317
回復

使用道具 舉報

10#
ID:1037819 發表于 2025-4-11 18:56 | 只看該作者
分不夠了,合成一個文件比較好
回復

使用道具 舉報

11#
ID:433219 發表于 2025-4-15 15:01 | 只看該作者
4·20mA輸入mcu采集,再485輸出,
回復

使用道具 舉報

12#
ID:46241 發表于 2025-10-19 01:44 來自觸屏版 | 只看該作者
好文章,收藏方便日后使用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
日韩欧美主播在线| 亚洲欧美色一区| 卡通欧美亚洲| 99热免费观看| 一级欧美一级日韩| avtt香蕉久久| 久草资源站在线观看| 99中文字幕| 欧美日韩国产成人在线| 亚洲欧洲日韩精品在线| 99热99在线| 2018中文字幕在线| 日韩欧美激情视频| 亚洲成人精品在线播放| 黄色污污在线观看| 97国产超碰| 午夜精品国产精品大乳美女| 亚洲国产精品高清久久久| 一区二区三区四区五区视频在线观看| 蜜臀久久99精品久久久久宅男| 亚洲免费专区| 78精品国产综合久久香蕉| 国产在线观看免费| eeuss免费天堂影院| 午夜影院免费播放| 国产成人一区二区| 精品国产一区久久| 亚洲国产美女搞黄色| 韩国三级中文字幕hd久久精品| 欧美女优在线视频| 超级碰碰久久| 午夜激情视频在线观看| 免费裸体视频网站| 午夜免费在线| 国产精品久久婷婷| 免费三级在线观看| 精品国产乱码久久久久久蜜臀| av在线不卡网| 久久精品人人| 99久久婷婷这里只有精品| 高清久久精品| 欧美大片1688| 亚洲国产综合一区| 久久成人亚洲精品| 日韩av一区二区三区| 亚洲精品aaaaa| 精品欧美日韩精品| 蜜桃成人365av| 日本天堂在线| 动漫h在线观看| 成人黄色免费电影| 在线观看a网站| 欧美成人亚洲高清在线观看| 天天干天天爽天天操| 国产91精品久久久久| 欧美日韩中字一区| 欧美日韩亚洲一区二区| 亚洲激情图片小说视频| 国产网站一区二区三区| 成人av午夜影院| 国产成人免费视频| 国产剧情一区二区| 国产一区二区视频在线| 永久免费av片在线观看全网站| 丁香六月婷婷| 中文乱码字幕高清在线观看| 免费h片在线观看| 国产女主播在线| 男人免费av| 精品无人区卡一卡二卡三乱码免费卡| 黑人巨大xxx| 欧美性xxxx禁忌| 亚洲爱爱天堂| 人人澡人人澡人人看欧美| 亚洲欧美制服丝袜| 亚洲精品久久久久久久久久久久久| 欧美一区二区三区在线观看视频 | 亚洲国产精品久久精品怡红院| 欧美一区二区二区| 日韩欧美国产午夜精品| 精品乱人伦小说| 久久福利资源站| 中文字幕日韩亚洲| 日韩精品影院| 91另类视频| 亚洲成人高清| 好吊妞视频这里有精品| 久久不见久久见免费视频7| 欧美日一区二区| 午夜亚洲福利| 鲁大师成人一区二区三区| 日韩电影在线观看一区| 国产精品一区二区三区乱码| 成人网在线免费视频| 国产日产欧美一区二区三区| 黄色欧美日韩| www日本在线| 精品国自产拍在线观看| 欧美77777| 九九视频精品在线| 一个人看的www片免费高清视频| 可以在线观看的黄色网址| 成年人免费视频观看| 青青国产在线| 丁香花视频在线观看| 日韩欧美精品一区二区综合视频| 日本成人手机在线| 国精产品一区一区三区mba视频 | 中文字幕日韩一区| 国产精品久久久久婷婷| 婷婷一区二区三区| 91精品在线观看入口| 日韩精品中文字| 欧美老少做受xxxx高潮| 国产精品成熟老女人| 欧美精品成人一区二区在线观看| 97超碰在线视| 无套内谢丰满少妇中文字幕| 我不卡一区二区| www.com亚洲| 免费视频拗女稀缺一区二区| eeuss网址直达入口| 免费看a在线观看| 国产电影一区| 欧美日韩日本国产亚洲在线| 国产成人在线免费观看| 亚洲一区二区三区在线看| 日韩欧美一级二级三级久久久| 视频一区视频二区国产精品| 一区二区三区中文字幕在线观看| 欧美日韩亚洲91| 亚洲欧美国产精品专区久久| 欧美一区二区大胆人体摄影专业网站| 久久国产精品高清| 波多野结衣作品集| 亚洲女人毛茸茸高潮| 一区二区美女视频| 免费aⅴ网站| 麻豆影视在线观看_| 日韩精品一区二区三区免费视频| 女同性一区二区三区人了人一 | 粉嫩av一区二区| 一区二区国产在线观看| 久久久五月婷婷| 在线电影一区二区三区| 欧美黑人狂野猛交老妇| 欧美裸体网站| av天堂一区二区| 日日骚av一区二区| 国产精品久久精品牛牛影视| av电影在线网| 人人精品亚洲| 国产成人av电影在线| 欧美又粗又大又爽| 国产精品色婷婷久久58| 日本久久一二三四| 久久99国产精品久久| 夜色激情一区二区| 亚洲欧美国产精品va在线观看| 成人网在线观看| 国产97在线 | 亚洲| chinese全程对白| 无码精品一区二区三区在线| 色播在线视频| 国产精品天堂蜜av在线播放 | 韩国三级在线看| 日韩手机在线观看| 99久久精品一区二区三区| 国产探花一区| 日本福利片高清在线观看| xx欧美xxx| 午夜精彩国产免费不卡不顿大片| 欧美激情理论| 国产日韩欧美亚洲| 亚洲国产精彩中文乱码av| 成人av.网址在线网站| 欧美日韩亚洲第一| 国产午夜久久久| 99久久免费精品国产免费| 国产第一页在线视频| 欧美日韩少妇| 亚洲制服丝袜一区| 欧美激情国产高清| 欧美一级片在线看| 日本精品视频在线播放| 我的公把我弄高潮了视频| 久草视频手机在线观看| 免费观看91视频大全| 老司机深夜福利在线观看| 在线视频精品| 日韩欧美在线第一页| 日韩女优在线播放| 小泽玛利亚视频在线观看| 中文字幕在线观看视频一区| 诱人的瑜伽老师3hd中字| 国产成人一二| 26uuu欧美日本| 国产亚洲精品一区二区| 亚洲三区在线| 久久久精品国产sm调教网站| jizz视频18| 日韩中文字幕一区二区高清99| 久久av资源网| 日韩精品极品视频| 自拍亚洲欧美老师丝袜| www成人在线| 一级片免费看| 九九综合在线| 亚洲精品免费看| 日本午夜人人精品| 超碰在线资源站| 影音先锋中文一区| 黄色在线网站噜噜噜| 久久超级碰视频| 亚洲免费av电影| 欧美国产综合在线| 亚洲在线精品视频| 黄色在线视频网站| 亚洲男人影院| 精品999在线播放| 伊人色综合久久天天五月婷| 国偷自拍第113页| 中文在线天堂网| 国产精品麻豆久久| 91国偷自产一区二区三区观看 | 喷水视频在线观看| 欧美老tube| 亚洲少妇视频| 成人爱爱电影网址| 欧美大尺度激情区在线播放| www.超碰com| www.色亚洲| 理论片午午伦夜理片在线播放| 三级欧美在线一区| 精品日韩成人av| 亚洲精华一区二区三区| 亚洲色图欧美激情| 成人黄色免费在线观看| 国产精品无码永久免费不卡| 狠狠色噜噜狠狠狠狠黑人| 国产一区二区高清在线| 国产精品丝袜在线| 国产精品一二三在线| 香港三级日本三级| 免费看黄色网| 1024在线播放| 久草这里只有精品视频| 国产亚洲精品综合一区91| 污片在线免费看| 日本卡一卡2卡3卡4精品卡网站| 成人av色网站| 亚洲另类色综合网站| 亚洲一区二区在线| 色偷偷偷综合中文字幕;dd| 水蜜桃亚洲一二三四在线| av网站中文字幕| 色网站在线看| 国产成人aaa| 66m—66摸成人免费视频| 午夜男人的天堂| av免费高清观看| 影音先锋在线一区| 亚洲天堂av综合网| 三上悠亚av一区二区三区| 国产激情视频一区二区| 深爱激情综合| 4438x成人网最大色成网站| 大伊香蕉精品视频在线| 亚洲色图欧美视频| 在线综合色站| 在线观看国产一区二区| 在线成人午夜影院| 少妇高潮喷水久久久久久久久久| 91香蕉国产在线观看| 久久精品老司机| 国产男女爽爽爽| 亚洲伦伦在线| 亚洲精品天天看| 在线观看免费不卡av| 性xxxxx| 婷婷成人基地| 日韩av在线免费观看| 91 在线视频观看| 国内一区二区三区精品视频| 欧美艳星介绍134位艳星| 精品国产91乱码一区二区三区| 91视频免费版污| 国产娇喘精品一区二区三区图片 | 亚洲乱码国产乱码精品精软件| 日本精品不卡| 91亚洲精华国产精华精华液| 99精品在线直播| 中文字幕在线网址| 成人在线免费av| 亚洲成人自拍网| 偷拍盗摄高潮叫床对白清晰| 欧美三级黄视频| 亚洲一区二区三区无吗| 亚洲精品久久久久中文字幕二区| www.色.com| 在线观看国产视频| 不卡视频在线观看| av成人综合网| 国产精品嫩草影院精东| 高清精品视频| 精品国一区二区三区| 手机在线免费毛片| 成人xxxx| 日韩国产一区二| 欧美在线视频在线播放完整版免费观看 | 嗯用力啊快一点好舒服小柔久久| 欧美一区二区女人| 91香蕉视频免费看| 一区二区三区视频国产日韩| 成人教育av在线| 香蕉久久免费影视| 国产人成高清视频观看| 精品成人久久| 日本电影亚洲天堂| a毛片在线免费观看| 沈樵精品国产成av片| 自拍偷拍亚洲精品| 欧美成人精品欧美一级| 日韩欧美一区二区三区在线观看| 欧美日韩激情在线| 一级黄色免费视频| 欧美jizz18性欧美| 午夜欧美一区二区三区在线播放| 最近中文字幕第一页| 国内外成人免费在线视频| 91久久国语露脸精品国产高跟| 成人在线精品| av在线这里只有精品| 麻豆精品传媒视频| 亚洲人成电影在线观看网| 男女午夜网站| 国产成人精品午夜视频免费| 欧美性色黄大片人与善| 久久久久亚洲精品一区二区三区| 在线精品在线| 国产日韩在线一区| 激情丁香久久| 日韩在线卡一卡二| 成人午夜电影在线播放| 欧美久草视频| 国产精品一区二区在线看| 日韩福利视频| eeuss影院www影院| 91首页免费视频| 久久久无码人妻精品无码| 超碰成人福利网| www.亚洲在线| 夜夜爽99久久国产综合精品女不卡| 国产欧美日本亚洲精品一4区| 在线一区欧美| 国产91免费视频| 在线观看制服搞黄视频| 国模大尺度一区二区三区| 视频一区二区三区免费观看| 色先锋av资源| 久久―日本道色综合久久| 免费cad大片在线观看| 四色成人av永久网址| 午夜婷婷国产麻豆精品| 国产精品三级美女白浆呻吟 | 国产一区精品| 亚洲啊啊啊啊啊| 国产色综合视频| 成人国产精品一级毛片视频| 韩国精品美女www爽爽爽视频| 午夜精品久久久久久久爽| 一区二区亚洲| 国产富婆一区二区三区 | 不卡一区二区在线| 久久精品.com| 国产激情在线视频| 日韩视频在线观看一区二区| 欧美日韩亚洲国产另类| 精品freesex老太交| 国产精品久久97| 国产大奶在线| 久久久综合视频| 国产探花在线观看视频| 日本免费一区二区三区四区| 在线看福利67194| 日本一区高清不卡| 成人黄网18免费观看的网站| 一区二区三区在线免费播放| 永久免费未满蜜桃| 韩国三级一区| 在线观看欧美日韩| 天天操天天舔天天干| 国产美女在线精品| 免费国产黄色网址| 操人在线观看| 日韩一级裸体免费视频| 精品国产av一区二区三区| 免费在线观看成人| 成人一对一视频| 国产美女精品写真福利视频|