您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ IIC_Start函数代码示例

51自学网 2021-06-01 21:29:00
  C++
这篇教程C++ IIC_Start函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中IIC_Start函数的典型用法代码示例。如果您正苦于以下问题:C++ IIC_Start函数的具体用法?C++ IIC_Start怎么用?C++ IIC_Start使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了IIC_Start函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: IIC_Read_Bytes

uint8_t IIC_Read_Bytes(uint8_t dev, uint8_t reg, uint8_t length, uint8_t *data){    	uint8_t count = 0;	uint8_t temp;	IIC_Start();	IIC_Send_Byte(dev);	   	IIC_Wait_Ack();	IIC_Send_Byte(reg);   	IIC_Wait_Ack();	  	IIC_Start();	IIC_Send_Byte(dev + 1);  		IIC_Wait_Ack();	    	for(count = 0; count < length; count++)	{		 		 if(count != (length - 1) )		 	temp = IIC_Receive_Byte(1);  		 	else  			temp = IIC_Receive_Byte(0);			data[count] = temp;	}	IIC_Stop();	return count;}
开发者ID:HopingTang,项目名称:four_rotor_aircraft,代码行数:26,


示例2: IIC1_MultRead

u8 IIC1_MultRead(u8 slaveAddr, u8* pBuffer, u8 readAddr, u16 NumByteToRead){	IIC_Start();                   //起始信号 				 	IIC_Send_Byte(slaveAddr);				//发送写器件指令	 	if(FALSE==IIC_Wait_Ack())	{		IIC_Stop();                    		//发送停止信号		return 1;	}	IIC_Send_Byte(readAddr);   			//发送寄存器地址	IIC_Wait_Ack(); 	 										  		   	IIC_Start();  	 	   					//重新启动	IIC_Send_Byte(slaveAddr+1);				//发送读器件指令	IIC_Wait_Ack();	/* While there is data to be read */	while(NumByteToRead)	{		if(NumByteToRead == 1)		{			*pBuffer=IIC_Read_Byte(0);    	//读出寄存器数据不继续再读,发送NACK  		}		else 		{			*pBuffer=IIC_Read_Byte(1);    	//读出寄存器数据继续读,发送ACK  			pBuffer++;						/* Point to the next location where the byte read will be saved */		}		/* Decrement the read bytes counter */		NumByteToRead--;	}	IIC_Stop();                    			//停止信号	return 0;}
开发者ID:dammstanger,项目名称:FCU_UCOSII150617,代码行数:31,


示例3: IIC_Single_Read

/******************************************************************************  函数(模块)名称:unsigned char IIC_Single_Read(unsigned int R_addr,unsigned char *R_word)  功能:	单次读/随机读  输入参数: 要读的数据地址,输出数据保存的字节指针        	              		  输出参数: 1 读成功 0 读失败         	 		   		   其它说明: *******************************************************************************/unsigned char IIC_Single_Read(unsigned char R_addr,unsigned char *R_word){    unsigned char try_time=define_try_time; //用来定义出现通讯错误时尝试的错误    while(1)    {        if(!try_time--)    //用来防止因硬件错误或其它原因程序进入死循环        {           return 0;        }        IIC_Start();       //步骤1:产生一个启动信号        IIC_Send_Byte(Slave_Addres&(~BIT0));   //步骤2:发送控制命令        if(ReadAck())          continue;        //没有应答,忽略下面语句,重新开始                           //应答,则开始发送地址        IIC_Send_Byte(R_addr);        if(ReadAck())                   continue;        //没有应答,忽略下面语句,重新开始                           //应答,则开始发送启动信号        IIC_Start();       //启动信号        IIC_Send_Byte(Slave_Addres|BIT0);   //发送控制命令        if(ReadAck())                   continue;        //没有应答,忽略下面语句,重新开始        break;             //应答,则跳出循环,开始接收数据    }    *R_word=IIC_Receive_Byte(); //从总线上接收一个字节数据    WriteAck(1);               //发送 非应答信号    IIC_Stop();                //发送停止信号    return 1;}
开发者ID:380121850,项目名称:MicroFlashFTLV2,代码行数:36,


示例4: i2cRead

/**************************实现函数*********************************************函数原型:		bool i2cWrite(uint8_t addr, uint8_t reg, uint8_t data)*功  能:		*******************************************************************************/int i2cRead(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf){    if (!IIC_Start())        return 1;    IIC_Send_Byte(addr << 1);    if (!IIC_Wait_Ack()) {        IIC_Stop();        return 1;    }    IIC_Send_Byte(reg);    IIC_Wait_Ack();    IIC_Start();    IIC_Send_Byte((addr << 1)+1);    IIC_Wait_Ack();    while (len) {        if (len == 1)            *buf = IIC_Read_Byte(0);        else            *buf = IIC_Read_Byte(1);        buf++;        len--;    }    IIC_Stop();    return 0;}
开发者ID:cuihee,项目名称:PingHengXiaoChe,代码行数:29,


示例5: Single_Read_IIC

u8 Single_Read_IIC(u8 SlaveAddress, u8 REG_Address){  	u8 REG_data;    IIC_Start();                             IIC_SendByte(SlaveAddress);              IIC_SendByte(REG_Address);                IIC_Start();                             IIC_SendByte(SlaveAddress+1);            REG_data = IIC_RecvByte();              	IIC_SendACK();   	IIC_Stop();                             return REG_data; }
开发者ID:edisonlee102,项目名称:Balance_Robat,代码行数:13,


示例6: I2C_ReadByte

/********单字节读取*****************************************/uint8_t I2C_ReadByte(uint8_t SlaveAddress, uint8_t REG_Address){  	char REG_data;    IIC_Start();                          //起始信号    IIC_SendByte(SlaveAddress);           //发送设备地址+写信号    IIC_SendByte(REG_Address);            //发送存储单元地址,//从0开始	    IIC_Start();                          //起始信号    IIC_SendByte(SlaveAddress+1);         //发送设备地址+读信号    REG_data = IIC_RecvByte();              //读出寄存器数据	IIC_SendNACK();   	IIC_Stop();                           //停止信号    return REG_data; }
开发者ID:eastmoutain,项目名称:HummingBird,代码行数:14,


示例7: IIC1_ReadByte

u8 IIC1_ReadByte(u8 slaveAddr, u8 readAddr){	u8 REG_data;	IIC_Start();                   	//起始信号	IIC_Send_Byte(slaveAddr);    	//发送设备地址+写信号	IIC_Wait_Ack();	IIC_Send_Byte(readAddr);     	//发送存储单元地址,从0开始	IIC_Wait_Ack();					//必须要有	IIC_Start();                   	//起始信号	IIC_Send_Byte(slaveAddr+1);  	//发送设备地址+读信号	IIC_Wait_Ack();	REG_data=IIC_Read_Byte(0);    	//读出寄存器数据不继续再读,发送NACK  	return REG_data;	}
开发者ID:dammstanger,项目名称:FCU_UCOSII150617,代码行数:14,


示例8: MPU6050_ReadByte

/***********************************函数名:u8 MPU6050_ReadByte(u8 reg)说明:MPU6050单次读字节入口:u8	reg		寄存器地址出口:u8	读取到的字节备注:无************************************/u8 MPU6050_ReadByte(u8 reg){	u8 tmp;		IIC_Start();	IIC_Send_Byte(MPU6050_DEVICE);			// 发送器件地址+写信号	IIC_Send_Byte(reg);						// 需要读取的寄存器地址	IIC_Start();	IIC_Send_Byte(MPU6050_DEVICE + 1);		// 发送器件地址+读信号	tmp = IIC_Read_Byte(0);					// 读取数据不产生应答	IIC_Stop();		return tmp;}
开发者ID:huaqianlee,项目名称:Micro-Quadrotor,代码行数:21,


示例9: MPU_Read_Byte

//IIC读一个字节 //reg:寄存器地址 //返回值:读到的数据uint8_t MPU_Read_Byte(uint8_t reg){	uint8_t res;    IIC_Start(); 	IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令		IIC_Wait_Ack();		//等待应答     IIC_Send_Byte(reg);	//写寄存器地址    IIC_Wait_Ack();		//等待应答    IIC_Start();	IIC_Send_Byte((MPU_ADDR<<1)|1);//发送器件地址+读命令	    IIC_Wait_Ack();		//等待应答 	res=IIC_Read_Byte(0);//读取数据,发送nACK     IIC_Stop();			//产生一个停止条件 	return res;		}
开发者ID:ageofflight,项目名称:2015NUEDC,代码行数:18,


示例10: ADXL345_RD_Reg

//读ADXL345寄存器//addr:寄存器地址//返回值:读到的值u8 ADXL345_RD_Reg(u8 addr) 		{	u8 temp=0;		 	IIC_Start();  				 	IIC_Send_Byte(ADXL_WRITE);	//发送写器件指令	 	temp=IIC_Wait_Ack();	       IIC_Send_Byte(addr);   		//发送寄存器地址	temp=IIC_Wait_Ack(); 	 										  		   	IIC_Start();  	 	   		//重新启动	IIC_Send_Byte(ADXL_READ);	//发送读器件指令	 	temp=IIC_Wait_Ack();	       temp=IIC_Read_Byte(0);		//读取一个字节,不继续再读,发送NAK 	    	       IIC_Stop();					//产生一个停止条件 	    	return temp;				//返回读到的值}  
开发者ID:alloevil,项目名称:A-embedded-image-processing-platform--,代码行数:18,


示例11: WM8960_WriteData

void WM8960_WriteData(Uint8 channel, Uint8 Register, Uint16 Data){  Uint8 HightByte,LowByte;  Uint8 I2C_Status;  HightByte = Data >> 8;  HightByte = HightByte & 0x01;  HightByte |= (Register << 1);  LowByte = Data; //bit 7 - 0  IIC_Start(channel);  IIC_Delay();  if(!(IIC_WriteByte(channel,WM8960_Write_ADD)))  {    I2C_Status =  IIC_WriteByte(channel,HightByte);    I2C_Status = IIC_WriteByte(channel,LowByte);    IIC_Delay();    IIC_Stop(channel);#if DebugVerbosity > 1    if(I2C_Status == 0)    {      UART_TxStr("Channel = ");      UART_TxUint8(channel);      UART_TxStr("Register = ");      UART_TxUint8(Register);      UART_TxStr(" Value = ");      UART_TxUint8(Data>>8);      UART_TxUint8(LowByte);      UART_TxStr("/n/r");    }
开发者ID:marklin2100,项目名称:Projects,代码行数:31,


示例12: MPU_Write_Byte

//IIC写一个字节 //reg:寄存器地址//data:数据//返回值:0,正常//    其他,错误代码u8 MPU_Write_Byte(u8 reg,u8 data) 				 { 	IIC_Start(); 	IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令		if(IIC_Wait_Ack())	//等待应答	{		printf("in MPU_Write_Byte: failed at 1,reg=%X,data=%X/n",reg,data);		IIC_Stop();		 		return 1;			}	IIC_Send_Byte(reg);	//写寄存器地址	if(IIC_Wait_Ack()){		printf("in MPU_Write_Byte: failed at 2,reg=%X,data=%X/n",reg,data);		IIC_Stop();		return 1;	}		//等待应答 	IIC_Send_Byte(data);//发送数据	if(IIC_Wait_Ack())	//等待ACK	{		printf("in MPU_Write_Byte: failed at 3,reg=%X,data=%X/n",reg,data);		IIC_Stop();	 		return 1;		 	}	IIC_Stop();	 	return 0;}
开发者ID:Hadron67,项目名称:Quadrotor_stm32,代码行数:31,


示例13: SetUpADS1110

void SetUpADS1110(unsigned char x){    IIC_Start();    IIC_Send_Byte(ADS1110_ADDR & 0xFE);    IIC_Send_Byte(x);    IIC_Stop();}
开发者ID:changleo828,项目名称:BOSSEN_YIBIAO_4_20mA,代码行数:7,


示例14: IIC_Page_Write

/******************************************************************************  函数(模块)名称:unsigned char IIC_Page_Write(unsigned char W_addr,                                              unsigned char *WriteData_Addr,                                              unsigned char WriteData_Cnt)  功能:	IIC页写  输入参数: 要写的地址,要写的数据指针,要写的字节数        	              		  输出参数: 1 写成功 0 写失败         	 		   		   其它说明: 要写的字节数,不能大于当前写字节地址到当前页最大地址之差。*******************************************************************************/unsigned char IIC_Page_Write(unsigned char W_addr,unsigned char *WriteData_Addr,                             unsigned char WriteData_Cnt){    unsigned char try_time=define_try_time; //用来定义出现通讯错误时尝试的错误    while(1)    {        if(!try_time--)    //用来防止因硬件错误或其它原因程序进入死循环        {           return 0;        }        IIC_Start();                           //步骤1:主机产生一个启动信号        IIC_Send_Byte(Slave_Addres&(~BIT0));   //步骤2:主机发送从机地址及读写位        if(ReadAck())          continue;        //步骤3:主机接收从机应答;没有应答,忽略下面语句,重新开始                           //应答,则开始发送地址        IIC_Send_Byte(W_addr);     //步骤4:主机发送读写地址        if(ReadAck())                   continue;               //步骤5:主机接收从机应答 没有应答,忽略下面语句,重新开始        while(WriteData_Cnt--)        {            IIC_Send_Byte(*(WriteData_Addr++));            if(!ReadAck())                continue;   //收到应答(0),则继续发送数据               return 0;     //没收到应答,错误返回        }        break;    }       IIC_Stop();          //步骤8:主机发送停止信号,启动写周期    Delay(5000);         //需要延时一段时间,等待写周期完成    return 1;}
开发者ID:380121850,项目名称:MicroFlashFTLV2,代码行数:40,


示例15: IIC_Single_Write

/******************************************************************************  函数(模块)名称:unsigned char IIC_Single_Write(unsigned char W_addr,unsigned char Date_byte)  功能:	IIC总线单字节写  输入参数: 要写的地址,要写的数据        	              		  输出参数: 1 写成功 0 写失败         	 		   		   其它说明: *******************************************************************************/unsigned char IIC_Single_Write(unsigned char W_addr,unsigned char Date_byte){    unsigned char try_time=define_try_time; //用来定义出现通讯错误时尝试的错误    while(1)    {        if(!try_time--)    //用来防止因硬件错误或其它原因程序进入死循环        {           return 0;        }        IIC_Start();                           //步骤1:主机产生一个启动信号        IIC_Send_Byte(Slave_Addres&(~BIT0));   //步骤2:主机发送从机地址及读写位        if(ReadAck())          continue;        //步骤3:主机接收从机应答;没有应答,忽略下面语句,重新开始                           //应答,则开始发送地址        IIC_Send_Byte(W_addr);     //步骤4:主机发送读写地址        if(ReadAck())                   continue;               //步骤5:主机接收从机应答 没有应答,忽略下面语句,重新开始        IIC_Send_Byte(Date_byte); //步骤6:主机发送数据 //应答,则开始发送要写入的数据        if(ReadAck())     //步骤7:机接收从机应答          continue;      //没有应答,忽略下面语句,重新开始        break;           //应答,则跳出循环    }    IIC_Stop();          //步骤8:主机发送停止信号,启动写周期    Delay(5000);         //需要延时一段时间,等待写周期完成    return 1;}
开发者ID:380121850,项目名称:MicroFlashFTLV2,代码行数:33,


示例16: IIC_WriteData

//写数据,成功返回0,失败返回0xffint IIC_WriteData(u8 dev_addr,u8 reg_addr,u8 data){	IIC_Start();    	IIC_WriteBit(dev_addr);	if(IIC_WaitAck() == 0xff)    {        printf("error 2B/r/n");        return 0xff;    }    	IIC_WriteBit(reg_addr);	if(IIC_WaitAck() == 0xff)    {        printf("error 2C/r/n");        return 0xff;    }    IIC_WriteBit(data);    if(IIC_WaitAck() == 0xff)    {        printf("error 2D/r/n");        return 0xff;    }	IIC_Stop();    return 0;}
开发者ID:tete1030,项目名称:RM_Gimbal,代码行数:29,


示例17: IIC_ReadByte

/*********************************************************************************函    数: IIC_ReadByte**功    能: IIC读指定地址字节数据**参    数: Addr    --地址    **返    回: 接收的数据*******************************************************************************/u8 IIC_ReadByte(u8 Addr)         {          u8 data;    IIC_Start();    IIC_SendByte(DEVICE_ADDR);    IIC_WaitAck();    IIC_SendByte(Addr);     IIC_WaitAck();      IIC_Start();    IIC_SendByte(DEVICE_ADDR+1);    //ReadDeviceAddr    IIC_WaitAck();    data=IIC_GetByte();    IIC_NACK();    IIC_Stop();    return data;  }
开发者ID:feixingzhe9,项目名称:bestfu-dev-cube,代码行数:22,


示例18: main

void main(void) {  int i=0;  EnableInterrupts; /* enable interrupts */  /* include your code here */  InitClock();  IIC1_Init();  configIIC();  /*  IIC_Start();  IIC_write_byte(0x3D);  IIC_write_byte(0x03);  IIC_Stop();    */  //iic1=IIC_read_byte();    for(;;) {    IIC_Start();    IIC_write_byte(0x3C);    IIC_write_byte(0x03);    IIC_Stop(FALSE);    IIC_write_byte(0x3D);    while(i<6){            iic1=IIC_read_byte();      i++;    }    i=0;    IIC_Stop(FALSE);    //__RESET_WATCHDOG(); /* feeds the dog */  } /* loop forever */  /* please make sure that you never leave main */}
开发者ID:pmartinizq,项目名称:ProyectoFinal,代码行数:31,


示例19: IIC1_MultWrite

u8 IIC1_MultWrite(u8 slaveAddr, u8* pBuffer, u8 wrtieAddr, u16 NumByteToWrite){	IIC_Start();					  		//起始信号	IIC_Send_Byte(slaveAddr);   			//发送设备地址+写信号		if(FALSE==IIC_Wait_Ack())		{			IIC_Stop();                    	//发送停止信号			return 1;		}	IIC_Send_Byte(wrtieAddr);				//内部寄存器地址		IIC_Wait_Ack();	while(NumByteToWrite)	{		IIC_Send_Byte(*pBuffer);       		//内部寄存器数据				if(FALSE==IIC_Wait_Ack())		{			IIC_Stop();						//发送停止信号			return 1;		}		pBuffer++;		NumByteToWrite--;	} 										  		   	IIC_Stop();                    			//发送停止信号	return 0;}
开发者ID:dammstanger,项目名称:FCU_UCOSII150617,代码行数:26,


示例20: Single_Write_IIC

void Single_Write_IIC(u8 SlaveAddress,u8 REG_Address,u8 REG_data){    IIC_Start();                     IIC_SendByte(SlaveAddress);      IIC_SendByte(REG_Address);        IIC_SendByte(REG_data);           IIC_Stop();                   }
开发者ID:edisonlee102,项目名称:Balance_Robat,代码行数:8,


示例21: I2C_WriteByte

/******	busrt one byte via I2C	*****/void I2C_WriteByte(uint8_t SlaveAddress,uint8_t REG_Address,uint8_t REG_data){    IIC_Start();                  //起始信号    IIC_SendByte(SlaveAddress);   //发送设备地址+写信号    IIC_SendByte(REG_Address);    //内部寄存器地址, //请参考中文pdf22页     IIC_SendByte(REG_data);       //内部寄存器数据, //请参考中文pdf22页     IIC_Stop();                   //发送停止信号}
开发者ID:eastmoutain,项目名称:HummingBird,代码行数:9,


示例22: OLED_WrCmd

void OLED_WrCmd(unsigned char IIC_Command){	IIC_Start();	Write_IIC_Byte(0x78);            //Slave address,SA0=0	Write_IIC_Byte(0x00);			//write command	Write_IIC_Byte(IIC_Command);	IIC_Stop();}
开发者ID:shenzihao6,项目名称:myqudx,代码行数:8,


示例23: OLED_WrDat

void OLED_WrDat(unsigned char IIC_Data){	IIC_Start();	Write_IIC_Byte(0x78);	Write_IIC_Byte(0x40);			//write data	Write_IIC_Byte(IIC_Data);	IIC_Stop();}
开发者ID:shenzihao6,项目名称:myqudx,代码行数:8,


示例24: MPU6050_WirteByte

/***********************************************函数名:void MPU6050_WirteByte(u8 reg, u8 data)说明:MPU6050单次写字节入口:u8 reg		寄存器地址			u8 data		需要写入的字节出口:无备注:无***********************************************/void MPU6050_WirteByte(u8 reg, u8 data){	IIC_Start();	IIC_Send_Byte(MPU6050_DEVICE);		// 发送器件地址+写信号	IIC_Send_Byte(reg);					// 寄存器地址	IIC_Send_Byte(data);				// 需要写入的数据	IIC_Stop();}
开发者ID:huaqianlee,项目名称:Micro-Quadrotor,代码行数:16,


示例25: configIIC

void configIIC(void){  IIC_Start();  IIC_write_byte(0x3C);  IIC_write_byte(0x02);  IIC_write_byte(0x00);  IIC_Stop(TRUE);  }
开发者ID:pmartinizq,项目名称:ProyectoFinal,代码行数:8,


示例26: HAL_I2C_Start

void HAL_I2C_Start(void){#ifdef USE_I2C_OLD    I2C_Start();#else    IIC_Start();#endif}
开发者ID:reynoldxu,项目名称:DWM,代码行数:8,


示例27: IIC_ReadReg

alt_8 IIC_ReadReg(alt_u8 waddr, alt_u8 raddr, alt_u8 reg, alt_u8 *data){	IIC_Start();	IIC_PutByte(waddr);	IIC_NAKRTN;	IIC_PutByte(reg);	IIC_NAKRTN;	IIC_PutByte(0xff);	IIC_NAKRTN;	IIC_Start();	IIC_PutByte(raddr);	IIC_NAKRTN;	*data = IIC_GetByte();	IIC_Acknowledge(0);	IIC_Stop();	return 1;}
开发者ID:Summerslyb,项目名称:Simple-User-Interface,代码行数:17,


示例28: Write_IIC_Data

/**********************************************// IIC Write Data**********************************************/void Write_IIC_Data(unsigned char IIC_Data){   IIC_Start();   Write_IIC_Byte(0x78);			//D/C#=0; R/W#=0   Write_IIC_Byte(0x40);			//write data   Write_IIC_Byte(IIC_Data);   IIC_Stop();}
开发者ID:charliexp,项目名称:FireBLE,代码行数:11,


示例29: IIC_Start

//IIC写命令 -- 命令操作很少,对速度影响不大void CN_SSD1306::Write_IIC_Command(unsigned char IIC_Command){   IIC_Start();   Write_IIC_Byte(0x78);  //Slave address,SA0=0   Write_IIC_Byte(0x00);	//write command   Write_IIC_Byte(IIC_Command);   IIC_Stop();}
开发者ID:AlcaldeWetPlate,项目名称:Arduino-Dormitory-Assistant,代码行数:9,


示例30: IIC_Read_One_Byte

u8 IIC_Read_One_Byte(u8 daddr,u8 addr){	u8 temp;	IIC_Start();	IIC_Send_Byte(daddr);//器件地址+写信号	IIC_Wait_Ack();		IIC_Send_Byte(addr);//寄存器	IIC_Wait_Ack();		IIC_Start(); 	IIC_Send_Byte(daddr+1);//器件地址+读信号	IIC_Wait_Ack();		temp = IIC_Read_Byte(0);	IIC_Stop();	return temp;}
开发者ID:zhengchangsi,项目名称:RuiSa,代码行数:18,



注:本文中的IIC_Start函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ IIC_Stop函数代码示例
C++ II函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。