搜索
bottom↓
回复: 79

组态王和51组成的监控系统

[复制链接]

出0入0汤圆

发表于 2011-11-18 14:11:41 | 显示全部楼层 |阅读模式
51做下位机,利用组态王监控测量数据。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-11-18 14:13:05 | 显示全部楼层
#include "reg51.h"

#define uchar unsigned char
#define uint unsigned int
#define ufloat unsigned float

#define ENQ 0x05   //询问标志
#define ACK 0x06   //确认标志
#define NAK 0x15   //否认标志
#define EOT 0x04   //发送结束 标志
#define ETX 0x03   //应答结束 标志
#define DB  0x01   //字节标志 标志
#define DW  0x02   //字标志标志
#define DF  0x03   //浮点数标志
#define R   0x52   //读标志
#define W   0x57   //写标志
#define MyAddr   0x01   //下位机地址

bit RecvOk,CRCOk;                   //接收完毕状态位 ,CRC校验判断位
uchar Rbuf[11],Tbuf[37];    //接收和发送缓存区
uchar Rptr,Tptr,Tnum,T;           //接收指针,发送指针,发送数据个数
uchar last; //下位机地址,ms延时,接收数据存放
uchar crc;                 //CRC校验
idata uchar U_art;
uchar DatB[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a};     //存放字节数据
uint DatW[10]={0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x9999,0xaaaa};    //存放字型数据


/**************串口中断***************/
void Uart() interrupt 4 using 1
{
  uint j;
  if(RI)
  {
    RI=0;
U_art++;          
   switch(U_art)
        {
            case 1:        Rbuf[0]=SBUF;
                 if(Rbuf[0]!=ENQ) U_art=0;
                  break;
                case 2:        Rbuf[1]=SBUF;break;
                case 3:        Rbuf[2]=SBUF;break;
                case 4:        Rbuf[3]=SBUF; crc=0;
                 for(j=0;j<4;j++)
                  crc^=Rbuf[j];       
                 if(Rbuf[2]==EOT && crc==0)
                  RecvOk=1;
                 break;
            case 5:        Rbuf[4]=SBUF;break;
                case 6:        Rbuf[5]=SBUF;break;
                case 7:        Rbuf[6]=SBUF;break;
                case 8:        Rbuf[7]=SBUF;crc=0;
                 for(j=0;j<8;j++)
                  crc^=Rbuf[j];
                 if(Rbuf[6]==EOT && crc==0)
                  Rptr=8;RecvOk=1;
                 break;
                case 9:        Rbuf[8]=SBUF;crc=0;
                 for(j=0;j<9;j++)
                  crc^=Rbuf[j];
                 if(Rbuf[7]==EOT && crc==0)
                  Rptr=9;RecvOk=1;
                 break;
                case 10:Rbuf[9]=SBUF;break;
                case 11:Rbuf[10]=SBUF; crc=0;
                 for(j=0;j<11;j++)
                  crc^=Rbuf[j];
                 if(Rbuf[9]==EOT && crc==0)
                  Rptr=11;RecvOk=1;
                 break;
        }   
  }
//  else if(TI)
//   {TI=0;}
}

/***************初始化RS232********************/
void init_rs232(void)           //波特率9600
{
   TMOD = 0x21;
    SCON = 0x50;
    TH1 = 0xFA;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}

/**************ms延时************************/
void Delay_ms(uint count)
{
   uint i,j;
   for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}

