搜索
bottom↓
回复: 99

来这里不长收获不少,感谢阿莫,特贡献AT90CAN128全部代码工作程序,也接受大家的问题!

[复制链接]

出0入0汤圆

发表于 2006-6-7 08:30:40 | 显示全部楼层 |阅读模式
第一个是CAN128的初始化程序:





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

//-----------------------------------------------------------------------------|

// 初始化 :MCU 时钟,端口方向 ,USART1 波特率 ,CAN控制器 ,看门狗 ,TCC1     |

// CAN控制器 0# ,4# 信箱中断接收 ,1#、2#、3# 信箱发送数据                     |

// 定时器 TCC1 做CAN数据一秒内达到判断,1秒内无数据报警                        |

//-----------------------------------------------------------------------------|



void mcu_init(void)

{

  //----------------watch dog init ---------------

  WDTCR = (1<<WDCE) | (1<<WDE);                                                 //2行看门狗初始化

  WDTCR = 0x0f;                                                                 //0x1c=0.25s    0x1d=0.5s

  __watchdog_reset();                                                           //喂狗



//-------------------CLK INITIAL-----------------

  CLKPR = 128;

  CLKPR = 0;

//-------------------prot init-------------------

  DDRC  = 0xff;                                                                 //端口设置:PC设置为推挽1输出

  PORTC = 0xfe;

  DDRA  = 0x00;                                                                 //端口设置:PA设置为输入



//---------------- MCU interrupt ----------------

  SREG = 0x00;                                                                  //关全局中断; 0x80开全局中断



//-----------------usart 1 INITIAL---------------

  UBRR1 =25;                                                                    //USART1 波特率设置9600 X 16M-"103",

                                                                                //38400bpsX16M=25;

  UCSR1B=(1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1);                                     //使能接收 & 使能发送 & 使能接收中断

  UCSR1C=(1<<UCSZ10)|(1<<UCSZ11);                                               //0x06 8位数据,1位停止位,无校验 */



//----------------CAN_REG INITIAL----------------

  CANGCON |= (1<<SWRES);                                                        //CAN控制器软复位

  CANBT1 = 0x06;                                                                //设置波特率分频因子16MHz,16TQ,250k,=4=3+1,3

  CANBT2 = 0x0c;                                                                //同步段为1“0x0n”传播段=7=6+1

  CANBT3 = 0x37;                                                                //相位缓冲PH2=4=3+1,PH1=4=3+1

  CANTCON = 0xff;



//--------------can_MOB INITIAL-------------------

//MOB0=RX[CMD]    接收上位机发来的指令       格式:3,0,0,177,239,33

  CANPAGE  = 0x00;                                                              //MOB0,自动增量,初值为0

  CANSTMOB = 0;

  CANCDMOB = 0x18;                                                              //can2B,DLC=8

  CANIDT4 = 0x08;                                                               // 00001 0xx

  CANIDT3 = 0x79;                                                               // 01111 001              33

  CANIDT2 = 0x8f;                                                               // 10001 111             239

  CANIDT1 = 0x65;                                                               // 01100 101             177



  CANIDM4  = 0xfc;                                                              //                             11111 100

  CANIDM3  = 0xff;                                                              //                             11111 111

  CANIDM2  = 0xff;                                                              //                             11111 111

  CANIDM1  = 0x07;                                                              //CANIDM4-1数据校验屏蔽寄存器  00000 111



//MOB1=TX[STA1]  向上位机报告状态组1          6,0,0,178,239,33

  CANPAGE = 0x10;

  CANSTMOB = (1<<TXOK);

  CANCDMOB = 0x18;

  CANIDT4 = 0x08;                                                               // 00001 000

  CANIDT3 = 0x79;                                                               // 01111 001              33

  CANIDT2 = 0x97;                                                               // 10010 111             239

  CANIDT1 = 0xc5;                                                               // 11000 101             178



//MOB2=TX[STA2]  向上位机报告状态组2          6,0,0,179,239,33

  CANPAGE = 0x20;

  CANSTMOB = (1<<TXOK);

  CANCDMOB = 0x18;

  CANIDT4 = 0x08;                                                               // 00001 000

  CANIDT3 = 0x79;                                                               // 01111 001              33

  CANIDT2 = 0x9f;                                                               // 10011 111             239

  CANIDT1 = 0xc5;                                                               // 11000 101             179



//MOB3=RX[2#servo]                            7,0,0,100,101,100

  CANPAGE  = 0x30;                                                              //MOB3,自动增量,初值为0

  CANSTMOB = 0;

  CANCDMOB = 0x18;                                                              //can2B,DLC=8

  CANIDT4 = 0x20;                                                               // 00100 000

  CANIDT3 = 0x2b;                                                               // 00101 011           100

  CANIDT2 = 0x23;                                                               // 00100 011           101

  CANIDT1 = 0xe3;                                                               // 11100 011           100

  CANIDM4  = 0xfc;                                                              //                             11111 100

  CANIDM3  = 0xff;                                                              //                             11111 111

  CANIDM2  = 0xff;                                                              //                             11111 111

  CANIDM1  = 0x07;                                                              //CANIDM4-1数据校验屏蔽寄存器  00000   111



//MOB4=TX[2#servo]                            7,0,0,101,100,100

  CANPAGE = 0x40;

  CANSTMOB = (1<<TXOK);

  CANCDMOB = 0x18;

  CANIDT4 = 0x20;                                                               // 00100 000

  CANIDT3 = 0x23;                                                               // 00100 011           101

  CANIDT2 = 0x2b;                                                               // 00101 011           100

  CANIDT1 = 0xe3;                                                               // 11100 011           100



  CANGIE |= ((1<<ENIT) + (1<<ENRX));                                            //开全局中断 和 接收中断

  CANIE2 |= 0x09;                                                               //开MOB3 & MOB0信箱接收中断(接收邮箱)

  CANPAGE  = 0x00;

  CANCDMOB |= 0x80;                                                             //MOB0接收使能

  CANPAGE  = 0x30;

  CANCDMOB |= 0x80;                                                             //MOB3接收使能

  CANGCON |= 0x02;                                                              //CAN控制器启动





/*

//-------------TCC1定时器初始化-----------------

  TCCR1A = 0x00;                                                                //设置工作模式和分频因子

  TCCR1B = 0x04;                                                                // T=CLK/1024  0x04=1s  0x05=4s

  TCCR1C = 0x00;

  TIMSK1 = 0x01;                                                                // 允许溢出中断

  TCNT1 = 0x0000;                                                               //初始化计数器值,在程序中更改相应数值可以更改中断时间

*/

//-------------------ADC初始化------------------

  ADCSRA = 0x8c;                                                                //使能ADC单元,单次,允许中断,16分频(1MHzADC时钟)

  ADMUX = 0x40;                                                                 //AVcc参考电源,右对齐,未指定输入源



  __watchdog_reset();                                                           //喂狗



  SREG = 0x80;                                                                  //开全局中断

}

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

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

