返回列表 发帖

适合单片机初学者的aTmega16学习板

atmega16.jpg
此板是一块非常适合单片机初学者的学习板,我先将此板的一些功能先大致的介绍一下,具体的每个功能我们近期将会推出,请各位学者多多关注,当然,也希望各位学者说出自己的见解。

1、DS18B20温度检测芯片(单总线方式实现)

2、1路A/D(电位器模拟实现)

3、DS1302实时时钟

4、1路串口(max3232实现)

5、3*3点阵键盘


6、1个无源蜂鸣器(以脉冲驱动)
7、1个直流小电机
8、4位共阳动态扫描LED数码管
9、5个LED灯
另:所有IO口全部引出,方便扩展实验及测试

板子非常不错!希望可以斑竹尽快把相关原理图PDF文件、有关学校资料上传过来,以便广大学习爱好者共享。

TOP

为了让初学者更容易上手,更好的学习画原理图、做PCB板,我将在这里公布atmega 16学习板的原理图和封装库。 aTmega 16.pdf (91.83 KB) atmega16封装库.rar (6.56 KB)

TOP

本帖最后由 sujin5 于 2010-10-15 13:28 编辑

为了让各位学习atmega 16板的朋友更方便的学习,我在网上找来了atmega 16的中文手册及板子上其他所用到的芯片手册,放在这方便大家提起: atmega16-16L.pdf (2.78 MB) 18B20温度传感器中文资料.pdf (2.28 MB) DS1302中文资料.pdf (265.4 KB) MAX232中文资料.pdf (568.75 KB) MAX3232中文资料.pdf (770.03 KB)

TOP

本帖最后由 sujin5 于 2010-10-14 22:12 编辑

5路流水灯简介

由图可知要想点亮对应的LDE的话,I/O口需输出一个低电平

5路流水灯实验程序如下:

#define ALL_ON {PORTA&=0X1F;ORTC&=0XFC;}
    #define ALL_OFF {PORTA|=~0X1F;ORTC|=~0XFC;}
    #define LED1_ON PORTA&=0XDF

#define LED2_ON PORTA&=0XBF

#define LED3_ON PORTA&=0X7F

#define LED4_ON PORTC&=0XFD

#define LED5_ON PORTC&=0XFE

#define LED1_OFF PORTA|=~0XDF

#define LED2_OFF PORTA|=~0XBF

#define LED3_OFF PORTA|=~0X7F

#define LED4_OFF PORTC|=~0XFD

#define LED5_OFF PORTC|=~0XFE

void Gpio_Init(void)
{

   DDRA|=0XE0;
   PORTA&=0X1F;
   DDRC|=0X03;
   PORTC&=0XFC;
}

void led (void)
{
   LED1_ON;
   delay_nms(200);

LED2_ON;
   delay_nms(200);
   LED3_ON;
   delay_nms(200);
   LED4_ON;
   delay_nms(200);
   LED5_ON;
   delay_nms(200);
   LED1_OFF;
   delay_nms(200);
   LED2_OFF;
   delay_nms(200);
   LED3_OFF;
   delay_nms(200);
   LED4_OFF;
   delay_nms(200);
   LED5_OFF;
   delay_nms(200);
}



TOP

不顶不行,非常不错!

TOP

电路板很漂亮!!

TOP

3*3矩阵键盘简介

具体的实现方法我将在下面的软件代码里说明:


#define  GET_L1  !(PINC&0X04)
#define  GET_L2  !(PINC&0X08)
#define  GET_L3  !(PINC&0X10)
#define  GETS  GET_L1|GET_L2|GET_L3
void delay_nms(int a);