/****************协议处理*****************/
void Process()
{
   uint i,n,ptr,num,k;
  //对PC的查询命令进行应答
  if(Rbuf[1]==MyAddr)
  {
    Tbuf[0]=ACK;
    Tbuf[1]=MyAddr;
    Tbuf[2]=ETX;
    crc=0;
        for(i=0;i<3;i++)
        crc^=Tbuf;
        Tbuf[3]=crc;
        Tptr=0;
        Tnum=4;
        T=1;
   }
   else if(Rbuf[1]==R)
   {
     n=Rbuf[5];
         ptr=Rbuf[3];      //低位地址->ptr
         switch(Rbuf[2])   // 判断数据类型
         {
          case DB:          //读取字节数据
                   for(i=ptr;i<ptr+n;i++)
                          {
                            DatB[0]=DatB[0]+0x02;
                        Tbuf[3+i-ptr]=DatB;
                          }
                    break;
          case DW:
                   num=n/2;
                   for(i=ptr;i<ptr+num;i++)
                          {
                            k=2*i;
                                Tbuf[3+k-2*ptr]=DatW;
                            Tbuf[4+k-2*ptr]=(DatW>>8);               
                          }
                          break;
                        default:break;
     }
              Tbuf[0]=ACK;
                  Tbuf[1]=n&0xff;
                  Tbuf[2]=n>>8;
                  Tbuf[3+n]=ETX;
                  crc=0;
                    for(i=0;i<4+n;i++)
                 crc^=Tbuf;
                 Tbuf[4+n]=crc;
                 Tptr=0;
                 Tnum=n+5;
                 T=1;
}

   //向单片机写数据的处理
   else if(Rbuf[1]==W)
   {
   //  n=Rbuf[4];
            ptr=Rbuf[3];      //低位地址->ptr
     n=Rptr-7;         
         switch(Rbuf[2])   // 判断数据类型
         {
          case DB:          //读取字节数据
                  for(i=0;i<1;i++)
                          {
                        DatB[ptr+i]=Rbuf[4+i];         
                          }               
                    break;
          case DW:
                          for(i=0;i<n;i++)
                          {
                            k=2*i;
                            DatW[ptr+i]=Rbuf[6+k];         
                                DatW[ptr+i]=(DatW[ptr+i]<<8);         
                                DatW[ptr+i]=Rbuf[5+k];                       
                          }
                          break;         
       default:break;
         }                                       
         Tbuf[0]=ACK;                                          
         Tbuf[1]=0x00;          
         Tbuf[2]=ETX;
         crc=0;                                    
         for(i=0;i<3;i++)
          crc^=Tbuf;
         Tbuf[3]=crc;       
         Tptr=0;
         Tnum=4;
         T=1;                 
   }
}

/***********************主函数*****************/
void main(void)
{
  uint i;
  Delay_ms(1000);
  RecvOk=0;
  init_rs232();
  while(1)
  {
    if(RecvOk)
        {

          U_art=0;
          RecvOk=0;       
           Process();
          if(T==1)
          {
            T=0;
                for(i=0;i<Tnum;i++)
                 {
                   SBUF=Tbuf;
                   Delay_ms(2);
                   while(!TI)
                   TI=0;
                 }
          }
        }
  }
}

出0入0汤圆

 楼主| 发表于 2011-11-18 14:16:15 | 显示全部楼层
#include "reg51.h"

#define uchar unsigned char
#define uint unsigned int
#define ufloat unsigned float

#define ENQ 0x05   //询问标志
#define ACK 0x06   //确认标志
#define NAK 0x15   //否认标志
#define EOT 0x04   //发送结束 标志
#define ETX 0x03   //应答结束 标志
#define DB  0x01   //字节标志 标志
#define DW  0x02   //字标志标志
#define DF  0x03   //浮点数标志
#define R   0x52   //读标志
#define W   0x57   //写标志
#define MyAddr   0x01   //下位机地址

bit RecvOk,CRCOk;                   //接收完毕状态位 ,CRC校验判断位
uchar Rbuf[11],Tbuf[37];    //接收和发送缓存区
uchar Rptr,Tptr,Tnum,T;           //接收指针,发送指针,发送数据个数
uchar last; //下位机地址,ms延时,接收数据存放
uchar crc;                 //CRC校验
idata uchar U_art;
uchar DatB[17]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10};     //存放字节数据
uint DatW[11]={0x0000,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x9999,0xaaaa};    //存放字型数据
uchar ML;

/**************串口中断***************/
void Uart() interrupt 4 using 1
{
  uint j;
  if(RI)
  {
    RI=0;
U_art++;          
   switch(U_art)
        {
            case 1:        Rbuf[0]=SBUF;
                 if(Rbuf[0]!=ENQ) U_art=0;
                  break;
                case 2:        Rbuf[1]=SBUF;break;
                case 3:        Rbuf[2]=SBUF;break;
                case 4:        Rbuf[3]=SBUF; crc=0;
                 for(j=0;j<4;j++)
                  crc^=Rbuf[j];       
                 if(Rbuf[2]==EOT)
                  if(crc==0)
                    RecvOk=1;
                  else
                    U_art=0;
                 break;
            case 5:        Rbuf[4]=SBUF;break;
                case 6:        Rbuf[5]=SBUF;break;
                case 7:        Rbuf[6]=SBUF;break;
                case 8:        Rbuf[7]=SBUF;crc=0;
                 for(j=0;j<8;j++)
                  crc^=Rbuf[j];
                 if(Rbuf[6]==EOT)
                  if(crc==0)
                  {Rptr=8;RecvOk=1;}
                  else U_art=0;
                 break;
                case 9:        Rbuf[8]=SBUF;crc=0;
                 for(j=0;j<9;j++)
                  crc^=Rbuf[j];
                 if(Rbuf[7]==EOT)
                  if(crc==0)
                  {Rptr=9;RecvOk=1;}
                  else U_art=0;
                 break;
                case 10:Rbuf[9]=SBUF;break;
                case 11:Rbuf[10]=SBUF; crc=0;
                 for(j=0;j<11;j++)
                  crc^=Rbuf[j];
                 if(Rbuf[9]==EOT)
                  if(crc==0)
                  {Rptr=11;RecvOk=1;}
                  else U_art=0;
                 break;
        }   
  }
//  else if(TI)
//   {TI=0;}
}

