搜索
bottom↓
回复: 24

【已解决】铁电真铁,FM24C256写不进去,贴出程序

[复制链接]

出0入0汤圆

发表于 2010-4-22 09:23:14 | 显示全部楼层 |阅读模式
为了方便查阅,就分开几楼贴出了,以下是一些定义。

#define uint8     unsigned char
#define uint16    unsigned int
#define uint32    unsigned long

#define SETBIT(x, y)        (x |= y)
#define CLEARBIT(x, y)      (x &= ~y)
#define CHECKBIT(x, y)      (x & y)

#define PCBIT7 0x80
#define PCBIT6 0x40
#define PCBIT5 0x20
#define PCBIT4 0x10
#define PCBIT3 0x08
#define PCBIT2 0x04
#define PCBIT1 0x02
#define PCBIT0 0x01

/*-------------
FM24C256
--------------*/
#define SCL PCBIT0
#define SDA PCBIT1
#define I2CPORT      PORTC
#define I2CPORTD     DDRC
#define I2CPORTIN    PINC

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-4-22 09:27:34 | 显示全部楼层
以下是初始化和启动,停止。

#include <iom32v.h>
#include <AVRdef.h>
#include "PUBLIC.H"

/*-------------------------------------------------------------
2010-04-16
CPU:Atmega32
晶振:4MHz       
FM24C256-GTR
I/O模拟I2C时序控制铁电子程序
---------------------------------------------------------------*/

#define I2CReadCMD  0xa1
#define I2CWriteCMD 0xa0
#define SomeNops NOP();NOP();NOP()

uint8 I2CSlaveAckFlag=0;

void I2CPORTInit (void)
{
  SETBIT(I2CPORTD,SCL);    //设置SCL为输出       
  NOP();NOP();NOP();
  SETBIT(I2CPORTD,SDA);    //设置SDA为输出
  NOP();NOP();NOP();
         
  SETBIT(I2CPORT,SCL);     //SCL=1
  NOP();NOP();NOP();
  SETBIT(I2CPORT,SDA);     //SDA=1
  NOP();NOP();NOP();
}

void I2CStart (void)
{
  SETBIT(I2CPORTD,SDA);    //设置SDA为输出
  NOP();NOP();NOP();
       
  SETBIT(I2CPORT,SCL);     //SCL=1
  SomeNops;
  SETBIT(I2CPORT,SDA);     //SDA=1               
  SomeNops;
  CLEARBIT(I2CPORT,SDA);   //SDA=0
  SomeNops;
  CLEARBIT(I2CPORT,SCL);   //SCL=0
  SomeNops;
}

void I2CStop (void)
{       
  SETBIT(I2CPORTD,SDA);    //设置SDA为输出
       
  CLEARBIT(I2CPORT,SCL);   //SCL=0  
  SomeNops;
  CLEARBIT(I2CPORT,SDA);   //SDA=0          
  SomeNops;  
  SETBIT(I2CPORT,SCL);     //SCL=1
  SomeNops;  
  SETBIT(I2CPORT,SDA);     //SDA=1          
  SomeNops;
  CLEARBIT(I2CPORT,SCL);   //SCL=0  
  SomeNops;
}

出0入0汤圆

 楼主| 发表于 2010-4-22 09:30:16 | 显示全部楼层
以下是3种应答。


void I2CHostAck (void)
{
  SETBIT(I2CPORTD,SDA);   //设置SDA为输出
       
  CLEARBIT(I2CPORT,SCL);  //SCL=0
  SomeNops;       
  CLEARBIT(I2CPORT,SDA);  //SDA=0
  SomeNops;       
  SETBIT(I2CPORT,SCL);    //SCL=1
  SomeNops;
  CLEARBIT(I2CPORT,SCL);  //SCL=0
  SomeNops;
}

void I2CSlaveAck (void)
{
  SETBIT(I2CPORTD,SDA);   //设置SDA为输出
       
  CLEARBIT(I2CPORT,SCL);  //SCL=0
  SomeNops;
  SETBIT(I2CPORT,SDA);    //SDA=1
  SomeNops;       
  SETBIT(I2CPORT,SCL);    //SCL=1
  CLEARBIT(I2CPORTD,SDA); //设置SDA为输入
  SomeNops;
  I2CSlaveAckFlag=(I2CPORTIN&0x02);
  CLEARBIT(I2CPORT,SCL);  //SCL=0
  SomeNops;
}

