返回列表 发帖

适合单片机初学者的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口全部引出,方便扩展实验及测试

神马都是浮云!

TOP

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

TOP

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

TOP

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

TOP

好帖子,向楼主致敬!~

TOP

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

TOP

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

TOP

好帖子,向楼主致敬!~

TOP

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

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

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

TOP

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

TOP

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

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

TOP

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

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

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

数码管简介

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

/*选择数码管显示字符*/
#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

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

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

串口通信简单

相应的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

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

电路板很漂亮!!

TOP

不顶不行,非常不错!

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

本帖最后由 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

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

TOP

返回列表

最新关注 关闭


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

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


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

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

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

GMT+8, 2024-4-20 17:27, Processed in 1.051658 second(s), 6 queries, Gzip enabled.