/***************初始化RS232********************/
void init_rs232(void)           //波特率9600
{
   TMOD = 0x21;
    SCON = 0x50;
    TH1 = 0xFA;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}

/**************ms延时************************/
void Delay_ms(uint count)
{
   uint i,j;
   for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}

/****************协议处理*****************/
void Process()
{
   uint i,n,ptr,num,k;
  //对PC的查询命令进行应答
  if(Rbuf[1]==MyAddr)
  {
    Tbuf[0]=ACK;
    Tbuf[1]=MyAddr;
    Tbuf[2]=ETX;
    crc=0;
        for(i=0;i<3;i++)
        crc^=Tbuf;
        Tbuf[3]=crc;
        Tptr=0;
        Tnum=4;
        T=1;
   }
   else if(Rbuf[1]==R)
   {
     n=Rbuf[5];
         ptr=Rbuf[3];      //低位地址->ptr
         switch(Rbuf[2])   // 判断数据类型
         {
          case DB:          //读取字节数据
                   for(i=ptr;i<ptr+n;i++)
                          {
                            DatB=DatB+1;
                        Tbuf[3+i-ptr]=DatB;
                          }
                    break;
          case DW:
                   num=n/2;
                   for(i=ptr;i<ptr+num;i++)
                          {
                            k=2*i;
                                DatW=DatW+10;
                                Tbuf[3+k-2*ptr]=DatW;
                            Tbuf[4+k-2*ptr]=(DatW>>8);               
                          }
                          break;
                        default:break;
     }
              Tbuf[0]=ACK;
                  Tbuf[1]=n&0xff;
                  Tbuf[2]=n>>8;
                  Tbuf[3+n]=ETX;
                  crc=0;
                    for(i=0;i<4+n;i++)
                 crc^=Tbuf;
                 Tbuf[4+n]=crc;
                 Tptr=0;
                 Tnum=n+5;
                 T=1;
}

   //向单片机写数据的处理
   else if(Rbuf[1]==W)
   {
   //  n=Rbuf[4];
//            ptr=Rbuf[3];      //低位地址->ptr
//     n=Rptr-7;         
//         switch(Rbuf[2])   // 判断数据类型
//         {
//          case DB:          //读取字节数据
//                  for(i=0;i<n;i++)
//                          {
                        ML=Rbuf[5+i];            
//                          }               
//                    break;
//          case DW:
//                          for(i=0;i<n;i++)
//                          {
//                            k=2*i;
//                            DatW[ptr+i]=Rbuf[6+k];         
//                                DatW[ptr+i]=(DatW[ptr+i]<<8);         
//                                DatW[ptr+i]=Rbuf[5+k];                       
//                          }
//                          break;         
//       default:break;
//         }                                       
         Tbuf[0]=ACK;                                          
         Tbuf[1]=0x00;          
         Tbuf[2]=ETX;
         crc=0;                                    
         for(i=0;i<3;i++)
          crc^=Tbuf;
         Tbuf[3]=crc;       
         Tptr=0;
         Tnum=4;
         T=1;               
   }
}

/***********************主函数*****************/
void main(void)
{  
  uint i;
  Delay_ms(1000);
  RecvOk=0;
  init_rs232();
  while(1)
  {
    if(RecvOk)
        {
         
          U_art=0;
          RecvOk=0;       
           Process();
          if(T==1)
          {
            T=0;
                for(i=0;i<Tnum;i++)
                 {
                   SBUF=Tbuf;
                   Delay_ms(2);
                   while(!TI)
                   TI=0;
                 }
          }
        }
  }
}