出0入0汤圆

 楼主| 发表于 2006-6-7 08:35:07 | 显示全部楼层
第二个中断接收程序, 一秒无接收信号报警标志中断程序:





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

//定时器1秒(约)中断函数,用于监视上位机指令到达是否正确。

#pragma vector = TIMER1_OVF_vect

__interrupt void TIMER1_OVF(void)

{

  M_err_flg = 1;                           //报告:上位机CAN通信异常

}





//-----------------------------------------------------------------------------





//中断函数     接收CAN数据帧 并 存入数据单元组

//**********************************************************

#pragma vector=CANIT_vect

__interrupt void CAN_INTERRUPT(void)

{

  uchar i = 1, num_i;

  CANGIE &= ~(1<<ENRX);                  //关接收中断****

  num_i = CANSIT2;





//-----------------------------------------------------

    if (num_i & (1<<SIT0))

  {



    i=0;

    TCNT1 = 0x0000;                        //重启定时监视器

    CANPAGE = i<<4;

    for(num_i = 0; num_i < 8; num_i++)

    {

      can_data[num_i]=CANMSG;           //取得8个字节的数据

    }

  }

//------------------------------------------------------

  if (num_i & (1<<SIT3))

  {

    i=3;

    CANPAGE = i<<4;

    for(num_i = 0; num_i < 8; num_i++)

    {

      can_data[num_i]=CANMSG;           //取得8个字节的数据

    }

  }

//------------------------------------------------------

    CANPAGE = 0x00;

    CANSTMOB &= ~(1<<RXOK);                //清中断标志****

    CANCDMOB = 0x98;                      //接收使能

    CANPAGE = 0x30;

    CANSTMOB &= ~(1<<RXOK);                //清中断标志****

    CANCDMOB |= 0x98;                      //接收使能

    CANGIE |= (1<<ENRX);                   //开中断





}