void I2CNoAck(void)
{
  SETBIT(I2CPORTD,SDA);   //设置SDA为输出

  SETBIT(I2CPORT,SDA);    //SDA=1
  SomeNops;       
  SETBIT(I2CPORT,SCL);    //SCL=1
  SomeNops;  
  CLEARBIT(I2CPORT,SCL);  //SCL=0
  SomeNops;
}

出0入0汤圆

 楼主| 发表于 2010-4-22 09:34:50 | 显示全部楼层
以下是I2C总线上读、写一个字节。


/*-----------------------------------------------
读一个字节从I2C总线上
-----------------------------------------------*/
uint8 Read1Byte2I2c (void)
{
  uint8 I2CByte=0;
  uint8 I2CByteTemp=0;
  uint8 i=0;
       
  SETBIT(I2CPORTD,SDA);      //设置SDA为输出
  SETBIT(I2CPORT,SDA);       //SDA=1
  SomeNops;       

  CLEARBIT(I2CPORTD,SDA);    //设置SDA为输入
  SomeNops;

  for(i=0;i<8;i++)
  {
     I2CByte<<=1;
         
     SETBIT(I2CPORT,SCL);    //SCL=1
     SomeNops;
     I2CByteTemp=(I2CPORTIN&0x02);
     I2CByteTemp>>=1  ;
     I2CByte |= I2CByteTemp;
     CLEARBIT(I2CPORT,SCL);  //SCL=0
     SomeNops;
   }
       
   return (I2CByte);
}

/*-----------------------------------------------
写一个字节到I2C总线上
-----------------------------------------------*/
void Write1Byte2I2C (uint8 I2CByte)
{
  uint8 i=0;
       
  SETBIT(I2CPORTD,SDA);          //设置SDA为输出

  for(i=0;i<8;i++)
  {
    CLEARBIT(I2CPORT,SCL);       //SCL=0
    if( (I2CByte&0x80) == 0x80 )
      SETBIT(I2CPORT, SDA);      //SDA=1
    else
      CLEARBIT(I2CPORT,SDA);     //SDA=0
    NOP();NOP();
    SETBIT(I2CPORT,SCL);         //SCL=1          
    SomeNops;
          
    I2CByte<<=1;
   }
}

出0入0汤圆

 楼主| 发表于 2010-4-22 09:38:40 | 显示全部楼层
以下是从FM24C256读出单个,多个字节。


/*----------------------------------------------
从FM24C256中读出单个个字节
-----------------------------------------------*/
uint8 FM24C256Read1Byte (uint16 Address)
{
  uint8 I2CByte=0;
       
  I2CStart();
  Write1Byte2I2C(I2CWriteCMD);
  I2CSlaveAck();
  Write1Byte2I2C(Address/256);
  I2CSlaveAck();
  Write1Byte2I2C(Address%256);
  I2CSlaveAck();
  I2CStart();       
  Write1Byte2I2C(I2CReadCMD);
  I2CSlaveAck();
  I2CByte=Read1Byte2I2c();
  I2CNoAck();
  I2CStop();
       
  return (I2CByte);
}

/*----------------------------------------------
从FM24C256中读出多个个字节
-----------------------------------------------*/
void FM24C256Read (uint16 Address , uint16 ByteNumber , uint8 * DataPoint)
{
  uint8   I2CDataTemp=0;
  uint16  i=0;
       
  I2CStart();
  Write1Byte2I2C(I2CWriteCMD);
  I2CSlaveAck();
  Write1Byte2I2C(Address/256);
  I2CSlaveAck();
  Write1Byte2I2C(Address%256);
  I2CSlaveAck();
  I2CStart();       
  Write1Byte2I2C(I2CReadCMD);
  I2CSlaveAck();       
                               
  for(i=0;i<(ByteNumber-1);i++)
  {       
    * (DataPoint+i)=Read1Byte2I2c();
    I2CHostAck();
   }
       
   * (DataPoint+ByteNumber-1)=Read1Byte2I2c();

   I2CNoAck();
   I2CStop();
}