出0入0汤圆

发表于 2011-11-29 19:44:23 | 显示全部楼层
这个东西好,不会上位机也能轻松搞定。

出0入476汤圆

发表于 2011-11-29 20:08:38 | 显示全部楼层
mark,最好添加一点说明

出0入0汤圆

发表于 2011-11-29 20:14:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-29 20:44:07 | 显示全部楼层
好东东,顶一个!

出0入0汤圆

发表于 2011-11-29 20:55:27 | 显示全部楼层
hao

出0入0汤圆

发表于 2011-11-29 21:05:57 | 显示全部楼层
好资料,顶楼主!!!

出0入0汤圆

发表于 2011-11-29 21:07:14 | 显示全部楼层
何为组态王

出0入0汤圆

发表于 2011-11-29 21:08:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-29 22:51:46 | 显示全部楼层
这个挺有用的。

出0入0汤圆

发表于 2011-11-30 00:37:07 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-11-30 15:21:42 | 显示全部楼层
高手解释一下吧?!!!

出0入0汤圆

发表于 2011-11-30 15:44:43 | 显示全部楼层
这个有没有测试过?还有是基于组态王哪种协议的,asc还是HEX?

出0入0汤圆

发表于 2011-11-30 18:30:12 | 显示全部楼层
绝对的好东西 ,顶一个

出0入0汤圆

发表于 2011-12-12 22:28:50 | 显示全部楼层
利害,这样也可以啊!一般组态王和PLC一起多,很少和单片机的

出0入0汤圆

 楼主| 发表于 2011-12-16 09:45:45 | 显示全部楼层
回复【14楼】blade_li  
-----------------------------------------------------------------------
HEX

出0入0汤圆

发表于 2011-12-16 10:17:59 | 显示全部楼层
回复【2楼】luyanqing0828 卢路
-----------------------------------------------------------------------

回复【楼主位】luyanqing0828 卢路
-----------------------------------------------------------------------

添加一些说明呀

出0入0汤圆

发表于 2011-12-16 10:38:44 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2011-12-16 10:47:35 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2011-12-16 13:37:35 | 显示全部楼层
刚毕业那时候用过这个东西
上午搞了下组态王,老是说寄存器地址错误。忘记怎么搞了

出0入0汤圆

发表于 2011-12-16 13:47:53 | 显示全部楼层
回复【4楼】wy2000
-----------------------------------------------------------------------

点击此处下载 ourdev_705250Z224MX.pdf(文件大小:132K) (原文件名:单片机与组态王的通讯程序设计.pdf)
点击此处下载 ourdev_705251P8H4Z2.pdf(文件大小:216K) (原文件名:用组态王实现PC机与多台单片机的远程通信.pdf)
点击此处下载 ourdev_705252KZGB6E.pdf(文件大小:258K) (原文件名:组态王与MCS51单片机多机通讯的一种方法.pdf)

出0入0汤圆

发表于 2011-12-16 13:52:38 | 显示全部楼层
点击此处下载 ourdev_705253S81LKI.doc(文件大小:39K) (原文件名:通用单片机(HEX).doc)
点击此处下载 ourdev_705254VD07JY.doc(文件大小:124K) (原文件名:通用单片机通讯协议(ASCII).doc)

出0入0汤圆

发表于 2011-12-16 13:56:11 | 显示全部楼层
回复【22楼】love_TYQ
-----------------------------------------------------------------------

楼主无私!


谢谢楼主!

出0入0汤圆

发表于 2011-12-16 14:05:30 | 显示全部楼层
回复【24楼】qinhya
-----------------------------------------------------------------------

没什么,在学校的时候做这个东西,下了资料,哈哈

出0入0汤圆

发表于 2011-12-16 14:29:02 | 显示全部楼层
可惜毕业设计不做这个了

出0入0汤圆

发表于 2011-12-16 15:41:06 | 显示全部楼层
MARK

出0入0汤圆

 楼主| 发表于 2011-12-16 17:55:56 | 显示全部楼层
回复【23楼】love_TYQ  
-----------------------------------------------------------------------
请问怎么上传word、PDF等文档

出0入0汤圆

发表于 2011-12-16 19:43:23 | 显示全部楼层
回复【28楼】luyanqing0828 卢路
-----------------------------------------------------------------------


(原文件名:TP0.jpg)

出0入84汤圆