出0入0汤圆

 楼主| 发表于 2006-6-7 08:38:15 | 显示全部楼层
CAN发送子程序:



//CAN数据帧发送



void MOB_send (uchar n)

{

  CANGIE &= ~(1<<ENRX);

  uint i;



  CANPAGE = (n<<4);                              //MOB_n, auto increment, index 0

  if (CANSTMOB & (1<<TXOK))

  {

// CANCDMOB= 0x18;

  CANSTMOB &= ~(1<<TXOK);

  for(i = 0; i < 8; i++) CANMSG = can_data[n];



  CANCDMOB = 0x58;                               //帧发送

  CANGIE |=(1<<ENRX);

  }

}

出0入0汤圆

 楼主| 发表于 2006-6-7 08:44:09 | 显示全部楼层
主程序中读取中断接收到的CAN数据的程序段,只是介绍下实现方法:



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

//-------------------读取 主机CAN 数据-------------------

    CANGIE &= ~(1<<ENRX);                  //关CAN接收中断

    CANPAGE = 0x00;

    CANCDMOB = 0x00;

    CANPAGE = 0x30;

    CANCDMOB = 0x00;





spd = ((can_data[0][0]<<8)  + can_data[0][1]) / 8;     //速度指令(单位 0.125)

spd = spd * 5 / 3;                        //指令频率(单位 50 / 30 @4 poles)

p_trk = (can_data[0][2]<<8) + can_data[0][3];                    //正转矩

n_trk = (can_data[0][4]<<8) + can_data[0][5];                     //负转矩

for (i = 0; i < 8; i++) s_sv = can_data[3];                //伺服



    CANPAGE = 0x00;

    CANCDMOB = 0x98;

    CANPAGE = 0x30;

    CANCDMOB = 0x98;

    CANGIE |= 1<<ENRX;                                     //开CAN接收中断

出0入0汤圆

发表于 2006-6-7 08:45:21 | 显示全部楼层
我顶你!!谢谢,虽然我还没能力看懂!

出0入0汤圆

 楼主| 发表于 2006-6-7 08:52:57 | 显示全部楼层
比我的积分高啊,厉害!我先去饭饭了,一会再来。

出0入0汤圆

发表于 2006-6-7 08:53:02 | 显示全部楼层
收藏啦,以后玩CAN会用到,谢谢。

出0入0汤圆

发表于 2006-6-7 09:29:16 | 显示全部楼层
这么好的帖子要收藏啦,多谢楼主

出0入0汤圆

发表于 2006-6-7 11:20:10 | 显示全部楼层
好帖

出0入0汤圆

发表于 2006-6-7 12:19:41 | 显示全部楼层
多谢了!

出0入20汤圆

发表于 2006-6-7 17:14:43 | 显示全部楼层
程序不错,但好比屠龙之术!

CAN128在国内不太好买,另外

价格在70左右,不如,一片

M16和一片MCP2515方便.

与MOTO的相比,更没有优势.

例如,9S12D64,才不过50左右,

还是16位机.

出0入0汤圆

发表于 2006-6-8 19:59:58 | 显示全部楼层
好呀,终于等到了,这两天公司网停了,真是CAN128的国内第一帖呀,强烈要求斑竹给其加分,以鼓励无私奉献.

谢谢goblin

置顶呀

出0入0汤圆

发表于 2006-6-9 09:25:00 | 显示全部楼层
请问:你用的AVR哪个版本?有ICCAVR7.0吗?有的话麻烦给我传一份。我从网上下载了一个,但不能注册。我的QQ:346604396

出0入0汤圆

发表于 2006-6-9 09:27:47 | 显示全部楼层
good

出0入0汤圆

 楼主| 发表于 2006-6-9 09:51:28 | 显示全部楼层