int GET_S1=0,GET_S2=0,GET_S3=0,GET_S4=0,GET_S5=0,GET_S6=0,GET_S7=0,GET_S8=0,GET_S9=0;
void GETS_INIT(void)
{
   GET_S1=0;
  GET_S2=0;
  GET_S3=0;
  GET_S4=0;
  GET_S5=0;
  GET_S6=0;
  GET_S7=0;
  GET_S8=0;
  GET_S9=0;
}
void key(void)
{
   PORTC&=0X1F;   //设置输出PC5,6,7为低
  if(GETS)
   delay_nms(5);
  if(GETS)     //如果输入时PC2,3,4为低,即有按键被按下           
  {
    if(GET_L1)       //如果输入时PC3为低,即第二列有按键被按下
   {
   PORTC|=0XC0;
   PORTC&=0XDF; //设置输出PC5为低,PC6,7为高
      if(GET_L1)     
      {
        GET_S1=1;     //S4键按下
      }
      else if(!GET_L2)
      {
     PORTC&=0X1F;
      PORTC|=0XA0;
    PORTC&=0XBF;    //设置PC6低,PC5,7为高
      if(GET_L1)   
      {
           GET_S2=1;    //S5键按下了
      }
      else if(!GET_L1)
      {
           GET_S3=1;      //S6键按下了
      }
   }
     }
   if(GET_L2)       //如果输入时PC3为低,即第二列有按键被按下
   {
   PORTC|=0XC0;
   PORTC&=0XDF; //设置输出PC5为低,PC6,7为高
      if(GET_L2)     
      {
        GET_S4=1;     //S4键按下
      }
      else if(!GET_L2)
      {
     PORTC&=0X1F;
      PORTC|=0XA0;
    PORTC&=0XBF;    //设置PC6低,PC5,7为高
      if(GET_L2)   
      {
           GET_S5=1;    //S5键按下了
      }
      else if(!GET_L2)
      {
           GET_S6=1;      //S6键按下了
      }
   }
     }
  
   if(GET_L3)       //如果输入时PC4为低,即第三列有按键被按下
   {
   PORTC|=0XC0;
   PORTC&=0XDF; //设置输出PC5为低,PC6,7为高
      if(GET_L3)
      {
        GET_S7=1;     //S7键按下
      }
      else if(!GET_L3)     
      {
     PORTC&=0X1F;
      PORTC|=0XA0;
    PORTC&=0XBF;    //设置PC6低,PC5,7为高
      if(GET_L3)   
      {
           GET_S8=1;    //S8键按下了
      }
      else if(!GET_L3)   
      {
           GET_S9=1;    //S9键按下了
      }
   }
     }
}
}

TOP

串口通信简单

相应的MAX232引脚上的电容和TX,RX的接法大家可以参照一下。我们的串口是以直连的方式连接的。下面我把我们的串口通信程序和大家分享下:


/********************************************************************
*  函数库说明:RS232总线驱动函数库                                  *
*  版本说明:  1.0 Bate                                             *
*  作者:      andylee                                              *
*  日期:      2006年7月                                            *
*  平台:      mega16  16M                                          *
*  说明:      为上层提供RS232的基本读写函数                        *
********************************************************************/
#define F_CPU       16000000                     // 16MHz processor
#define UART_DEFAULT_BAND_RATE     19200           //default baud rate for UART
unsigned char receive_data=0;

/*************************************
*  函数说明:串口接收中断            *
*  输入:无                          *
*  输出:无                          *
************************************/
#pragma interrupt_handler RX_ISR:12
void RX_ISR(void)      
{
  unsigned char comm_tempRec;
  comm_tempRec=UDR;
  receive_data= comm_tempRec;
}
/*************************************
*  函数说明:波特率设置函数          *
*  输入:波特率                      *
*  输出:无                          *
*************************************/
void uartSetBaudRate(unsigned long  baudrate)
{
    unsigned int baudratDiv;

    baudratDiv = (F_CPU/(baudrate*16L)-1);
    UBRRH=(unsigned char)(baudratDiv>>8);
    UBRRL=(unsigned char)baudratDiv;
}
/*************************************
*  函数说明:串口化函数              *
*  输入:无                          *
*  输出:无                          *
*************************************/
void uartInit(void)
{
   UCSRA=0X00;
   //enable RxD/TxD and interrupts
   //UCSRB|=(1<<RXCIE)|(0<<TXCIE)|(1<<RXEN)|(1<<TXEN);
   UCSRB=0XD8;
   //设置波特率
   uartSetBaudRate(UART_DEFAULT_BAND_RATE);
   
   //设置帧格式: 8 个数据位, 2 个停止位
   //UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
   UCSRC=0X86;
   UCSRB|=0X80;
   SEI();
}