发表于 2011-12-16 20:35:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-16 20:59:50 | 显示全部楼层
这个还真不错,许多人有用!!

出0入0汤圆

发表于 2011-12-16 21:29:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-16 21:30:28 | 显示全部楼层
回复【32楼】cookie
mark
-----------------------------------------------------------------------

出0入0汤圆

发表于 2011-12-16 21:40:59 | 显示全部楼层
这个有参考意义,谢谢了!

出0入0汤圆

发表于 2011-12-16 22:06:56 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-12-16 22:31:12 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2011-12-16 22:54:36 | 显示全部楼层
有用

出0入0汤圆

发表于 2011-12-17 10:19:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-20 13:58:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-16 11:53:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-16 19:56:24 | 显示全部楼层
这个要学习了,谢谢楼主

出0入0汤圆

发表于 2012-2-16 21:01:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-16 21:40:38 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-16 21:49:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-16 22:09:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-16 23:19:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-17 13:58:30 | 显示全部楼层
LZ知道不知道如何自己编写组态王的驱动啊?

出0入0汤圆

发表于 2012-2-17 20:05:15 | 显示全部楼层
不错!

出0入85汤圆

发表于 2012-2-17 21:03:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-17 21:51:34 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-17 22:11:57 | 显示全部楼层
好资料!

出0入0汤圆

发表于 2012-2-18 01:35:32 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-18 08:46:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-18 18:13:52 | 显示全部楼层
呵呵。 好东西喔

出0入0汤圆

发表于 2012-2-18 21:00:03 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2012-2-18 21:53:22 | 显示全部楼层
确实有实际意义,感谢

出0入0汤圆

发表于 2012-6-8 10:52:23 | 显示全部楼层
mark..谢谢..收藏了..

出0入0汤圆

发表于 2012-6-8 11:12:02 | 显示全部楼层
不错...    学习下

出0入0汤圆

发表于 2012-6-8 12:21:45 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2012-6-8 19:10:15 来自手机 | 显示全部楼层
楼主无私

出0入0汤圆

发表于 2012-6-9 00:22:53 | 显示全部楼层
很有意思的东西

出0入0汤圆

发表于 2012-6-9 02:09:35 | 显示全部楼层
  我觉得组态王不好耍

出0入0汤圆

发表于 2012-6-9 07:33:34 来自手机 | 显示全部楼层
正弄这个

出0入0汤圆

发表于 2012-6-18 22:22:44 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-6-19 14:20:33 | 显示全部楼层
想搞一个单片机与组态的全面实用案例,但始终没那份精力,这个先留着备查.

出0入4汤圆

发表于 2012-6-19 14:44:53 | 显示全部楼层
mark  组态王只听过 不知道是啥东西

出0入0汤圆

发表于 2012-6-19 16:15:07 | 显示全部楼层
mark        

出0入0汤圆

发表于 2012-6-27 17:02:06 | 显示全部楼层
mark   谢谢分享。

出0入0汤圆

发表于 2012-12-5 17:23:22 | 显示全部楼层
mark
。。。

出0入0汤圆

发表于 2012-12-5 17:40:32 | 显示全部楼层
确实有实际意义,感谢

出0入0汤圆

发表于 2012-12-6 15:32:49 | 显示全部楼层

出5入8汤圆

发表于 2013-5-31 09:37:47 | 显示全部楼层
mark  现在我就要做这个

出5入8汤圆

发表于 2013-6-1 15:26:11 | 显示全部楼层
楼主 可否留个联系方式,我想请教一下你关于组态王与单片机通信的啥问题

出0入0汤圆

发表于 2013-6-6 22:13:08 | 显示全部楼层
非常谢谢楼主。

出0入0汤圆

发表于 2013-6-6 22:53:24 | 显示全部楼层
学习,MARK

出0入0汤圆

发表于 2013-6-6 23:19:42 | 显示全部楼层
非常好!支持

出0入0汤圆

发表于 2013-6-7 17:03:09 | 显示全部楼层
楼主为毛不注释呢?小白表示看的好蛋疼啊

出0入0汤圆

发表于 2013-6-8 18:34:28 | 显示全部楼层
luyanqing0828 发表于 2011-11-18 14:16
#include "reg51.h"

#define uchar unsigned char

我写的单片机部分的程序与组态王通讯,但是组态王只能读取一个数据,很头痛。好好研究一下你的程序!

出0入0汤圆

发表于 2013-6-8 19:09:55 | 显示全部楼层
mark 收下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 12:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表