出0入0汤圆

 楼主| 发表于 2010-4-22 09:40:26 | 显示全部楼层
以下是向FM24C256写入单个,多个字节。


/*-----------------------------------------------
向FM24C256中写入单个或多个个字节
-----------------------------------------------*/
void FM24C256Write (uint16 Address , uint16 ByteNumber , uint8 * DataPoint)
{
  uint16 i=0;
       
  I2CStart();
  Write1Byte2I2C(I2CWriteCMD);
  I2CSlaveAck();
  Write1Byte2I2C(Address/256);
  I2CSlaveAck();
  Write1Byte2I2C(Address%256);
  I2CSlaveAck();

  for(i=0;i<ByteNumber;i++)
  {
    Write1Byte2I2C( * (DataPoint+i) );
    I2CSlaveAck();
  }

  I2CStop();
}

出0入0汤圆

 楼主| 发表于 2010-4-22 09:42:43 | 显示全部楼层
以下是主函数

//ICC-AVR application builder : 2010-4-20 9:19:00
// Target : M32
// Crystal: 4.0000Mhz

#include <iom32v.h>
#include <macros.h>
#include <AVRdef.h>
#include "PUBLIC.H"
#include "MAIN.H"

extern void     I2CPORTInit (void);
extern uint8    FM24C256Read1Byte (uint16 Address);
extern void     FM24C256Read  (uint16 Address , uint16 ByteNumber , uint8 * DataPoint);
extern void     FM24C256Write (uint16 Address , uint16 ByteNumber , uint8 * DataPoint);

#define TestAddress 0x0010

uint8 TestTemp1=0;
uint8 TestTemp2=0;
uint8 TestArray1[10]={0,0,0,0,0,0,0,0,0,0};