在这里搜索一下就可以,这里KEY 到IAR412A

支持JTAG MKII的USB口和CAN128,410版本支持的都不很好。要做CAN128最好用412A以上的版本!

出0入0汤圆

发表于 2006-6-13 14:21:02 | 显示全部楼层
过几天到武汉,买本CAN的基础书看一看,CAN128的DATASHEET看了一遍,MOB是什么东西,如何使用,就是看了程序,还是不明白。还有就是那个格式3,0,0,177,239,33是如何和CANIDT对应的。如果楼主能介绍几本CAN的书籍就好了,周立功网站上的好象介绍的不是很全。

出0入8汤圆

发表于 2006-6-13 16:39:22 | 显示全部楼层
在Microchip的网站上有一份数据手册是MCP2515的中文版,你可以下载下来,里面有一些关于CAN协议和总裁的信息,感觉蛮有概括性的。  CAN通讯里面感觉做烦人的就是位定时。大多CAN总线控制器基本类似,不管它是大Can的MCU还是独立的CAn控制器。你其实只要搞明白CAN的协议那几个报文、位定时、错误检测,基本上可以算得上是入门了。

出0入0汤圆

发表于 2006-6-21 18:58:29 | 显示全部楼层
郁闷啊,我的还是发送有问题,单步执行就能发出去,写到片子里就不行啊,急!!!!!!!

出0入0汤圆

发表于 2007-1-11 13:33:21 | 显示全部楼层
怎么不是WINAVR GCC编译器 呢?

大家有用 WINAVR GCC的吗?

出0入0汤圆

发表于 2007-1-11 13:43:30 | 显示全部楼层
主程序中读取中断接收到的CAN数据的程序段,只是介绍下实现方法:



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

//-------------------读取 主机CAN 数据-------------------

    CANGIE &= ~(1<<ENRX);                  //关CAN接收中断

    CANPAGE = 0x00;

    CANCDMOB = 0x00;

    CANPAGE = 0x30;

    CANCDMOB = 0x00;





spd = ((can_data[0][0]<<8)  + can_data[0][1]) / 8;     //速度指令(单位 0.125)

spd = spd * 5 / 3;                        //指令频率(单位 50 / 30 @4 poles)

p_trk = (can_data[0][2]<<8) + can_data[0][3];                    //正转矩

n_trk = (can_data[0][4]<<8) + can_data[0][5];                     //负转矩

for (i = 0; i < 8; i++) s_sv = can_data[3];                //伺服



    CANPAGE = 0x00;

    CANCDMOB = 0x98;

    CANPAGE = 0x30;

    CANCDMOB = 0x98;

    CANGIE |= 1<<ENRX;                                     //开CAN接收中断

这一段  数据是怎么存储的 ,存到 哪个变量里去了,没看明白,  麻烦楼主能说清楚点吗?

出0入0汤圆

发表于 2007-1-11 18:48:09 | 显示全部楼层
顶,我虽说看不懂。建议阿莫给楼主加400分。

出0入0汤圆

发表于 2007-1-11 20:02:18 | 显示全部楼层
集成can控制器的一种做法是,把can相关的控制/状态/数据寄存器分成一组,有的芯片称其为Message Object(can128中的mob似乎与此类似),用户代码不能直接访问,mcu中有n组这样的寄存器。然后以另外一组寄存器作为用户程序可以直接访问的can寄存器,程序通过这组寄存器以类似软件上指针的方式访问各个Message Object,每次这组寄存器只能访问同一个Message Object里的各个寄存器,这组类似指针的寄存器也有被称为Message Handler的。



can128有16个mob(好像是,因该没记错),而像arm芯片一般会有32个类似的mob,比如easycan4有4个can控制器,包括3个16buffers、1个32buffers。mob可以根据需要设置为接收mob或发送mob,所以如果要发送并接收can数据,至少需要2个mob,分别负责接收与发送,而实际中由于can接收中断需要时间处理,只有1个接收mob时会出现数据丢失,所以接收mob一般大于2个。

出0入0汤圆

发表于 2007-1-11 20:47:47 | 显示全部楼层
这么好的东东,不顶对不起楼主啊

出0入0汤圆

发表于 2007-1-12 11:00:54 | 显示全部楼层
学习楼主的贡献精神。我初学的,以后多指教!