/************************************
*  函数说明:查询方式发送一个字节    *
*  输入:无                          *
*  输出:无                          *
*************************************/
void uartSendByte(unsigned char txData)
{
    while(!(UCSRA&(1<<UDRE)));
    // send byte
    UDR=txData;
}
/*************************************
*  函数说明:串口接收例程            *
*  输入:无                          *
*  输出:接受到的数据                *
*************************************/
unsigned char uartReceiveService(void)
{
    unsigned char c;
    c=UDR;
    uartSendByte(c);
    return UDR;
}
/*************************************
*  函数说明:查询方式串口接收例程    *
*  输入:无                          *
*  输出:无                          *
*************************************/
unsigned char uart_receive( void )
{
unsigned char c;
/* 等待接收数据*/
while ( !(UCSRA & (1<<RXC)) )
{
//rst_wdog();
}
/* 从缓冲器中获取并返回数据*/
c=UDR;
//uartSendByte(c);
return c;
}

TOP

直流小电机简介

当输出高电平时驱动,对应的程序代码如下:

void Motor_Init(void)
{
   DDRD|=0X40;
  PORTD&=0XBF;
void motor_go(void)
{
   PORTD=0X40;//开启小电机
}
void motor_stop(void)
{
   PORTD=0X00;//关闭小电机
}




蜂鸣器简介

由原理图上同样可以看出,当输出高电平时蜂鸣器响,对应的程序代码如下:
int mortor=1;
void speak_up(void)
{
   PORTD|=0X80;
}
void speak_down(void)
{
   PORTD&=0X7F;
}
void speak_go(void)
{  
  mortor=1;
  while(mortor)
  {
     speak_up();
  LED1_ON;
    delay_nus(300);
    speak_down();
  LED1_OFF;
    delay_nus(300);
  key();
  if(GET_S2)
  {
    mortor=0;
  }
  }
}
void speak_stop(void)
{
   mortor=0;
}

TOP

呵呵,对于初学AVR单片机的人而言,这个板子不错,资料也全。

TOP

数码管简介

我们采用的是共阳数码管,我会在下面给出我们所做的对应的程序代码:

/*选择数码管显示字符*/
#define CHOICE4  PORTA=0XFE
#define CHOICE3  PORTA=0XFD
#define CHOICE2  PORTA=0XFB
#define CHOICE1  PORTA=0XF7
#define CHOICEALL  PORTA=0XF0
#define CHOICENOCE  PORTA=0XFF
/*数码管显示不同的字符*/
#define SMALL_OFF  PORTB=0XFF
#define SMALL_ON  PORTB=0X00  
#define SET_0  PORTB=0x14
#define SET_1  PORTB=0XD7
#define SET_2  PORTB=0X4C
#define SET_3  PORTB=0X45
#define SET_4  PORTB=0X87
#define SET_5  PORTB=0X25
#define SET_6  PORTB=0X24
#define SET_7  PORTB=0X57
#define SET_8  PORTB=0X04
#define SET_9  PORTB=0X05
#define SET_A  PORTB=0X06
#define SET_B  PORTB=0XA4
#define SET_C  PORTB=0X3C
#define SET_D  PORTB=0XC4
#define SET_E  PORTB=0X2C
#define SET_F      PORTB=0X2E
void Smled_Init(void)
{
   DDRA|=0X0F;
  PORTA&=0XFF;
  DDRB=0XFF;
  PORTB=0X00;
}
void SET_led(int n,char m)   //第n个数码管 显示m
{
SMALL_OFF;
switch(n)
{
  case 1:CHOICE1;break;
  case 2:CHOICE2;break;
  case 3:CHOICE3;break;
  case 4:CHOICE4;break;
  default : SMALL_ON;
}
switch(m)
{   
  case '0':SET_0;break;
  case '1':SET_1;break;
  case '2':SET_2;break;
  case '3':SET_3;break;
  case '4':SET_4;break;
  case '5':SET_5;break;
  case '6':SET_6;break;
  case '7':SET_7;break;
  case '8':SET_8;break;
  case '9':SET_9;break;
  case 'A':SET_A;break;
  case 'B':SET_B;break;
  case 'C':SET_C;break;
  case 'D':SET_D;break;
  case 'E':SET_E;break;
  
  
  case 'F':SET_F;break;
  default : SMALL_ON;
}

   
}
void SET_all(char a,char b,char c,char d)    //  在数码管上显示一串字符
{
SET_led(1,a);
  delay_nms(2);
SET_led(2,b);
  delay_nms(2);
SET_led(3,c);
  delay_nms(2);
SET_led(4,d);
  delay_nms(2);
}

TOP

DS18b20温度传感器简介

采集外部温度,通过A/D模数转换把采集到的温度显示在数码管上,下面是对应的程序代码:
//PD5至低         
#define  CLR_DS18B20  PORTD&=~(1<<PD5)   
//PD5至高
#define  SET_DS18B20  PORTD|=(1<<PD5)      
//读PD5
#define  STU_DS18B20  STU_DS18B20_R()  
unsigned char  STU_DS18B20_R(void)
{
  unsigned char  a;
  //DDRD&=0XDF;
//delay_nus(100);
a=PIND;
//DDRD|=0X20;
a&=0x20;

return a;
}

BYTE resetDS18B20(void)
{
BYTE errTime=0;
unsigned char a=0;
RLS_DS18B20();  //释放总线,总线自动上拉
delay_nus(2);
HLD_DS18B20();   //Maga16控制总线
CLR_DS18B20;   //强制拉低
delay_nus(210);  //209.42us
delay_nus(210);  //209.42us
delay_nus(184);  //83.28us
//以上的三个延时大于480us
RLS_DS18B20();  //释放总线,总线自动上拉

while(STU_DS18B20)
{
  delay_nus(6);
  //Delay(6);   //5.15us
  errTime++;
  if(errTime>20)
  return(0xbb);  //如果等带大于约 5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
}
errTime=0;
while(!(STU_DS18B20))
{
  delay_nus(6);
  //Delay(6);   //5.15us
  errTime++;
  if(errTime>50)
  return(0xcc);  //如果等带大于约 5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
}
return(0xAA);
}

/**********************************************************************
functionName: BYTE readByteDS18B20(void)
description :读DS18B20一个字节
**********************************************************************/
BYTE readByteDS18B20(void)
{
BYTE i;
BYTE retVal=0;
RLS_DS18B20();  //释放总线
for(i=8;i>0;i--)
{
   retVal>>=1;
     HLD_DS18B20(); //控制总线
  CLR_DS18B20; //强制拉低
  delay_nus(2);
  //Delay(2);   //延时大于1us
   
  RLS_DS18B20();  //释放总线,DS18B20会将总线强制拉低
  delay_nus(2);
  //Delay(2);
  if(STU_DS18B20)
  retVal|=0x80;
  delay_nus(15);
  delay_nus(15);
// Delay(15);   //14.92us
// Delay(15);   //14.92us
  RLS_DS18B20();  //释放总线
  delay_nus(30);
// Delay(30);   //30.38us
}
delay_nus(2);
// Delay(3);    //2.71us(大于1us就行了)
return(retVal);
}

/**********************************************************************
functionName: BYTE readByteDS18B20(void)
description :写DS18B20一个字节
**********************************************************************/
void writeByteDS18B20(BYTE wb)
{
BYTE i;
BYTE temp;
SET_DS18B20;  //释放总线
for(i=0;i<8;i++)
{
  HLD_DS18B20();  //Maga16控制总线
  CLR_DS18B20;  //强制拉低
  delay_nus(2);     //15us
  temp=wb>>i;
  temp&=0x01;
  if(temp) // !temp
  //RLS_DS18B20();  //释放总线
  SET_DS18B20;
  else
  CLR_DS18B20;  //强制拉低
  delay_nus(30);   //15us
  delay_nus(30);     //31us
  SET_DS18B20;  //释放总线
  delay_nus(2);     //2us

}
//SysTickDelay(2);
// Delay(2);
}

/**********************************************************************
functionName: unsigned int readTempDS18B20(void)
description :读DS18B20温度
**********************************************************************/
unsigned int readTempDS18B20(void)
{
BYTE tempL,tempH;
WORD x=0;
resetDS18B20();
writeByteDS18B20(0xcc);  //跳过ROM
writeByteDS18B20(0x44);  //启动温度转换


delay_nms(800);

// Delay(1);
resetDS18B20();
writeByteDS18B20(0xcc);  //跳过ROM
writeByteDS18B20(0xbe);  //读数据
tempL=readByteDS18B20();
tempH=readByteDS18B20();
x=(tempH<<8)|tempL;
return(x);
}
void HLD_DS18B20(void)
{
DDRD|=(1<<PD5);//PD5输出
}
void RLS_DS18B20(void)
{
DDRD&=~(1<<PD5);//PD5输入
}

TOP

实时时钟简介

采用三线接口与CPU进行同步通信,下面我将给出我们板子对应的程序代码:


#ifndef DS1302_H
#define DS1302_H
unsigned char year=0;
unsigned char month=0;
unsigned char day=0;
unsigned char hour=0;
unsigned char minute=0;
unsigned char second=0;
#define ds1302_rst PD4
#define ds1302_io PD3
#define ds1302_sclk PD2
#define set_ds1302_rst_ddr() DDRD|=1<<ds1302_rst
#define set_ds1302_rst()  PORTD|=1<<ds1302_rst
#define clr_ds1302_rst()  PORTD&=~(1<<ds1302_rst)
#define set_ds1302_io_ddr()  DDRD|=1<<ds1302_io
#define set_ds1302_io()   PORTD|=1<<ds1302_io
#define clr_ds1302_io()   PORTD&=~(1<<ds1302_io)
#define clr_ds1302_io_ddr()  DDRD&=~(1<<ds1302_io)
#define in_ds1302_io()   PIND&(1<<ds1302_io)
#define set_ds1302_sclk_ddr() DDRD|=1<<ds1302_sclk
#define set_ds1302_sclk()  PORTD|=1<<ds1302_sclk
#define clr_ds1302_sclk()  PORTD&=~(1<<ds1302_sclk)
#define ds1302_sec_reg  0x80
#define ds1302_min_reg  0x82
#define ds1302_hr_reg  0x84
#define ds1302_date_reg  0x86
#define ds1302_month_reg 0x88
#define ds1302_day_reg  0x8a
#define ds1302_year_reg  0x8c
#define ds1302_control_reg 0x8e
#define ds1302_charger_reg 0x90
#define ds1302_clkburst_reg 0xbe
#define uchar unsigned char
//==================================================================
//函数声明
void ds1302_write(uchar reg,uchar data);
uchar ds1302_read(uchar reg);
uchar check_ds1302(void);
void ds1302_read_time(void);
void ds1302_write_time(void);
#endif

/********************************************************************
*  函数说明:给寄存器写一个字节数据                                 *
*  输入:reg,data                                                   *
*  输出:无                                                         *
********************************************************************/
void ds1302_write(uchar reg,uchar data)
{
uchar i=0;
set_ds1302_io_ddr();
asm("nop");
asm("nop");
clr_ds1302_rst();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
set_ds1302_rst();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{  
  if(reg&0x01) set_ds1302_io();
  else clr_ds1302_io();
  asm("nop");
  asm("nop");
  set_ds1302_sclk();
  asm("nop");
  asm("nop");
  clr_ds1302_sclk();
  asm("nop");
  asm("nop");
  reg>>=1;
}
for(i=8;i>0;i--)
{  
  if(data&0x01) set_ds1302_io();
  else clr_ds1302_io();
  asm("nop");
  asm("nop");
  set_ds1302_sclk();
  asm("nop");
  asm("nop");
  clr_ds1302_sclk();
  asm("nop");
  asm("nop");
  data>>=1;
}
clr_ds1302_rst();
asm("nop");
asm("nop");
clr_ds1302_io_ddr();
asm("nop");
asm("nop");
}
/********************************************************************
*  函数说明:读寄存器写一个字节数据                                 *
*  输入:reg                                                        *
*  输出:data                                                       *
********************************************************************/
uchar ds1302_read(uchar reg)
{
uchar data=0;
uchar i=0;
reg+=1;//读标志
set_ds1302_io_ddr();
asm("nop");
asm("nop");
clr_ds1302_rst();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
set_ds1302_rst();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
  
  if(reg&0x01) set_ds1302_io();
  else clr_ds1302_io();
  asm("nop");
  asm("nop");
  set_ds1302_sclk();
  asm("nop");
  asm("nop");
  clr_ds1302_sclk();
  asm("nop");
  asm("nop");
  reg>>=1;
}
clr_ds1302_io_ddr();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
  data>>=1;
  if(in_ds1302_io()) data|=0x80;
  asm("nop");
  asm("nop");
  set_ds1302_sclk();
  asm("nop");
  asm("nop");
  clr_ds1302_sclk();
  asm("nop");
  asm("nop");
}
clr_ds1302_rst();
asm("nop");
asm("nop");
return(data);
}
/********************************************************************
*  函数说明:                                                       *
*  输入:                                                           *
*  输出:                                                           *
********************************************************************/
uchar check_ds1302(void)
{
    ds1302_write(ds1302_control_reg,0x80);
    if(ds1302_read(ds1302_control_reg)==0x80) return 1;
    return 0;
}
/********************************************************************
*  函数说明:读时钟芯片的时间数据                                   *
*  输入:                                                           *
*  输出:无                                                         *
********************************************************************/
void ds1302_read_time(void)
{
year=ds1302_read(ds1302_year_reg); //年
month=ds1302_read(ds1302_month_reg);//月
day=ds1302_read(ds1302_date_reg); //日
//week=ds1302_read(ds1302_day_reg); //周
hour=ds1302_read(ds1302_hr_reg); //时
minute=ds1302_read(ds1302_min_reg); //分
second=ds1302_read(ds1302_sec_reg); //秒
}
/********************************************************************
*  函数说明:初始化时钟内容                                         *
*  输入:                                                           *
*  输出:无                                                         *
********************************************************************/
void ds1302_write_time(void)
{
ds1302_write(ds1302_control_reg,0x00);     //关闭写保护
ds1302_write(ds1302_sec_reg,0x80);      //暂停  
//ds1302_write(ds1302_charger_reg,0xa9);     //涓流充电
ds1302_write(ds1302_year_reg,0x10);      //年
ds1302_write(ds1302_month_reg,0x09);  //月
ds1302_write(ds1302_date_reg,0x29);   //日
//ds1302_write(ds1302_day_reg,0x06);    //周
ds1302_write(ds1302_hr_reg,0x16);   //时,xiawu 1
ds1302_write(ds1302_min_reg,0x21);      //分
ds1302_write(ds1302_sec_reg,0x58);      //秒
ds1302_write(ds1302_control_reg,0x80);  //打开写保护
}
/* 调用的相关说明
  clr_ds1302_rst();//时钟芯片的初始化及设定
  set_ds1302_rst_ddr();
  clr_ds1302_io();
  clr_ds1302_io_ddr();
  clr_ds1302_sclk();
  set_ds1302_sclk_ddr();
  //ds1302_write_time();//初始化时间
*/