void port_init(void)
{
PORTA = 0x00;
DDRA  = 0x00;
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00;
DDRC  = 0x00;
PORTD = 0x00;
DDRD  = 0x00;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();

MCUCR = 0x00;
GICR  = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

//
void main(void)
{
  init_devices();

  //SETBIT(I2CPORTD,SDA);
  //SETBIT(I2CPORT,SDA);
       
  //CLEARBIT(I2CPORTD,SDA);
  
  //if( CHECKBIT(I2CPORTIN,SDA) )
     //TestTemp1=0;
       
  I2CPORTInit();
       
  TestTemp2=FM24C256Read1Byte(TestAddress);
       
  TestTemp1=0;
       
  TestTemp1=0x0f;
       
  FM24C256Write(TestAddress,1,&TestTemp1);
       
  TestTemp1=0;
       
  TestTemp2=FM24C256Read1Byte(TestAddress);
       
  TestTemp1=0;       
       
  TestTemp1=0;
}

出0入0汤圆

 楼主| 发表于 2010-4-22 09:49:30 | 显示全部楼层
以上是我的程序,现在从任何地址读出一个字节都是0xff,写入0x0f后读出还是0xff,一开始我认为是读对了,因为一般储存器没写过应该是0xff的,但是仔细观察有无应答信号,在读FM24C256单个字节的函数(FM24C256Read1Byte)那里设了断点,发现就只有发送第一个命令字节是有正确应答的(低电平),后边都是高电平。所以好像读也不对。SomeNops试过5个NOP也不行,我用的4MHZ,那么一条NOP就是1/4微妙,看了FM24C256数据手册,最快能支持1MHZ。有用过铁电的朋友请发表下看法。谢谢。

我用的ICCAVR 7.22+AVRStudio最新版+JTAG ICE

主函数我用的向导生成然后加入自己的代码,因为看见向导那里可以设置晶振频率。

出0入0汤圆

发表于 2010-4-22 09:56:59 | 显示全部楼层
port_init(); 此处有问题。
//===========================================//
I2CPORTInit();刚看到这个函数。
这样端口配置是没什么问题了。

出0入0汤圆

 楼主| 发表于 2010-4-22 10:07:38 | 显示全部楼层
回复【8楼】1181zjf
port_init(); 此处有问题。

-----------------------------------------------------------------------

那是向导生成的,就是I/O全部都设置成输入。你能说说具体是什么问题吗?

出0入0汤圆

发表于 2010-4-22 11:15:20 | 显示全部楼层
好好看看时序,应答是由铁电发出还是由MCU这边发出,是截然不同的。FM24C16和64以上的铁电读写时序稍微是有点差别的。

这是偶的程序:
/*******************************FM24C256***************************************/
/***********************SDA--->PC6,SCL--->PC5**********************************/
#define FM24C256_SCL_HIGH PORTC|=BIT(5)
#define FM24C256_SCL_LOW PORTC&=~BIT(5)
#define FM24C256_SCL_INPUT DDRC&=~BIT(5)
#define FM24C256_SCL_OUTPUT DDRC|=BIT(5)

#define FM24C256_SDA_HIGH PORTC|=BIT(6)
#define FM24C256_SDA_LOW PORTC&=~BIT(6)
#define FM24C256_SDA_INPUT DDRC&=~BIT(6)
#define FM24C256_SDA_OUTPUT DDRC|=BIT(6)
#define FM24C256_SDA_STATUS (PINC&0x40)

#define FRAM_READ 0xa1
#define FRAM_WRITE 0xa0

/*************************铁电启动,SCL=PC5,SDA=PC6***************************/   
void FRAM_Start(void)
   {
            FM24C256_SCL_LOW;//SCL=0
           Some_NOP(2);
           FM24C256_SDA_HIGH;//SDA=1
           Some_NOP(2);
           FM24C256_SCL_HIGH;//SCL=1
           Some_NOP(4);
           FM24C256_SDA_LOW;//SDA=0
           Some_NOP(2);
           FM24C256_SCL_LOW;//SCL=0
   }

/*******************************铁电停止***************************************/
void FRAM_Stop(void)
   {
           FM24C256_SCL_LOW;//SCL=0
            Some_NOP(2);
           FM24C256_SDA_LOW;//SDA=0
           Some_NOP(4);
           FM24C256_SCL_HIGH;//SCL=1
           Some_NOP(2);
           FM24C256_SDA_HIGH;//SDA=1
           Some_NOP(2);
           FM24C256_SCL_LOW;//SCL=0
   }

/********************************铁电响应**************************************/       
void FRAM_Ack(void)
   {
           FM24C256_SCL_LOW;//SCL=0
           Some_NOP(2);
           FM24C256_SDA_LOW;//SDA=0
           Some_NOP(2);
           FM24C256_SCL_HIGH;//SCL=1
           Some_NOP(4);
           FM24C256_SCL_LOW;//SCL=0
   }

/********************************铁电无应答************************************/
void FRAM_No_Ack(void)
   {
            FM24C256_SCL_LOW;//SCL=0
           Some_NOP(2);
            FM24C256_SDA_HIGH;//SDA=1
           Some_NOP(2);
           FM24C256_SCL_HIGH;//SCL=1
           Some_NOP(4);
           FM24C256_SCL_LOW;//SCL=0
   }

/*******************************铁电等待应答***********************************/   
unsigned char Wait_FRAM_Ack(void)
   {
           uchar errtime=255;
           FM24C256_SCL_LOW;//SCL=0
           Some_NOP(2);
           FM24C256_SDA_HIGH;//SDA=1,PC6
           NOP();
           FM24C256_SDA_INPUT;//Set SDA InputDirection
           Some_NOP(4);
           FM24C256_SCL_HIGH;//SCL=1,PC5
           Some_NOP(2);
           while(FM24C256_SDA_STATUS)
           {
              errtime--;
                  if(!errtime)
                   {
                       FM24C256_SDA_OUTPUT;//Set SDA OutputDirection
                           FRAM_Stop();
                           return FALSE;
                   }
           }
           FM24C256_SCL_LOW;//SCL=0
           FM24C256_SDA_OUTPUT;
           FM24C256_SDA_HIGH;//SDA=1
           Some_NOP(2);
           return TRUE;
   }

/*******************************字节写入***************************************/          
void IN_Byte(unsigned char ch)
   {
       uchar i=8;
       while(i--)
            {
               FM24C256_SCL_LOW;//SCL=0
               if(ch&0x80)
                    {
                            FM24C256_SDA_HIGH;//SDA=1
                    }
                   else
                    {
                           FM24C256_SDA_LOW;//SDA=0
                    }       
                   ch<<=1;//铁电数据传输先传输高位
                   Some_NOP(3);
                   FM24C256_SCL_HIGH;//SCL=1
                   Some_NOP(3);
               }
           Some_NOP(4);
           FM24C256_SCL_LOW;//SCL=0
   }
         
/********************************字节读出**************************************/          
unsigned char OUT_Byte(void)
   {
       uchar i=8;
       uchar ddata=0;
       FM24C256_SDA_HIGH;//SDA=1
       NOP();
       FM24C256_SDA_INPUT;//SDA InputDirection                     
            
       Some_NOP(3);
       while(i--)
        {
          ddata <<= 1;
         if(FM24C256_SDA_STATUS)  //if SDA=1
          {
                ddata |= 0x01;
          }
                  
          FM24C256_SCL_HIGH;//SCL=1
         Some_NOP(3);                  
         FM24C256_SCL_LOW;//SCL=0
         Some_NOP(3);
        }
               
           FM24C256_SDA_OUTPUT;     //SDA 输出
           Some_NOP(4);
           FM24C256_SDA_HIGH;//SDA=1
           Some_NOP(2);
           FM24C256_SCL_LOW;//SCL=0
           return ddata;       
   }

/*******************************铁电单个数据的写入*****************************/       
/****************************地址为0x0000-0x1fff*******************************/   
void  FRAM_Single_Data_Write(uint addr,uchar ch)
   {
            uchar addr_MSB;
           uchar addr_LSB;
           CLI();
           addr_MSB=(addr>>8)& 0x007F;
           addr_LSB=addr & 0x00ff;
           FRAM_Start();
           IN_Byte(FRAM_WRITE);
           Wait_FRAM_Ack();
           IN_Byte(addr_MSB);
           Wait_FRAM_Ack();
           IN_Byte(addr_LSB);
           Wait_FRAM_Ack();
           IN_Byte(ch);
           Wait_FRAM_Ack();
           FRAM_Stop();
           SEI();
   }
   
/*******************************铁电多字节数据的写入***************************/
/****************************地址为0x0000-0x1fff*******************************/
/**************************地址,长度(<255),写入数据内容**********************/       
void  FRAM_Multi_Data_Write(uint addr,uchar length,uchar *ptr)
   {
            uchar addr_MSB;
           uchar addr_LSB;
           uchar i;
           CLI();
           length=length-1;
           addr_MSB=(addr>>8)& 0x007F;;
           addr_LSB=addr & 0x00ff;
           FRAM_Start();
           IN_Byte(FRAM_WRITE);
           Wait_FRAM_Ack();
           IN_Byte(addr_MSB);
           Wait_FRAM_Ack();
           IN_Byte(addr_LSB);
           Wait_FRAM_Ack();
           for(i=0;i<length;i++) //出错就是在这里,最后一个数据要单独发
           {
                      IN_Byte(*ptr);
                   Wait_FRAM_Ack();
                   ptr++;
           }
           IN_Byte(*ptr);
           Wait_FRAM_Ack();
           FRAM_Stop();
           SEI();
   }   
       
/****************************铁电单个字节数据的读取****************************/
unsigned char FRAM_Single_Data_Read(unsigned int addr)
   {
        uchar addr_MSB;
        uchar addr_LSB;
        uchar ch;
        CLI();
        addr_MSB=(addr>>8)&0x007F;
        addr_LSB=addr&0x00ff;
        FRAM_Start();
        IN_Byte(FRAM_WRITE);
        Wait_FRAM_Ack();
        IN_Byte(addr_MSB);
        Wait_FRAM_Ack();
        IN_Byte(addr_LSB);
        Wait_FRAM_Ack();
        FRAM_Start();
        IN_Byte(FRAM_READ);
        Wait_FRAM_Ack();
        ch=OUT_Byte();
        FRAM_No_Ack();
        FRAM_Stop();
        SEI();
        return ch;
   }            

/****************************铁电连续数据的读取********************************/
/******************如果读取一个,length就为1***********************************/
/***********************地址,读取字节数(<255),读取的内容*********************/
void FRAM_Sequ_Data_Read(uint addr,uchar length,uchar *ptr)
   {
        uchar addr_MSB;
        uchar addr_LSB;
        uchar i;
        CLI();
        length=length-1;//减1
        addr_MSB = (addr>>8) & 0x007f;
        addr_LSB = addr & 0x00ff;
        FRAM_Start();
        IN_Byte(FRAM_WRITE);
        Wait_FRAM_Ack();
        IN_Byte(addr_MSB);
        Wait_FRAM_Ack();
        IN_Byte(addr_LSB);
        Wait_FRAM_Ack();
        FRAM_Start();
        IN_Byte(FRAM_READ);
        Wait_FRAM_Ack();
        for(i=0;i<length;i++)
        {
            *ptr=OUT_Byte();
            FRAM_Ack();
            ptr++;
        }
        *ptr=OUT_Byte();
        FRAM_No_Ack();
        FRAM_Stop();
        SEI();
   }

出0入0汤圆

 楼主| 发表于 2010-4-22 16:19:35 | 显示全部楼层
回复【10楼】maleon
好好看看时序,应答是由铁电发出还是由MCU这边发出,是截然不同的。FM24C16和64以上的铁电读写时序稍微是有点差别的。
这是偶的程序:
/*******************************FM24C256***************************************/
/***********************SDA---&gt;PC6,SCL---&gt;PC5**********************************/
#define FM24C256_SCL_HIGH PORTC|=BIT(5)
#define FM24C256_SCL_LOW PORTC&amp;=~BIT(5)
#define FM24C256_SCL_INPUT DDRC&amp;=~BIT(5)
#define FM24C256_SCL_OUTPU......
-----------------------------------------------------------------------

太感谢了,我按照你的Some_NOP()改了,读写都正常了。
另外就是你特别注释了一下写入的时候要注意这个:
--------------------------------------
for(i=0;i<length;i++)
//出错就是在这里,最后一个数据要单独发
--------------------------------------
我试过了,不用的,而且写入单个数据也是可以用写入多个数据那个函数。

出0入0汤圆

发表于 2010-4-22 19:43:11 | 显示全部楼层
jizhu

出0入0汤圆

发表于 2010-4-22 23:30:05 | 显示全部楼层
mark,以后会用到

出0入0汤圆

发表于 2010-8-18 16:24:17 | 显示全部楼层
多谢maleon 的帖子,我已经测试成功,请问一下Some_NOP(unsigned int num);这个函数是由NOP();函数累加起来的对吧,程序写的很好,看的很清晰

出0入0汤圆

发表于 2010-8-18 16:33:02 | 显示全部楼层
价格如何?

出0入0汤圆

发表于 2010-8-20 08:46:17 | 显示全部楼层
RE 14楼:就一个FOR循环,累加或递减都行,偶的是赋值后递减,如果不是过分追求高速存储的话,偶觉得还是稍微加几个空字节为好。

RE 15楼:FMC256有点小贵,今年3月份不开票偶买来是15元。

出0入0汤圆

发表于 2010-8-20 08:48:44 | 显示全部楼层
据说现在又出了磁电,价格比铁电窑低!

有谁了解的?

出0入0汤圆

发表于 2010-8-20 09:39:04 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-8-25 14:36:29 | 显示全部楼层
不错啊

出0入0汤圆

发表于 2010-9-1 15:20:21 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-5-13 09:00:38 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-13 09:01:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-9-16 09:49:15 | 显示全部楼层
好帖子,借用一下

出0入0汤圆

发表于 2016-6-1 15:37:28 | 显示全部楼层
好贴子。“ 单个字节数据读取”中 ch=OUT_Byte(); 这个OUT_Byte()函数没看到是什么,楼主可否说明下?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-12 04:03

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

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