出0入0汤圆

发表于 2007-1-12 12:37:16 | 显示全部楼层
zhichi

出0入0汤圆

发表于 2007-11-8 13:28:32 | 显示全部楼层
正要学习啊,感谢楼主
还有回帖提供信息的各位兄弟

出0入0汤圆

发表于 2007-11-8 13:48:37 | 显示全部楼层
lz你的AT90CAN128多少钱一片?

出0入0汤圆

发表于 2007-11-8 13:57:58 | 显示全部楼层
记号

出0入0汤圆

发表于 2007-11-8 16:40:55 | 显示全部楼层
兄弟能传个完整的项目文件吗?

出0入0汤圆

发表于 2007-11-8 16:56:32 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2008-5-9 20:36:09 | 显示全部楼层
留个记号

出10入95汤圆

发表于 2008-5-9 21:41:07 | 显示全部楼层
好帖谢谢!

出0入0汤圆

发表于 2008-5-23 15:54:50 | 显示全部楼层
要怎样设置才能进入中断呢?怎么我用Simulator仿真不能进入中断呢?

出0入0汤圆

发表于 2008-5-23 16:04:36 | 显示全部楼层
收藏了 谢谢

出0入0汤圆

发表于 2008-5-23 16:59:40 | 显示全部楼层
收藏

出0入0汤圆

发表于 2008-6-5 10:33:45 | 显示全部楼层
楼主在吗?
我也正在研究AT90CAN128的CAN控制器,能否和你交流交流!
我的QQ是:40454681
MSN是:danesh.zhao@hotmail.com

欢迎各位对这块有兴趣的朋友,都来交流交流!

出0入0汤圆

发表于 2008-9-3 12:45:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-9-3 21:33:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-9-3 21:38:59 | 显示全部楼层
MARK

出0入0汤圆

发表于 2008-9-9 22:19:36 | 显示全部楼层
很奇怪,我就是死活调试不过,郁闷啊,怎么高手都不指导下呢????

出0入0汤圆

发表于 2009-6-4 09:46:06 | 显示全部楼层
谢谢楼主,好贴子,值得拿来收藏

出0入0汤圆

发表于 2009-6-4 10:30:34 | 显示全部楼层
关于CAN的要学习。。

出0入0汤圆

发表于 2009-6-6 15:02:43 | 显示全部楼层
好贴要顶

出0入0汤圆

发表于 2009-6-6 18:30:09 | 显示全部楼层
3Q

出0入0汤圆

发表于 2009-6-6 20:29:43 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2009-6-6 21:32:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-6 22:43:07 | 显示全部楼层
jihao

出0入0汤圆

发表于 2009-6-7 09:43:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-18 15:34:24 | 显示全部楼层
谢谢,在这里让我这段程序的理解豁然开朗

出0入0汤圆

 楼主| 发表于 2009-6-18 17:41:10 | 显示全部楼层
真是惭愧啊,现在看当初的程序是漏洞百出啊!呵呵呵

目前除了CAN发送还是定时直接发送外,其他如usart、CAN、ADC、eeprom等都已经转入地下中断服务了。呵呵呵
老程序存在有些概念还没彻底摸清的情况,没有错误处理机制,错误过多就会导致进入错误被动模式等。

希望借鉴这个程序的朋友自己可要多分析哦。

出0入0汤圆

发表于 2009-6-19 18:41:11 | 显示全部楼层
虽然看不懂  还是顶

出0入0汤圆

发表于 2009-7-3 18:03:04 | 显示全部楼层
感谢支持楼主的热心奉献精神!

出0入4汤圆

发表于 2009-7-4 01:19:41 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-7-4 08:57:55 | 显示全部楼层
还没用到CAN,不过记个号

出0入42汤圆

发表于 2009-7-4 09:36:59 | 显示全部楼层
好帖

出0入0汤圆

发表于 2009-7-8 16:27:18 | 显示全部楼层
顶,我虽说看不懂。

出0入0汤圆

发表于 2009-7-10 16:36:49 | 显示全部楼层
这个程序能实现两个接收中断吗?我试了,只能响应一个中断,请高手指教一下。

出0入0汤圆