TOP

这是我们上面的学习板所要用到的双龙下载软件,我在这与大家分享下
SLISP_V142.rar (1.65 MB)

TOP

本帖最后由 sujin5 于 2010-12-5 13:40 编辑

iccavr中文使用说明.pdf (139.49 KB)
iccavr6.31A.rar (4.57 MB)

TOP

串口调试助手.rar (115.79 KB)

TOP

本帖最后由 sujin5 于 2010-11-25 17:38 编辑

在AVRStudio中建AVRGcc工程.pdf (310.03 KB)     /****AVR Studio 4最好装在默认路径,否则可能不能用****/

在AVRStudio中建AVRGcc工程.pdf (310.03 KB)

TOP

好帖子,向楼主致敬!~

TOP

非常不错,这个分项,现在基本资料齐全。对楼主表示感谢。

TOP

楼主说的即是,支持楼主。

TOP

好帖子,向楼主致敬!~

TOP

學習板上的規劃與整體佈置很合理, 很有特點,很喜歡. ^-^
使用與學習板一起購買的 併口ISP ,一上電就可正常使用,實在很經濟. ^-^
搭配使用 ICC AVR 4 + PROGISP 1.6.7 簡單好用 ^-^
好東西要與好朋友分享~~

TOP

这个真的比较适合初学者,我也是初学者,这个资料入门真的不错!楼主,多谢了!

TOP

今天拿出以前購買但無法使用的一堆板子,用了這個剛買的併口編程器一下就瀆到 fuse.
強力推薦..

TOP

返回列表

最新关注 关闭


关于论坛注册,最新修改,请网友们注意

由于最近大量垃圾信息出现在我们的论坛,为了营造一个良好的氛围,目前论坛只开发邀请注册,你可以点击以下链接自动邀请注册(如果有人使用了点击下一个试一试) ...


查看
珩源工控论坛热诚欢迎您联系我们进行合作!

Powered by Discuz! 7.2© 2001-2009 Comsenz Inc.

珩源工控论坛 ( 桂ICP备19004328号) |论坛统计|WAP| 客服中心-www.hymcu.com
  

GMT+8, 2024-4-28 04:15, Processed in 1.061967 second(s), 6 queries, Gzip enabled.