<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>从初学者到电子工程师</title><link>http://apache.cndev.org/category/716.aspx</link><description>记录我学习技术的历程</description><managingEditor>apache</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>apache</dc:creator><title>C++Builder 全局变量</title><link>http://apache.cndev.org/archive/2007/05/17/51725.aspx</link><pubDate>2007-05-17 13:59:00Z</pubDate><guid>http://apache.cndev.org/archive/2007/05/17/51725.aspx</guid><wfw:comment>http://apache.cndev.org/comments/51725.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2007/05/17/51725.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/51725.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/51725.aspx</trackback:ping><description>&lt;P&gt;今天遇到了一个C++Builder 全局变量的问题，经过查找资料，终于解决了&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A.CPP&lt;/P&gt;
&lt;P&gt;#include &amp;lt;B.H&amp;gt;&lt;/P&gt;
&lt;P&gt;ShowMessage(MainVersion);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;B.H&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;AnsiString MainVersion;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;C.CPP&lt;/P&gt;
&lt;P&gt;#include &amp;lt;B.H&amp;gt;&lt;/P&gt;
&lt;P&gt;MainVersion=&amp;#8221;T-bag&amp;#8221;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;这样三个文件，C.CPP 修改了 MainVersion 的值后,A.cpp显示为空，奇怪哈。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Google 得到：全局变量需要加：extern 关键字&lt;/P&gt;
&lt;P&gt;于是修改为：extern AnsiString MainVersion &lt;/P&gt;
&lt;P&gt;问题依然如故&lt;/P&gt;
&lt;P&gt;再Google ,原来VCL 对 extern 关键字做了扩展，改为&lt;/P&gt;
&lt;P&gt;extern PACKAGE&amp;nbsp;&amp;nbsp; AnsiString MainVersion;&lt;/P&gt;
&lt;P&gt;编译失败，&lt;/P&gt;
&lt;P&gt;在B.CPP 中加入 &lt;/P&gt;
&lt;P&gt;AnsiString MainVersion;&lt;/P&gt;
&lt;P&gt;问题全部解决。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;奇怪哈，以前声明全局变量只放在.H 文件中，用extern PACKAGE&amp;nbsp;&amp;nbsp; 关键字还需要在.CPP中写一份，不知道其中的原因，如果哪位看官明白，请告诉小弟。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://apache.cndev.org/aggbug/51725.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>AT89S51 和 AT89S52的区别</title><link>http://apache.cndev.org/archive/2007/05/17/51723.aspx</link><pubDate>2007-05-17 13:35:00Z</pubDate><guid>http://apache.cndev.org/archive/2007/05/17/51723.aspx</guid><wfw:comment>http://apache.cndev.org/comments/51723.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2007/05/17/51723.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/51723.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/51723.aspx</trackback:ping><description>&lt;P&gt;&amp;nbsp;&amp;nbsp; 在印象中，S51 和 S52的区别不太大，正是由于平常的不仔细，在后面的开发中遇到了问题，记忆深刻，特意把一些经验记录下来，希望能给需要的人一些帮助。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 前些日子，朋友有几台基于89S51的设备需要维修，实际上就是MCU坏掉了，由于厂家已经不给维护，只能重写全部程序，在对设备的硬件仔细研究之后，我开始动手了。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于当时手头没有PLCC封装的89S51 ，就用 89S52 替代，毕竟硬件外围电路上，89S51 和S52 是没有区别的（也可能有，但我还没发现，呵呵）。没多长时间，程序开发调试完成。于是买来几块89S51，准备编译一下，问题出现了，首先出现错误提示：&lt;/P&gt;
&lt;P&gt;ADDRESS SPACE OVERFLOW ＸＸＸＸ&lt;/P&gt;
&lt;P&gt;经Ｇｏｏｇｌｅ得到，原来89S51 的 内存只有 128字节 而89S52内存有 256 字节，明显是内存不够用了，经过优化减少全局变量，Data=110.4 bytes 已经少于 128字节，编译成功，烧写。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 芯片装到设备上，出现了跑飞的情况，原以为是程序逻辑的问题，经过仔细查找没发现错误的地方，但程序仍然跑飞，很奇怪。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 再Google ，发现：虽然89S51 有 128 字节的内存，但不能全部给全局变量使用，需要预留20~30字节给堆栈使用，否则程序当然会跑飞。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 反复查看代码，发现程序中有一些常量，但仍然放在内存中，比如：&lt;/P&gt;
&lt;P&gt;char a[]={'a','b','c','d'};&lt;/P&gt;
&lt;P&gt;偶尔发现别人的代码中有这种形式的定义：&lt;/P&gt;
&lt;P&gt;char code a[]={'a',b','c','d'};&lt;/P&gt;
&lt;P&gt;原来，常量可以放在程序Rom里，于是将一些程序中不需要变化的变量（其实就是常量哈）全部修改为char code&amp;nbsp; a;的形式，烧写，调试，以前跑飞的情况终于解决了。&lt;/P&gt;
&lt;P&gt;另外，对于只使用正值的char 可以修改为 unsigned char，也可以节省一些内存。 &lt;/P&gt;&lt;img src ="http://apache.cndev.org/aggbug/51723.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>新做的一个电子表</title><link>http://apache.cndev.org/archive/2007/05/15/51701.aspx</link><pubDate>2007-05-15 23:30:00Z</pubDate><guid>http://apache.cndev.org/archive/2007/05/15/51701.aspx</guid><wfw:comment>http://apache.cndev.org/comments/51701.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2007/05/15/51701.aspx#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/51701.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/51701.aspx</trackback:ping><description>&lt;IMG src="http://www.cndev.org/.imgdb/%5Csn10108/GUID-0F22E535-2F44-4797-9195-38723D1C2F87.jpg"&gt; &lt;IMG src="http://www.cndev.org/.imgdb/%5Csn10108/GUID-E38571FA-FE51-4499-B186-176F955188F1.jpg"&gt;&lt;img src ="http://apache.cndev.org/aggbug/51701.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>【转载】贴个1602 液晶的驱动程序</title><link>http://apache.cndev.org/archive/2007/04/28/51540.aspx</link><pubDate>2007-04-28 16:02:00Z</pubDate><guid>http://apache.cndev.org/archive/2007/04/28/51540.aspx</guid><wfw:comment>http://apache.cndev.org/comments/51540.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2007/04/28/51540.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/51540.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/51540.aspx</trackback:ping><description>/*=======================================
                         1602lcd模块驱动程序
==========================================

说明:1.晶体:11.0592MHz
     2.1602驱动:ks0066
    
******************************************/
＃i nclude &lt;reg51.h&gt;
＃i nclude &lt;string.h&gt;
#define lcm_rs P2_7            //寄存器选择
#define lcm_rw P2_6        //读/写控制
#define lcm_e P2_5            //读/写使能
#define lcm_blk P2_4        //背光led   1.off 0.on
#define lcm_data P0

//函数声明
void delay5ms(void);
void delay400ms(void);
void lcm_write_command(unsigned char wc_lcm,busy_c);

/***********************************
//函数名称:    void lcm_ini(void)
//传递参数:    无
//返 回 值:    无
//函数功能:    LCM初始化
//函数说明:
***********************************/
void lcm_ini(void)
{
    lcm_data = 0;
    lcm_write_command(0x38,0);        //16*2显示,5*7点阵,8位数据接口,不检测忙
    delay5ms();
    lcm_write_command(0x38,0);
    delay5ms();
    lcm_write_command(0x38,0);        //三次显示模式, 不检测忙
    delay5ms();
    lcm_write_command(0x38,1);        //16*2显示,5*7点阵,8位数据接口,需要检测忙
    lcm_write_command(0x80,1);        //关闭显示
    lcm_write_command(0x01,1);        //clear显示    
    lcm_write_command(0x06,1);        //指针和光标+1,不滚屏
    lcm_write_command(0x0c,1);        //开显示,不显示光标
}

/***********************************
//函数名称:    unsigned char lcm_read_status(void)
//传递参数:    无
//返 回 值:    unsigned char
//函数功能:    读lcm状态,等待lcm空闲
//函数说明:    DB7=1,忙
***********************************/
unsigned char lcm_read_status(void)
{
    lcm_data=0xff;
    lcm_rs=0;
    lcm_rw=1;
    lcm_e=0;
    lcm_e=0;
    lcm_e=1;
    while(lcm_data &amp; 0x80);
    return lcm_data;
}

/***********************************
//函数名称:    void lcm_write_data(unsigned char wd_lcm)
//传递参数:    unsigned char  wd_lcm
//返 回 值:    无
//函数功能:    lcm写数据
//函数说明:    
***********************************/
void lcm_write_data(unsigned char wd_lcm)
{
    lcm_read_status();            //判断lcm忙标志
    lcm_data = wd_lcm;
    lcm_rs = 1;
    lcm_rw = 0;
    lcm_e = 0;
    lcm_e = 0;
    lcm_e = 1;
}

/***********************************
//函数名称:    void lcm_write_command(unsigned char wc_lcm, busy_c)
//传递参数:    unsigned char wc_lcm, busy_c
//返 回 值:    无
//函数功能:    lcm写命令
//函数说明:    busy_c=0是,不用检测忙信号
***********************************/
void lcm_write_command(unsigned char wc_lcm, busy_c)
{
    if (busy_c)
        lcm_read_status();
    lcm_data = wc_lcm;
    lcm_rs=0;
    lcm_rw = 0;
    lcm_e = 0;
    lcm_e = 0;
    lcm_e = 1;
}

/***********************************
//函数名称:    void disp_one_char(unsigned char x, unsigned char y,unsigned char disp_data)
//传递参数:    unsigned char x, unsigned char y,unsigned char disp_data
//返 回 值:    无
//函数功能:    指定位置显示一个字符
//函数说明:    
***********************************/
void disp_one_char(unsigned char x,unsigned char y,unsigned disp_data)
{
    y = y&amp;0x01;
    x = x&amp;0x0f;                  //限制2行,没行15个字
    if (y)
        x =x + 0x40;          //算RAM地址
    x = x + 0x80;
    lcm_write_command(x,0);
    lcm_write_data(disp_data);
}

/***********************************
//函数名称:    void disp_one_char(unsigned char x, unsigned char y,unsigned char *disp_data)
//传递参数:    unsigned char x, unsigned char y,unsigned char *disp_data
//返 回 值:    无
//函数功能:    指定位置显示一串字符
//函数说明:    
***********************************/    
void disp_list_char(unsigned char x,unsigned char y,unsigned char *disp_data)    
{
    unsigned char char_length,j;
    char_length = strlen(disp_data);
    y = y&amp;0x1;
    x = x&amp;0x0f;
    for (j=0;j&lt;char_length;j++)
    {
        disp_one_char( x,y,disp_data[j]);        //显示一个字符
        x++;
    }
}

/***********************************
//函数名称:    void delay5ms(void)
//传递参数:    无
//返 回 值:    无
//函数功能:    延时5MS
//函数说明:
***********************************/
void delay5ms(void)
{
    unsigned int TempCyc = 5552;
    while(TempCyc--);
}
/***********************************
//函数名称:    void delay400ms(void)
//传递参数:    无
//返 回 值:    无
//函数功能:    L延时400MS
//函数说明:    LCM开机延时
***********************************/
void delay400ms(void)
{
    unsigned char TempCycA = 5;
    unsigned int TempCycB;
    while(TempCycA--)
    {
        TempCycB=7269;
        while(TempCycB--);
    };
}

/*****d******************************
//函数名称:    void main(void)
//传递参数:    无
//返 回 值:    无
//函数功能:    主函数
//函数说明:    
************************************/
void main(void)
{
    delay400ms();
    lcm_ini();
                disp_list_char(1,0,"Welcome");
                disp_list_char(1,0,"www.dzkjcn.com")
                while(1);
}

以上的程序只是简单的显示两行字符,没有滚屏和背光&lt;img src ="http://apache.cndev.org/aggbug/51540.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>最近又要捣鼓一下硬件,在老古上看到一篇元件封装的文章,转载下来,当作资料.</title><link>http://apache.cndev.org/archive/2007/02/12/50698.aspx</link><pubDate>2007-02-12 17:35:00Z</pubDate><guid>http://apache.cndev.org/archive/2007/02/12/50698.aspx</guid><wfw:comment>http://apache.cndev.org/comments/50698.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2007/02/12/50698.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/50698.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/50698.aspx</trackback:ping><description>&lt;P&gt;零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念.因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元件,再过锡炉或喷锡（也可手焊）,成本较高,较新的设计都是采用体积小的表面贴片式元件（SMD）这种元件不必钻孔,用钢膜将半熔状锡膏倒入电路板,再把SMD元件放上,即可焊接在电路板上了。 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 电阻 AXIAL &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 无极性电容 RAD &lt;/P&gt;
&lt;P&gt;电解电容 RB- &lt;/P&gt;
&lt;P&gt;电位器 VR &lt;/P&gt;
&lt;P&gt;二极管 DIODE &lt;/P&gt;
&lt;P&gt;三极管 TO &lt;/P&gt;
&lt;P&gt;电源稳压块78和79系列 TO－126H和TO-126V &lt;/P&gt;
&lt;P&gt;场效应管 和三极管一样 &lt;/P&gt;
&lt;P&gt;整流桥 D－44 D－37 D－46 &lt;/P&gt;
&lt;P&gt;单排多针插座 CON SIP &lt;/P&gt;
&lt;P&gt;双列直插元件 DIP &lt;/P&gt;
&lt;P&gt;晶振 XTAL1 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;电阻：RES1,RES2,RES3,RES4;封装属性为axial系列 &lt;/P&gt;
&lt;P&gt;无极性电容：cap;封装属性为RAD-0.1到rad-0.4 &lt;/P&gt;
&lt;P&gt;电解电容：electroi;封装属性为rb.2/.4到rb.5/1.0 &lt;/P&gt;
&lt;P&gt;电位器：pot1,pot2;封装属性为vr-1到vr-5 &lt;/P&gt;
&lt;P&gt;二极管：封装属性为diode-0.4(小功率）diode-0.7(大功率） &lt;/P&gt;
&lt;P&gt;三极管：常见的封装属性为to-18（普通三极管）to-22(大功率三极管）to-3(大功率达林 &lt;/P&gt;
&lt;P&gt;顿管） &lt;/P&gt;
&lt;P&gt;电源稳压块有78和79系列;78系列如7805,7812,7820等 &lt;/P&gt;
&lt;P&gt;79系列有7905,7912,7920等 &lt;/P&gt;
&lt;P&gt;常见的封装属性有to126h和to126v &lt;/P&gt;
&lt;P&gt;整流桥：BRIDGE1,BRIDGE2: 封装属性为D系列（D-44,D-37,D-46） &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;电阻：　AXIAL0.3-AXIAL0.7　　其中0.4-0.7指电阻的长度,一般用AXIAL0.4 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;瓷片电容：RAD0.1-RAD0.3。　　其中0.1-0.3指电容大小,一般用RAD0.1 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;电解电容：RB.1/.2-RB.4/.8 其中.1/.2-.4/.8指电容大小。一般&amp;lt;100uF用 &lt;/P&gt;
&lt;P&gt;RB.1/.2,100uF-470uF用RB.2/.4,&amp;gt;470uF用RB.3/.6 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;二极管：　DIODE0.4-DIODE0.7 其中0.4-0.7指二极管长短,一般用DIODE0.4 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;发光二极管：RB.1/.2 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;集成块：　DIP8-DIP40, 其中８－４０指有多少脚,８脚的就是DIP8 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;贴片电阻 &lt;/P&gt;
&lt;P&gt;0603表示的是封装尺寸 与具体阻值没有关系 &lt;/P&gt;
&lt;P&gt;但封装尺寸与功率有关 通常来说 &lt;/P&gt;
&lt;P&gt;0201 1/20W &lt;/P&gt;
&lt;P&gt;0402 1/16W &lt;/P&gt;
&lt;P&gt;0603 1/10W &lt;/P&gt;
&lt;P&gt;0805 1/8W &lt;/P&gt;
&lt;P&gt;1206 1/4W &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;电容电阻外形尺寸与封装的对应关系是: &lt;/P&gt;
&lt;P&gt;0402=1.0x0.5 &lt;/P&gt;
&lt;P&gt;0603=1.6x0.8 &lt;/P&gt;
&lt;P&gt;0805=2.0x1.2 &lt;/P&gt;
&lt;P&gt;1206=3.2x1.6 &lt;/P&gt;
&lt;P&gt;1210=3.2x2.5 &lt;/P&gt;
&lt;P&gt;1812=4.5x3.2 &lt;/P&gt;
&lt;P&gt;2225=5.6x6.5 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; 关于零件封装我们在前面说过,除了DEVICE。LIB库中的元件外,其它库的元件都已经有了 &lt;/P&gt;
&lt;P&gt;固定的元件封装,这是因为这个库中的元件都有多种形式：以晶体管为例说明一下： &lt;/P&gt;
&lt;P&gt;晶体管是我们常用的的元件之一,在DEVICE。LIB库中,简简单单的只有NPN与PNP之分,但 &lt;/P&gt;
&lt;P&gt;实际上,如果它是NPN的2N3055那它有可能是铁壳子的TO&amp;#8212;3,如果它是NPN的2N3054,则有 &lt;/P&gt;
&lt;P&gt;可能是铁壳的TO-66或TO-5,而学用的CS9013,有TO-92A,TO-92B,还有TO-5,TO-46,TO-5 &lt;/P&gt;
&lt;P&gt;2等等,千变万化。 &lt;/P&gt;
&lt;P&gt;还有一个就是电阻,在DEVICE库中,它也是简单地把它们称为RES1和RES2,不管它是100Ω &lt;/P&gt;
&lt;P&gt;还是470KΩ都一样,对电路板而言,它与欧姆数根本不相关,完全是按该电阻的功率数来决 &lt;/P&gt;
&lt;P&gt;定的我们选用的1/4W和甚至1/2W的电阻,都可以用AXIAL0.3元件封装,而功率数大一点的话 &lt;/P&gt;
&lt;P&gt;,可用AXIAL0.4,AXIAL0.5等等。现将常用的元件封装整理如下： &lt;/P&gt;
&lt;P&gt;电阻类及无极性双端元件 AXIAL0.3-AXIAL1.0 &lt;/P&gt;
&lt;P&gt;无极性电容 RAD0.1-RAD0.4 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;有极性电容 RB.2/.4-RB.5/1.0 &lt;/P&gt;
&lt;P&gt;二极管 DIODE0.4及 DIODE0.7 &lt;/P&gt;
&lt;P&gt;石英晶体振荡器 XTAL1 &lt;/P&gt;
&lt;P&gt;晶体管、FET、UJT TO-xxx(TO-3,TO-5) &lt;/P&gt;
&lt;P&gt;可变电阻（POT1、POT2） VR1-VR5 &lt;/P&gt;
&lt;P&gt;当然,我们也可以打开C:\Client98\PCB98\library\advpcb.lib库来查找所用零件的对应封 &lt;/P&gt;
&lt;P&gt;装。 &lt;/P&gt;
&lt;P&gt;这些常用的元件封装,大家最好能把它背下来,这些元件封装,大家可以把它拆分成两部分 &lt;/P&gt;
&lt;P&gt;来记如电阻AXIAL0.3可拆成AXIAL和0.3,AXIAL翻译成中文就是轴状的,0.3则是该电阻在印 &lt;/P&gt;
&lt;P&gt;刷电路板上的焊盘间的距离也就是300mil（因为在电机领域里,是以英制单位为主的。同样 &lt;/P&gt;
&lt;P&gt;的,对于无极性的电容,RAD0.1-RAD0.4也是一样;对有极性的电容如电解电容,其封装为R &lt;/P&gt;
&lt;P&gt;B.2/.4,RB.3/.6等,其中&amp;#8220;.2&amp;#8221;为焊盘间距,&amp;#8220;.4&amp;#8221;为电容圆筒的外径。 &lt;/P&gt;
&lt;P&gt;对于晶体管,那就直接看它的外形及功率,大功率的晶体管,就用TO&amp;#8212;3,中功率的晶体管 &lt;/P&gt;
&lt;P&gt;,如果是扁平的,就用TO-220,如果是金属壳的,就用TO-66,小功率的晶体管,就用TO-5 &lt;/P&gt;
&lt;P&gt;,TO-46,TO-92A等都可以,反正它的管脚也长,弯一下也可以。 &lt;/P&gt;
&lt;P&gt;对于常用的集成IC电路,有DIPxx,就是双列直插的元件封装,DIP8就是双排,每排有4个引 &lt;/P&gt;
&lt;P&gt;脚,两排间距离是300mil,焊盘间的距离是100mil。SIPxx就是单排的封装。等等。 &lt;/P&gt;
&lt;P&gt;值得我们注意的是晶体管与可变电阻,它们的包装才是最令人头痛的,同样的包装,其管脚 &lt;/P&gt;
&lt;P&gt;可不一定一样。例如,对于TO-92B之类的包装,通常是1脚为E（发射极）,而2脚有可能是 &lt;/P&gt;
&lt;P&gt;B极（基极）,也可能是C（集电极）;同样的,3脚有可能是C,也有可能是B,具体是那个 &lt;/P&gt;
&lt;P&gt;,只有拿到了元件才能确定。因此,电路软件不敢硬性定义焊盘名称（管脚名称）,同样的 &lt;/P&gt;
&lt;P&gt;,场效应管,MOS管也可以用跟晶体管一样的封装,它可以通用于三个引脚的元件。 &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Q1-B,在PCB里,加载这种网络表的时候,就会找不到节点（对不上）。 &lt;/P&gt;
&lt;P&gt;在可变电阻上也同样会出现类似的问题;在原理图中,可变电阻的管脚分别为1、W、及2, &lt;/P&gt;
&lt;P&gt;所产生的网络表,就是1、2和W,在PCB电路板中,焊盘就是1,2,3。当电路中有这两种元 &lt;/P&gt;
&lt;P&gt;件时,就要修改PCB与SCH之间的差异最快的方法是在产生网络表后,直接在网络表中,将晶 &lt;/P&gt;
&lt;P&gt;体管管脚改为1,2,3;将可变电阻的改成与电路板元件外形一样的1,2,3即可。&lt;/P&gt;&lt;img src ="http://apache.cndev.org/aggbug/50698.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>统计在线用户 in ASP.NET</title><link>http://apache.cndev.org/archive/2006/12/19/50168.aspx</link><pubDate>2006-12-19 04:16:00Z</pubDate><guid>http://apache.cndev.org/archive/2006/12/19/50168.aspx</guid><wfw:comment>http://apache.cndev.org/comments/50168.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2006/12/19/50168.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/50168.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/50168.aspx</trackback:ping><description>&lt;P&gt;[ZT From天极] &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=txt&gt;统计在线用户的作用不言而喻，就是为了网站管理者可以知道当前用户的多少，然后根据用户数量来观察服务器或者程序的性能，从而可以直观的了解到网站的吸引力或者网站程序的效率。现在，我们就介绍一个简单明了的方法来统计在线用户的多少，该方法的特点就是充分的利用了 ASP.NET的特点，结合global.asax文件，用Application和Session巧妙的实现在线用户的统计，由于程序中只用到一个 Application，所以，程序占用系统资源几乎可以忽略不及，当然，这也是网站管理者最关心的问题之一。&lt;BR&gt;&lt;BR&gt;　　&lt;B&gt;一、用户显示页面的使用&lt;BR&gt;&lt;/B&gt;&lt;BR&gt;　　首先，我们来看看怎样现实当前网站的访问用户数量，程序代码如下：&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE cellSpacing=0 cellPadding=0 width=600 bgColor=#ffffff border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;＜%@ Page Language="c#" debug="true" %＞&lt;BR&gt;＜html＞&lt;BR&gt;＜head＞&lt;BR&gt;＜SCRIPT LANGUAGE="c#" RUNAT="server"＞&lt;BR&gt;private void Page_Load（object sender, System.EventArgs e）&lt;BR&gt;{ &lt;BR&gt;Visitors.Text = "本站当前有： ＜b＞" + Application["user_sessions"].ToString（） + "" + "＜/b＞ 位访问者 !";&lt;BR&gt;}&lt;BR&gt;＜title＞在线用户＜/title＞&lt;BR&gt;＜/head＞&lt;BR&gt;＜body＞&lt;BR&gt;＜asp:label id="visitors" runat="server" /＞＜br＞&lt;BR&gt;＜/body＞&lt;BR&gt;＜/html＞&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;　　可以看出，以上的程序特别简单，就是调用Application。当然，我们不必要专门设计一个页面来显示在线用户数量，在网站的任何页面，我们都可以直接调用Application（"user_sessions"）.ToString（）来显示当前用户数量。&lt;BR&gt;&lt;BR&gt;　　&lt;B&gt;二、global.asax文件实现&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;　　global.asax文件的作用我们自不必说，现在，我们直接来看统计当前在线用户数量如何实现：&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE cellSpacing=0 cellPadding=0 width=600 bgColor=#ffffff border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;＜script language="c#" runat="Server"＞&lt;BR&gt;protected void Application_Start（Object sender, EventArgs e）&lt;BR&gt;{&lt;BR&gt;Application["user_sessions"] = 0;&lt;BR&gt;}&lt;BR&gt;protected void Session_Start（Object sender, EventArgs e）&lt;BR&gt;{&lt;BR&gt;Application.Lock（）;&lt;BR&gt;Application["user_sessions"] = （int）Application["user_sessions"] + 1;&lt;BR&gt;Application.Unlock（）;&lt;BR&gt;}&lt;BR&gt;protected void Session_End（Object sender, EventArgs e）&lt;BR&gt;{&lt;BR&gt;Application.Lock（）;&lt;BR&gt;Application["user_sessions"] = （int）Application["user_sessions"] - 1;&lt;BR&gt;Application.Unlock（）;&lt;BR&gt;}&lt;BR&gt;＜/script＞&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;　　以上代码很容易理解，当网站开始服务的时候（Application开始的时候），程序设置Application ["user_sessions"]为零，然后，当用户进入网站（Session开始的时候）的时候，锁定Application，然后，将 application（"user_sessions"）加一，用户退出网站的时候，application（"user_sessions"）减一。这样，就很巧妙的实现了在线用户的统计。&lt;BR&gt;&lt;BR&gt;　　&lt;B&gt;三、一点讨论&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;　　以上的统计，简明扼要，程序很容易实现。但是，如果我们仔细考虑，发现该方法有一定的局限，统计出来的在线用户数量可能稍微有点误差。因为我们在以上程序中，是根据用户建立和退出会话（Session）来实现在线人数的加减的，而我们知道，如果用户没有关闭浏览器，而进入另外一个网站，那么，这个会话在一定的时间内是不会结束的，这个时间我们可以通过TimeOut来设置，一般的，我们设置为20分钟。所以，在用户数量统计上面，还是存在一点误差的。&lt;BR&gt;&lt;BR&gt;　　另外，我们知道，在ASP中，如果用户将浏览器上面的Cookies设置为&amp;#8220;禁用&amp;#8221;，那么，Session就不能再被传递，显然，这样设置让以上的统计程序无能为力。不过，在ASP.NET中我们有解决方法，在config.web文件中，我们将＜sessionstate cookieless="false" /＞设置为true就可以了，也就说，不使用Cookies也可以传递Session。这样，我们的程序就可以在不同的访问者环境中顺利运行。&lt;BR&gt;&lt;BR&gt;　　&lt;B&gt;四、总结&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;　　以上的统计程序特别简单，但是，细节的东西我们不一定想到，这也是我们在编程中需要多一点考虑的。 &lt;/P&gt;&lt;/SPAN&gt;&lt;img src ="http://apache.cndev.org/aggbug/50168.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>Kylix For BCB 在 Ubuntu  下的安装</title><link>http://apache.cndev.org/archive/2006/12/10/50035.aspx</link><pubDate>2006-12-10 07:49:00Z</pubDate><guid>http://apache.cndev.org/archive/2006/12/10/50035.aspx</guid><wfw:comment>http://apache.cndev.org/comments/50035.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2006/12/10/50035.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/50035.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/50035.aspx</trackback:ping><description>&lt;P&gt;关键字：Kylix3 BCB Ubuntu libstdc++-libc6.1-1.so.2 &lt;/P&gt;
&lt;P&gt;经过一夜的折腾，终于把Kylix3 中 BCB 部分在 Ubuntu&amp;nbsp; 中安装成功。并且可以正常运行了。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;着实费了一番周折。累了，有空写篇介绍性的文章。&lt;/P&gt;&lt;img src ="http://apache.cndev.org/aggbug/50035.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>笔记本 CPU 坏了</title><link>http://apache.cndev.org/archive/2006/09/08/46843.aspx</link><pubDate>2006-09-08 02:22:00Z</pubDate><guid>http://apache.cndev.org/archive/2006/09/08/46843.aspx</guid><wfw:comment>http://apache.cndev.org/comments/46843.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2006/09/08/46843.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/46843.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/46843.aspx</trackback:ping><description>CPU已经不行了,不知道主板有没有问题.

唉~~ 正忙着干点什么的时候出这种事

CPU发热量太大的问题应该早注意到.

没准需要换CPU和主板,现在兜里没银子.只能硬挺着了.

改天到电子市场看一看,看看能不能买个CPU插座换上.&lt;img src ="http://apache.cndev.org/aggbug/46843.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>基于18B20的数字温度计</title><link>http://apache.cndev.org/archive/2006/07/02/46432.aspx</link><pubDate>2006-07-02 14:56:00Z</pubDate><guid>http://apache.cndev.org/archive/2006/07/02/46432.aspx</guid><wfw:comment>http://apache.cndev.org/comments/46432.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2006/07/02/46432.aspx#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/46432.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/46432.aspx</trackback:ping><description>&lt;P&gt;本设计采用2位数码管，数码管分别接到P0 和 P2口&lt;/P&gt;
&lt;P&gt;18B20的DQ 接在 P.7&lt;/P&gt;
&lt;P&gt;源程序如下，在Ay-MPU89S51学习板上调试成功。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（信息的兄弟们，谁用了这段代码给我留个言)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;/************************************************************&lt;BR&gt;*18B20驱动程序，DQ为数据口，接于P3.7&lt;BR&gt;*11.0592M晶振，上拉4.7k电阻&lt;BR&gt;*Author:fyb&lt;BR&gt;*2005-3-25 11:23，OK!&lt;BR&gt;*************************************************************/&lt;BR&gt;#include&amp;lt;reg51.h&amp;gt;&lt;BR&gt;#include&amp;lt;intrins.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#define uchar unsigned char&lt;BR&gt;#define uint&amp;nbsp; unsigned int&lt;/P&gt;
&lt;P&gt;sbit dq = 0xB7;&lt;BR&gt;bit&amp;nbsp; flag;&lt;BR&gt;uint Temperature;&lt;BR&gt;uchar temp_buff[9]; //存储读取的字节，read scratchpad为9字节，read rom ID为8字节&lt;BR&gt;uchar id_buff[8];&lt;BR&gt;uchar *p;&lt;BR&gt;uchar crc_data;&lt;BR&gt;sfr DS1=0x80;&lt;BR&gt;sfr DS2=0xA0;&lt;/P&gt;
&lt;P&gt;unsigned char code DS2Code[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x71,0xff};&lt;BR&gt;unsigned char code DS1Code[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0x9d,0xff};&lt;BR&gt;void Delay_xMs(unsigned int x);&lt;BR&gt;uchar code CrcTable [256]={&lt;BR&gt;0,&amp;nbsp; 94, 188,&amp;nbsp; 226,&amp;nbsp; 97,&amp;nbsp; 63,&amp;nbsp; 221,&amp;nbsp; 131,&amp;nbsp; 194,&amp;nbsp; 156,&amp;nbsp; 126,&amp;nbsp; 32,&amp;nbsp; 163,&amp;nbsp; 253,&amp;nbsp; 31,&amp;nbsp; 65,&lt;BR&gt;157,&amp;nbsp; 195,&amp;nbsp; 33,&amp;nbsp; 127,&amp;nbsp; 252,&amp;nbsp; 162,&amp;nbsp; 64,&amp;nbsp; 30,&amp;nbsp; 95,&amp;nbsp; 1,&amp;nbsp; 227,&amp;nbsp; 189,&amp;nbsp; 62,&amp;nbsp; 96,&amp;nbsp; 130,&amp;nbsp; 220,&lt;BR&gt;35,&amp;nbsp; 125,&amp;nbsp; 159,&amp;nbsp; 193,&amp;nbsp; 66,&amp;nbsp; 28,&amp;nbsp; 254,&amp;nbsp; 160,&amp;nbsp; 225,&amp;nbsp; 191,&amp;nbsp; 93,&amp;nbsp; 3,&amp;nbsp; 128,&amp;nbsp; 222,&amp;nbsp; 60,&amp;nbsp; 98,&lt;BR&gt;190,&amp;nbsp; 224,&amp;nbsp; 2,&amp;nbsp; 92,&amp;nbsp; 223,&amp;nbsp; 129,&amp;nbsp; 99,&amp;nbsp; 61,&amp;nbsp; 124,&amp;nbsp; 34,&amp;nbsp; 192,&amp;nbsp; 158,&amp;nbsp; 29,&amp;nbsp; 67,&amp;nbsp; 161,&amp;nbsp; 255,&lt;BR&gt;70,&amp;nbsp; 24,&amp;nbsp; 250,&amp;nbsp; 164,&amp;nbsp; 39,&amp;nbsp; 121,&amp;nbsp; 155,&amp;nbsp; 197,&amp;nbsp; 132,&amp;nbsp; 218,&amp;nbsp; 56,&amp;nbsp; 102,&amp;nbsp; 229,&amp;nbsp; 187,&amp;nbsp; 89,&amp;nbsp; 7,&lt;BR&gt;219,&amp;nbsp; 133, 103,&amp;nbsp; 57,&amp;nbsp; 186,&amp;nbsp; 228,&amp;nbsp; 6,&amp;nbsp; 88,&amp;nbsp; 25,&amp;nbsp; 71,&amp;nbsp; 165,&amp;nbsp; 251,&amp;nbsp; 120,&amp;nbsp; 38,&amp;nbsp; 196,&amp;nbsp; 154,&lt;BR&gt;101,&amp;nbsp; 59, 217,&amp;nbsp; 135,&amp;nbsp; 4,&amp;nbsp; 90,&amp;nbsp; 184,&amp;nbsp; 230,&amp;nbsp; 167,&amp;nbsp; 249,&amp;nbsp; 27,&amp;nbsp; 69,&amp;nbsp; 198,&amp;nbsp; 152,&amp;nbsp; 122,&amp;nbsp; 36,&lt;BR&gt;248,&amp;nbsp; 166, 68,&amp;nbsp; 26,&amp;nbsp; 153,&amp;nbsp; 199,&amp;nbsp; 37,&amp;nbsp; 123,&amp;nbsp; 58,&amp;nbsp; 100,&amp;nbsp; 134,&amp;nbsp; 216,&amp;nbsp; 91,&amp;nbsp; 5,&amp;nbsp; 231,&amp;nbsp; 185,&lt;BR&gt;140,&amp;nbsp; 210, 48,&amp;nbsp; 110,&amp;nbsp; 237,&amp;nbsp; 179,&amp;nbsp; 81,&amp;nbsp; 15,&amp;nbsp; 78,&amp;nbsp; 16,&amp;nbsp; 242,&amp;nbsp; 172,&amp;nbsp; 47,&amp;nbsp; 113,&amp;nbsp; 147,&amp;nbsp; 205,&lt;BR&gt;17,&amp;nbsp; 79,&amp;nbsp; 173,&amp;nbsp; 243,&amp;nbsp; 112,&amp;nbsp; 46,&amp;nbsp; 204,&amp;nbsp; 146,&amp;nbsp; 211,&amp;nbsp; 141,&amp;nbsp; 111,&amp;nbsp; 49,&amp;nbsp; 178,&amp;nbsp; 236,&amp;nbsp; 14,&amp;nbsp; 80,&lt;BR&gt;175,&amp;nbsp; 241, 19,&amp;nbsp; 77,&amp;nbsp; 206,&amp;nbsp; 144,&amp;nbsp; 114,&amp;nbsp; 44,&amp;nbsp; 109,&amp;nbsp; 51,&amp;nbsp; 209,&amp;nbsp; 143,&amp;nbsp; 12,&amp;nbsp; 82,&amp;nbsp; 176,&amp;nbsp; 238,&lt;BR&gt;50,&amp;nbsp; 108,&amp;nbsp; 142,&amp;nbsp; 208,&amp;nbsp; 83,&amp;nbsp; 13,&amp;nbsp; 239,&amp;nbsp; 177,&amp;nbsp; 240,&amp;nbsp; 174,&amp;nbsp; 76,&amp;nbsp; 18,&amp;nbsp; 145,&amp;nbsp; 207,&amp;nbsp; 45,&amp;nbsp; 115,&lt;BR&gt;202,&amp;nbsp; 148, 118,&amp;nbsp; 40,&amp;nbsp; 171,&amp;nbsp; 245,&amp;nbsp; 23,&amp;nbsp; 73,&amp;nbsp; 8,&amp;nbsp; 86,&amp;nbsp; 180,&amp;nbsp; 234,&amp;nbsp; 105,&amp;nbsp; 55,&amp;nbsp; 213, 139,&lt;BR&gt;87,&amp;nbsp; 9,&amp;nbsp; 235,&amp;nbsp; 181,&amp;nbsp; 54,&amp;nbsp; 104,&amp;nbsp; 138,&amp;nbsp; 212,&amp;nbsp; 149,&amp;nbsp; 203,&amp;nbsp; 41,&amp;nbsp; 119,&amp;nbsp; 244,&amp;nbsp; 170,&amp;nbsp; 72,&amp;nbsp; 22,&lt;BR&gt;233,&amp;nbsp; 183,&amp;nbsp; 85,&amp;nbsp; 11,&amp;nbsp; 136,&amp;nbsp; 214,&amp;nbsp; 52,&amp;nbsp; 106,&amp;nbsp; 43,&amp;nbsp; 117,&amp;nbsp; 151,&amp;nbsp; 201,&amp;nbsp; 74,&amp;nbsp; 20,&amp;nbsp; 246,&amp;nbsp; 168,&lt;BR&gt;116,&amp;nbsp; 42,&amp;nbsp; 200,&amp;nbsp; 150,&amp;nbsp; 21,&amp;nbsp; 75,&amp;nbsp; 169,&amp;nbsp; 247,&amp;nbsp; 182,&amp;nbsp; 232,&amp;nbsp; 10,&amp;nbsp; 84,&amp;nbsp; 215,&amp;nbsp; 137,&amp;nbsp; 107,&amp;nbsp; 53};&lt;BR&gt;//&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:延时处理&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void DispNumber(unsigned int x);&lt;BR&gt;void TempDelay (uchar us)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;while(us--);&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:18B20初始化&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void Init18b20 (void)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;dq=1;&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;dq=0;&lt;BR&gt;&amp;nbsp;TempDelay(86);&amp;nbsp;&amp;nbsp; //delay 530 uS//80&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;dq=1;&lt;BR&gt;&amp;nbsp;TempDelay(14);&amp;nbsp;&amp;nbsp; //delay 100 uS//14&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;if(dq==0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;flag = 1;&amp;nbsp;&amp;nbsp; //detect 1820 success!&lt;BR&gt;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;flag = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; //detect 1820 fail!&lt;BR&gt;&amp;nbsp;TempDelay(20);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //20&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;dq = 1;&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:向18B20写入一个字节&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void WriteByte (uchar wr)&amp;nbsp; //单字节写入&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;uchar i;&lt;BR&gt;&amp;nbsp;for (i=0;i&amp;lt;8;i++)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;dq = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;&amp;nbsp;dq=wr&amp;amp;0x01;&lt;BR&gt;&amp;nbsp;&amp;nbsp;TempDelay(5);&amp;nbsp;&amp;nbsp; //delay 45 uS //5&lt;BR&gt;&amp;nbsp;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;&amp;nbsp;dq=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;wr &amp;gt;&amp;gt;= 1;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:读18B20的一个字节&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;uchar ReadByte (void)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //读取单字节&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;uchar i,u=0;&lt;BR&gt;&amp;nbsp;for(i=0;i&amp;lt;8;i++)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;dq = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;u &amp;gt;&amp;gt;= 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;dq = 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;if(dq==1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;u |= 0x80;&lt;BR&gt;&amp;nbsp;&amp;nbsp;TempDelay (4);&lt;BR&gt;&amp;nbsp;&amp;nbsp;_nop_();&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;return(u);&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:读18B20&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void read_bytes (uchar j)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; uchar i;&lt;BR&gt;&amp;nbsp; for(i=0;i&amp;lt;j;i++)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = ReadByte();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p++;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:CRC校验&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;uchar CRC (uchar j)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uchar i,crc_data=0;&lt;BR&gt;&amp;nbsp; &amp;nbsp;for(i=0;i&amp;lt;j;i++)&amp;nbsp; //查表校验&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;crc_data = CrcTable[crc_data^temp_buff[i]];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (crc_data);&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:读取温度&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void GemTemp (void)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; read_bytes (9);&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (CRC(9)==0) //校验正确&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temperature = temp_buff[1]*0x100 + temp_buff[0];&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temperature *= 0.625;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Temperature /= 16;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;TempDelay(1);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:内部配置&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void Config18b20 (void)&amp;nbsp; //重新配置报警限定值和分辨率&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Init18b20();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0xcc);&amp;nbsp; //skip rom&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0x4e);&amp;nbsp; //write scratchpad&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0x19);&amp;nbsp; //上限&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0x1a);&amp;nbsp; //下限&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0x7f);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set 11 bit (0.125)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Init18b20();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0xcc);&amp;nbsp; //skip rom&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0x48);&amp;nbsp; //保存设定值&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Init18b20();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0xcc);&amp;nbsp; //skip rom&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0xb8);&amp;nbsp; //回调设定值&lt;BR&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:读18B20ID&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void ReadID (void)//读取器件 id&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;Init18b20();&lt;BR&gt;&amp;nbsp;WriteByte(0x33);&amp;nbsp; //read rom&lt;BR&gt;&amp;nbsp;read_bytes(8);&lt;BR&gt;}&lt;BR&gt;void DispNumber(unsigned int x)&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;unsigned int TenBit,OneBit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TenBit=x/10;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OneBit=x % 10;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;DS1=DS1Code[TenBit];&lt;BR&gt;&amp;nbsp;DS2=DS2Code[OneBit];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;}&lt;BR&gt;/************************************************************&lt;BR&gt;*Function:18B20ID全处理&lt;BR&gt;*parameter:&lt;BR&gt;*Return:&lt;BR&gt;*Modify:&lt;BR&gt;*************************************************************/&lt;BR&gt;void TemperatuerResult(void)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; &amp;nbsp;p = id_buff;&lt;BR&gt;&amp;nbsp; &amp;nbsp;ReadID();&lt;BR&gt;&amp;nbsp; &amp;nbsp;Config18b20();&lt;BR&gt;&amp;nbsp;Init18b20 ();&lt;BR&gt;&amp;nbsp;WriteByte(0xcc);&amp;nbsp;&amp;nbsp; //skip rom&lt;BR&gt;&amp;nbsp;WriteByte(0x44);&amp;nbsp;&amp;nbsp; //Temperature convert&lt;BR&gt;&amp;nbsp;Init18b20 ();&lt;BR&gt;&amp;nbsp;WriteByte(0xcc);&amp;nbsp;&amp;nbsp; //skip rom&lt;BR&gt;&amp;nbsp;WriteByte(0xbe); &lt;BR&gt;&amp;nbsp;//read Temperature&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;p = temp_buff;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;GemTemp();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;DispNumber(Temperature);//通过数码管显示，当前温度&lt;BR&gt;&amp;nbsp;&amp;nbsp;TempDelay(1000);&lt;BR&gt;}&lt;BR&gt;void main()&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;TemperatuerResult();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;img src ="http://apache.cndev.org/aggbug/46432.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>apache</dc:creator><title>12232 C51程序例子1</title><link>http://apache.cndev.org/archive/2006/06/28/46411.aspx</link><pubDate>2006-06-28 13:55:00Z</pubDate><guid>http://apache.cndev.org/archive/2006/06/28/46411.aspx</guid><wfw:comment>http://apache.cndev.org/comments/46411.aspx</wfw:comment><comments>http://apache.cndev.org/archive/2006/06/28/46411.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://apache.cndev.org/comments/commentRss/46411.aspx</wfw:commentRss><trackback:ping>http://apache.cndev.org/services/trackbacks/46411.aspx</trackback:ping><description>&lt;TR valign="center" align="center"&gt;&lt;TD class=main_ArticleTitle height="50" colspan="2"&gt;
&lt;P&gt;本文章转载自笨笨工作室 bbmcu.com&lt;/P&gt;
&lt;P&gt;注意，本程序是针对网助2号开发板的测试程序，只需要简单修改端口即可用在你的板子上，本程序包括二个C文件，依次是：&lt;BR&gt;（1）yejing.c&lt;BR&gt;（2）lcd.c&lt;BR&gt;下面是各个程序内容：&lt;BR&gt;（1）yejing.c&lt;BR&gt;#include &amp;lt;reg52.h&amp;gt;&lt;BR&gt;#include &amp;lt;intrins.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#define uchar unsigned char&lt;BR&gt;#define ulong unsigned long&lt;BR&gt;#define uint unsigned int&lt;/P&gt;
&lt;P&gt;#define REFRESH_YES&amp;nbsp; 0x25&lt;BR&gt;#define REFRESH_NO&amp;nbsp;&amp;nbsp; 0x52&lt;BR&gt;#define&amp;nbsp; WirlessbufLen&amp;nbsp;8&lt;BR&gt;#define LCDCNT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&amp;nbsp;&lt;/P&gt;
&lt;P&gt;uchar jiffies;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//系统时钟&lt;BR&gt;uchar KeyProcessnum;&lt;BR&gt;sbit LED1 = P1^1;&lt;BR&gt;sbit LED2 = P1^2;&lt;/P&gt;
&lt;P&gt;////////////////////////////////////////////////////////////////////////&lt;BR&gt;//LCD显示用到的三个变量：&lt;BR&gt;////////////////////////////////////////////////////////////////////////&lt;BR&gt;extern uchar lcdcodedsp[LCDCNT];&amp;nbsp;//显示存储数组&lt;BR&gt;extern uchar lcdrefresh;&amp;nbsp;&amp;nbsp;//是否需要刷新&lt;BR&gt;extern uchar lcdsplycnt;&amp;nbsp;&amp;nbsp;//指示显示存储数组循环指&lt;BR&gt;extern bit bScanKey; &amp;nbsp;&amp;nbsp;&amp;nbsp; // 定时扫描标志位&lt;/P&gt;
&lt;P&gt;extern void InitLcd();&amp;nbsp;&amp;nbsp;//LCD显示初始化（00.00）&lt;BR&gt;extern void lcddisply();&amp;nbsp;//LCD显示四个字节&lt;BR&gt;extern void wcom(uchar);//命令，可以定点光标位置，范围80～87，90～97&lt;BR&gt;extern void wdat(uchar);//当前位置显示一个字符&lt;BR&gt;extern void ShowMessage(uchar ,uchar&amp;nbsp; ,uchar);//指定位置显示一串字符&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;void clock_init(void)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;jiffies = 0;&lt;BR&gt;&amp;nbsp;TMOD=0x02;&lt;BR&gt;&amp;nbsp;TH0=TL0=0xa3;&lt;BR&gt;&amp;nbsp;EA=1;&lt;BR&gt;&amp;nbsp;ET0=1;&lt;BR&gt;&amp;nbsp;TR0=1;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;sys_init()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;InitLcd();&lt;BR&gt;&amp;nbsp;clock_init();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;void clock_timer(void) interrupt 1 using 1&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;jiffies++;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;#define SCMD_READ_IIC 0x41&lt;BR&gt;#define SCMD_WRITE_IIC 0x42&lt;/P&gt;
&lt;P&gt;#define SCMD_SET_PORT 0x51&lt;BR&gt;#define SCMD_GET_PORT 0x52&lt;/P&gt;
&lt;P&gt;#define SCMD_RESET 0x61&lt;/P&gt;
&lt;P&gt;#define SCMD_LCD_OUTNUM 0x70&lt;BR&gt;#define SCMD_LCD_OUTNUM1 0x71&lt;BR&gt;#define SCMD_LCD_OUTCHU 0x72&lt;BR&gt;#define SCMD_LCD_OUTHEX 0x73&lt;BR&gt;#define SCMD_LCD_RESET 0x74&lt;BR&gt;#define SCMD_LCD_TEST 0x75&lt;BR&gt;#define SCMD_LCD_CLEAR 0x76&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;unsigned int last1_jiffies=0;&lt;BR&gt;unsigned int last2_jiffies=10;&lt;/P&gt;
&lt;P&gt;void main()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys_init();&lt;BR&gt;&amp;nbsp;LED1 = 0;&lt;BR&gt;&amp;nbsp;LED2 = 1;&lt;BR&gt;&amp;nbsp;while(1)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (jiffies - last1_jiffies &amp;gt;= 20)&amp;nbsp; //每次中断为50us,所以要20次才为1ms&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;last1_jiffies = jiffies;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (last2_jiffies)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last2_jiffies--;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;（2）lcd.c&lt;/P&gt;
&lt;P&gt;#include &amp;lt;reg52.h&amp;gt;&lt;BR&gt;#include &amp;lt;intrins.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#define uchar unsigned char&lt;BR&gt;#define ulong unsigned long&lt;BR&gt;#define uint unsigned int&lt;/P&gt;
&lt;P&gt;/*12232f 管脚定义e*/&lt;BR&gt;sbit sclk=P1^4;&lt;BR&gt;sbit sid=P1^5;&lt;BR&gt;sbit cs=P1^6;&lt;/P&gt;
&lt;P&gt;////////////////////////////////////////////////////////////////////////&lt;BR&gt;//LCD显示用到的三个变量：&lt;BR&gt;////////////////////////////////////////////////////////////////////////&lt;BR&gt;uchar lcdrefresh;&amp;nbsp;&amp;nbsp;//是否需要刷新&lt;BR&gt;//uchar lcdcodedsp[4];&amp;nbsp;//显示存储数组&lt;BR&gt;uchar lcdsplycnt;&amp;nbsp;&amp;nbsp;//指示显示存储数组循环指&lt;BR&gt;///////////////////////////////////////////////////////////////////////&lt;BR&gt;uchar bdata stu;&lt;BR&gt;sbit&amp;nbsp; stu7=stu^7;&lt;BR&gt;sbit&amp;nbsp; stu0=stu^0;&lt;/P&gt;
&lt;P&gt;//----------------忙检测----------------------&lt;BR&gt;void check()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;uchar i;&lt;BR&gt;&amp;nbsp;do&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp; cs=1;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp; sid=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;8;i++)&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sclk=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(i&amp;lt;6)sid=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sid=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sclk=1;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;16;i++)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sclk=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sclk=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(i&amp;lt;=3||(i&amp;gt;=8&amp;amp;&amp;amp;i&amp;lt;=11))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stu&amp;lt;&amp;lt;=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stu0=sid;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cs=0;&lt;BR&gt;&amp;nbsp;}while(stu7==1);&amp;nbsp;&lt;BR&gt;}&lt;BR&gt;//-----Z--------------------------------------&lt;BR&gt;void wcom(uchar x)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;uchar i=0;&lt;BR&gt;&amp;nbsp;check();&lt;BR&gt;&amp;nbsp;cs=1;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;for(i=0;i&amp;lt;8;i++)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; if(i&amp;lt;5)sid=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp; else sid=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sclk=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sclk=1;&amp;nbsp;&lt;BR&gt;&amp;nbsp;}&amp;nbsp;&lt;BR&gt;&amp;nbsp;for(i=0;i&amp;lt;16;i++)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; if(i&amp;lt;4||(i&amp;gt;=8&amp;amp;&amp;amp;i&amp;lt;=11))&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; x&amp;lt;&amp;lt;=1;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp; sid=CY;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sid=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;sclk=0;&amp;nbsp;sclk=1;&lt;BR&gt;&amp;nbsp;}&amp;nbsp;&lt;BR&gt;&amp;nbsp;cs=0;&lt;BR&gt;}&lt;BR&gt;//****************************************&lt;BR&gt;void wdat(uchar x)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;uchar i=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stu=x;&lt;BR&gt;&amp;nbsp;check();&lt;BR&gt;&amp;nbsp;cs=1;&amp;nbsp;&lt;BR&gt;&amp;nbsp;for(i=0;i&amp;lt;8;i++)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(i&amp;lt;5||i==6)sid=1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sid=0;&lt;BR&gt;&amp;nbsp; sclk=0;&lt;BR&gt;&amp;nbsp; sclk=1;&lt;BR&gt;&amp;nbsp;}&amp;nbsp;&lt;BR&gt;&amp;nbsp;for(i=0;i&amp;lt;16;i++)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; if(i&amp;lt;4||(i&amp;gt;=8&amp;amp;&amp;amp;i&amp;lt;=11))&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; x&amp;lt;&amp;lt;=1;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp; sid=CY;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sid=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;sclk=0;&amp;nbsp;sclk=1;&lt;BR&gt;&amp;nbsp;}&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cs=0;&lt;BR&gt;}&lt;BR&gt;void ShowMessage(uchar addr,uchar num,uchar&amp;nbsp; *ptr)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;uchar i;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wcom(addr);&lt;BR&gt;&amp;nbsp;for (i=0;i&amp;lt;num;i++) wdat(ptr[i]);&lt;BR&gt;}&lt;BR&gt;/*-----------------------------------------------------------------------------&lt;BR&gt;----------------------------------------------------------------------初始化*/&lt;BR&gt;void InitLcd()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; wcom(0X30);&lt;BR&gt;&amp;nbsp;&amp;nbsp; wcom(0X3C);&lt;BR&gt;&amp;nbsp;&amp;nbsp; wcom(0X38);&lt;BR&gt;&amp;nbsp;&amp;nbsp; wcom(0X01);&lt;BR&gt;&amp;nbsp;&amp;nbsp; wcom(0X80);&lt;BR&gt;&amp;nbsp;&amp;nbsp; check();&lt;BR&gt;&amp;nbsp;&amp;nbsp; lcdsplycnt=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowMessage(0x80,13,"你好，小笨笨:");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowMessage(0x90,15,"网助计划欢迎您!");&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;/*-----------------------------------------------------------------------------&lt;BR&gt;----------------------------------------------------------------------初始化*/&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;img src ="http://apache.cndev.org/aggbug/46411.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>