发表于 2009-9-8 15:32:01 | 显示全部楼层
mark,谢谢  现在正在学习

出0入0汤圆

发表于 2009-9-15 15:43:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-15 16:07:57 | 显示全部楼层
几号下

出0入0汤圆

发表于 2009-9-22 20:13:37 | 显示全部楼层
是不是和MEGA系列的指令兼容?

出0入0汤圆

发表于 2010-3-2 15:20:15 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2010-3-3 08:48:25 | 显示全部楼层
支持 【10楼】 wenming 老王
-------------------------
AT90CAN128现在国内的零售价是多少?性价比高吗?

出0入0汤圆

发表于 2010-3-3 16:27:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-6 22:19:09 | 显示全部楼层
AT90CAN128 用什么编程软件,貌似 ICC不支持啊

出0入0汤圆

发表于 2010-3-7 00:59:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-27 11:09:01 | 显示全部楼层
好东西啊

出0入0汤圆

发表于 2010-9-27 12:24:18 | 显示全部楼层
顶一个

出0入0汤圆

发表于 2010-9-27 12:37:45 | 显示全部楼层
留个记号,以后用得着

出0入0汤圆

发表于 2010-9-27 14:40:08 | 显示全部楼层
AT90留记号

出0入0汤圆

发表于 2010-9-27 15:52:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-27 17:32:21 | 显示全部楼层
mark,某年某月的某一天,可能会用到的

出0入0汤圆

发表于 2010-9-27 23:28:33 | 显示全部楼层
学习,谢谢

出0入16汤圆

发表于 2010-9-28 15:48:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-3 14:56:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-3 17:16:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-24 14:31:57 | 显示全部楼层
标记

出0入0汤圆

发表于 2011-12-19 16:46:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-20 08:56:04 | 显示全部楼层
值得收藏

出0入0汤圆

发表于 2011-12-20 11:18:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-20 11:33:06 | 显示全部楼层
精神可嘉,等我发展到你那个程度也发些代码出来。

出0入0汤圆

发表于 2012-1-2 21:36:37 | 显示全部楼层
收藏啦,以后玩CAN会用到,谢谢。

出0入0汤圆

发表于 2012-3-8 16:25:40 | 显示全部楼层
也记一下,过两天再来看

出0入0汤圆

发表于 2012-7-15 10:18:14 | 显示全部楼层
程序再多点注释就好了

出0入0汤圆

发表于 2012-11-8 13:32:39 | 显示全部楼层
挺好,比较详细

出0入0汤圆

发表于 2012-11-8 13:34:52 | 显示全部楼层
楼主好淫啊!做个标记。

出0入0汤圆

发表于 2013-4-15 15:51:33 | 显示全部楼层

收藏啦,以后玩CAN会用到

出0入0汤圆

发表于 2013-5-6 14:04:42 | 显示全部楼层

挺好,比较详细

出0入8汤圆

发表于 2013-5-7 04:18:06 来自手机 | 显示全部楼层
也准备入门can通讯

出0入0汤圆

发表于 2016-4-10 21:02:31 | 显示全部楼层
好老的帖子,过来学习一下,这款片子不错,我们这边军工单位都用上了。

出0入0汤圆

发表于 2016-4-10 21:03:31 | 显示全部楼层
这么好的东东,不顶对不起楼主啊

出0入0汤圆

发表于 2016-4-10 21:40:03 来自手机 | 显示全部楼层
不错,顶起来

出0入4汤圆

发表于 2016-4-10 22:56:21 | 显示全部楼层
10年整      

出0入0汤圆

发表于 2016-4-11 08:09:00 | 显示全部楼层
很好的代码,看起来很舒适

出0入0汤圆

发表于 2016-4-11 09:07:49 | 显示全部楼层
谢谢分享,学习了

出0入0汤圆

发表于 2016-4-11 09:34:51 | 显示全部楼层
收藏备用

出0入0汤圆

发表于 2016-4-11 17:00:31 | 显示全部楼层
完全没有搞明白。呵呵。

出0入0汤圆

发表于 2019-3-8 15:04:06 来自手机 | 显示全部楼层
本帖最后由 xuekcd 于 2019-3-8 16:24 编辑

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

本版积分规则

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

GMT+8, 2024-3-29 12:41

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

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