2010
04.01

一哥们儿隔壁新搬来个老外,
一天晚上老外敲门求助,
说:“我的电视坏了,不能换台。”
这哥们儿低头看了眼表,
很镇定的说: “全国的电视在晚上七点到七点半都会发作这种病毒的。”

——逛CB的时候发现的小笑话,贴过来共享下。

话说我在网上淘来的T恤到了,就是那个印着和谐社会的黑色T恤,还是毛体的(虽说和谐社会是胡总提出来的)。嗯,没找见黑色的大图,就贴个白色的图吧。那个图片是在淘宝网上面扒下来的,我用一哈,应该算不得盗图吧。(算?不算?……碎碎念)

和谐社会

和谐社会

这两天一直在焊PCB板,板子是我这办公室大BOSS用protel99se画的,给PCB板厂子做好之后,拿给我们这些小兵伢,让我们先打几个样。不知道打样是什么意思?就是先把产品做成一个或几个成品,以后,工人们就可以拿来做样本用。这套板子一共有22块,每块板子又要打3份样,这样算来一共就有66块板子。大体上数了下,两天时间我一共焊了30块板子左右,可谓战功卓著,O(∩_∩)O。

好像是前天,带我论文的老师终于定下来了,是武科大本部的一个黄老师,还是个女老师,/se。老师说她最近比较忙,让我过了清明再联系她,大概是她家里有什么事,既然都晚了这么多天,也不差这几天啦,我这人还是很好说话滴。

昨天,去老厂“打酱油”,蹭了叶工一顿夜宵,“云吞”(音),看起来就像我们北方的馄饨,吃起来……也像馄饨,就是皮比馄饨滑一些。吃完“云吞”,在云吞店门口,终于发现一个高过170的美女,在广州,在我们这犄角旮旯,竟然有这么高的美女,我们一行人惊为天人,纷纷上前与之比高,直接把人家女女吓跑了……

嗯,广州的水果很便宜哦,尤其是香蕉才8毛钱一斤,好一点的也就1块3,便宜的不得了。来这里尝了个鲜,名叫番石榴,别名芭乐鸡屎拔,好恶的名字,还不记得芭乐?非让我说出来?好吧,我说,香蕉你个芭乐……这下都了了吧?非让我说脏话。诶,和谐社会~!

(就写到这吧,终于不算跑题了,最后一段还能点题。额。好吧,我承认,题目是我写完这个日志之后才填上去的。=。=)

2010
03.28
看~灰机~

看~灰机~

先解释下标题的意思,那句话后面还有一句:内裤里撒盐——咸(闲)的蛋疼,呵呵。

前些日子找了个实习单位,在广州的白云区。由于离白云机场相当的近,天天灰机不停的灰过来又灰过去,好似只有早上灰机才能稍微安稳点。而且灰机灰过去的时候,用联通的号往外打电话会串音,经过本人测试很多遍。比如说给某男打电话的时候,接电话的往往是个八竿子打不着的女人,而且通话时间只有短短的10多秒就哧哧啦啦的断掉了o(∩_∩)o

来公司里确实学到了不少东西,刚写完一个由STC12C2052驱动的程序,这个程序能测量电机转速,然后根据转速调节PWM输出(电压),从而控制电机的转速(另外一块板子的功能)。其实我要做挺简单,只是在学校里面没有接触过这个芯片,对他有些地方不是很了解,PWM输出部分老是拿不下具体的步骤,还是在叶工的指导下完成的这个小程序。算是为公司出了点小力吧,嘿嘿。

这个程序还是比较有代表性的,一般调压系统都是通过带有D/A的单片机来实现的,方框图如图1所示。

图一 带AD的单片机调压方框图

但是,由于带有D/A的单片机比较贵,因而会增加产品成本。而如果把PWM调制信号的频率提高,再经过一个简单的二阶有源低通滤波器来产生调压偏移量,则可用不带D/A转换的单片机来实现调压,这样可以大大节省成本。其改进后的电路方框图如图2所示。

图二 不带AD的单片机调压方框图

还有,我们的毕业论文指导老师一直没有定下来,学校要我们在当初选的“3个题目里面随便选一个先做着,老师定下来再说”~~相当郁闷,不过学校的话还是要听的。只记得当时的3个题目里面有一个是根据室内温度调节风扇速度的,我就拿那个程序修改一下就可以了,哇哈哈……

额,其实也不怎么闲,感觉又跑题了,就这,骚扰下,省的大家把我忘记鸟。

2010
03.27

74LS164级联控制5个数码管静态显示
仿真图:

74LS164级联控制5个数码管静态显示

74LS164级联控制5个数码管静态显示


源程序:

#include <reg52.h>
#include "MacroAndConst.h"

uint8 LEDBuffer[5]={0};                //显示缓冲区

//code uint8 tab[]={0x3F,0×06,0x5B,0x4F,0×66,0x6D,0x7D,0×07,0x7F,0x6F,0×40};    //共阴极
code uint8 tab[]={0xC0,0xF9,0xA4,0xB0,0×99,0×92,0×82,0xF8,0×80,0×90,0xbf};    //共阳极

sbit LED_DAT=P1^6;
sbit LED_CLKE=P1^5;

void bit_dat(bit i)                //向数码管写一个位
{
    LED_CLKE=0;
    LED_DAT=i;
    LED_CLKE=1;
}

void uint_dat(uint8 i)                //向数码管写一个字母,8位
{
    LED_CLKE=0;
    bit_dat((bit)(tab[i]&0×80));
    bit_dat((bit)(tab[i]&0×40));
    bit_dat((bit)(tab[i]&0×20));
    bit_dat((bit)(tab[i]&0×10));
    bit_dat((bit)(tab[i]&0×08));
    bit_dat((bit)(tab[i]&0×04));
    bit_dat((bit)(tab[i]&0×02));
    bit_dat((bit)(tab[i]&0×01));
    LED_CLKE=0;
}
                                      
void uchar_dat()                //把缓存区的5个字符输入到5个数码管中
{
    int j;
    for(j=0;j<5;j++)
    {
        uint_dat(LEDBuffer[j]);
    }

}

void main()
{
      int i;
      for(i=0;i<5;i++)
      {
           LEDBuffer[i]=i;
      }
      uchar_dat();
      while(1);
}

2010
03.27
/*
stc12c2052AD 头文件。
晓奇原作为tasking c51,winter修改为Keil C
/*————————————————
Byte Registers
————————————————*/
sfr SP  =0×81;
sfr DPL =0×82;
sfr DPH =0×83;
sfr PCON=0×87;
sfr TCON=0×88;
sfr TMOD=0×89;
sfr TL0 =0x8A;
sfr TL1 =0x8B;
sfr TH0 =0x8C;
sfr TH1 =0x8D;
sfr SCON=0×98;
sfr SBUF=0×99;
sfr IE  =0xA8;
sfr IPH =0XB7;        /* 中断优先级扩展寄存器,用于定义扩展中断源的优先级    */
/*
    IPH^7空
    IPH^6(PPCA_LVDH)… PCA扩展定时器中断与低电压中断公用
    IPH^5(PADC_SPIH)… ADC模数转换与SPI传送结束中断公用
    IPH^4(PSH)……… ??
    IPH^3(PT1H)……..
    IPH^2(PX1H)
    IPH^1(PT0H)
    IPH^0(PX0H)
*/
sfr IP =0xB8;        /* 通用中断源的优先级定义寄存器,与IPH合并使用        */
sfr PSW=0xD0;
sfr ACC=0xE0;
sfr=0xF0;

/* —————– P1口IO定义 ——————- */
/* P1M0[7~0] P1M1[7~0]    方向作用                    */
/*    0            0        传统51准双向口模式            */
/*    0            1        推挽输出,上拉20mA            */
/*    1            0        高阻单向输入,AD必须。        */
/*    1            1        开漏输出,AD也可以选择        */
sfr P1  =0×90;                    /* P1口地址     */
sfr P1M0=0×91;                    /* P1口方向0    */
sfr P1M1=0×92;                    /* P1口方向1    */

/* —————– P3口IO定义 ——————- */
/* P3M0[7~0] P3M1[7~0]    方向作用                    */
/*    0            0        传统51准双向口模式            */
/*    0            1        推挽输出,上拉20mA            */
/*    1            0        高阻单向输入,AD必须。        */
/*    1            1        开漏输出,AD也可以选择        */
sfr P3  =0xB0;                /* P3口地址     */
sfr P3M0=0xB1;                /* P3口方向0    */
sfr P3M1=0xB2;                /* P3口方向1    */

/*—————– IAP/IAP 功能寄存器 ———— */
sfr ISP_DATA =0XE2;            /* 收发数据寄存器    */
sfr ISP_ADDRH=0XE3;            /* 目标操作地址高8位*/
sfr ISP_ADDRL=0XE4;            /* 目标操作地址低8位*/
sfr ISP_CMD  =0XE5;            /* 操作指令寄存器    */
sfr ISP_TRIG =0XE6;            /* 触发寄存器        */
sfr ISP_CONTR=0XE7;            /* 控制寄存器        */

/* ————— 新增功能控制寄存器 ————- */
sfr AUXR=0X8E;            /*新增特殊功能寄存器*/
/*
其中:
    AUXR^7(T0x12)..    定时器ct0时钟源设定:0_atbit(传统1/12,1_atbit(1:1不分频;
    AUXR^6(T1x12)..    定时器ct1时钟源设定:0_atbit(传统1/12,1_atbit(1:1不分频;
    AUXR^5(UARTx6). 串口模式0时时钟设定:0_atbit(传统1/12^1_atbit(1/2 2分频;
    AUXR^4(EADCI).. ADC中断允许位:0_atbit(禁止,1_atbit(允许
    AUXR^3(ESPI)… SPI中断允许位:0_atbit(禁止,1_atbit(允许
    AUXR^2(ELVDI).. 低电压中断允许:0_atbit(禁止,1_atbit(允许
                    5V系统3.7V,3V系统2.4V以下发生中断
    AUXR^1/AUXR^0.. 保留
*/

sfr CLOCK_DIV=0XC7;        /* 空闲模式下的时钟分频,可进一步降低功耗    */
sfr WDT_CONTR=0XE1;        /* 看门狗控制寄存器                            */
/* 其中:
    WDT_CONTR^7(WDT_FLAG).. 看门狗溢出标志_atbit(1,可软件清零
    WDT_CONTR^6保留
    WDT_CONTR^5(EN_WDT)…. 看门狗允许标志_atbit(1
    WDT_CONTR^4(CLR_WDT)… 看门狗清零_atbit(1,硬件自动回零
    WDT_CONTR^3(IDLE_WDT)..=1空闲模式下继续工作,_atbit(0空闲模式下不工作
    WDT_CONTR^2~0(PS2~0)… 看门狗溢出时间设定:
    0 0 0 …… 2分频….. @20MHz下  39.3mS
    0 0 1 …… 4分频….. @20MHz下  78.6mS
    0 1 0 …… 8分频….. @20MHz下 157.3mS
    0 1 1 ……16分频….. @20MHz下 314.6mS
    1 0 0 ……32分频….. @20MHz下 629.1mS
    1 0 1 ……64分频….. @20MHz下  1.25S
    1 1 0 …..128分频….. @20MHz下   2.5S
    1 1 1 …..256分频….. @20MHz下    5S
    其他主频下的时间可以参照上表作相应换算。
*/
sfr SADDR         = 0XA9;        /* 从地址,未启用        */
sfr SADEN         = 0XB9;        /* 标识地址,未启用        */
sfr SPI_STATUS=0X84;        /* SPSTAT SPI状态寄存器 */
/*    其中:
    SPSTAT^7(SPIF)…. SPI 传输完成标志。当一次串行传输完成时,SPIF 置位,
                        并当ESPI和EA 都置位时产生中断。当SPI 处于主模式且
                        SSIG_atbit(0 时,如果/SS 为输入并被驱动为低电平,SPIF
                        也将置位。SPIF标志通过软件向其写入“1”清零。
    SPSTAT^6(WCOL)…. SPI 写冲突标志。在数据传输的过程中如果对SPI 数据寄
                        存器SPDAT 执行写操作,WCOL 将置位。WCOL 标志通过软
                        件向其写入“1”清零。
    SPSTAT^5~0保留
*/
sfr SPI_CONTR=0X85;        /* SPI控制寄存器SPCTL    */
/*    其中:
    SPCTL^7(SSIG)……    /SS 忽略。
                        1:MSTR(位4)确定器件为主机还是从机。
                        0:/SS 脚用于确定器件为主机还是从机。/SS 脚可作为I/O
                            口使用(见SPI 主从选择表)。
    SPCTL^6(SPEN)…… SPI 使能。1:SPI 使能。0:SPI 被禁止,所有SPI 管脚都作
                        为I/O 口使用。   
    SPCTL^5(DORD)…… SPI 数据顺序:1:数据字的LSB(最低位) 最先发送;
                        0:数据字的MSB(最高位) 最先发送。
    SPCTL^4(MSTR)…… 主/从模式选择(见SPI 主从选择表)。
    SPCTL^3(CPOL)…… SPI 时钟极性:1:SPICLK 空闲时为高电平。SPICLK 的前时
                        钟沿为下降沿而后沿为上升沿。0:SPICLK 空闲时为低电平。
                        SPICLK 的前时钟沿为上升沿而后沿为下降沿。
    SPCTL^2(CPHA)…… SPI 时钟相位选择:
                        1:数据在SPICLK 的前时钟沿驱动,并在后时钟沿采样。
                        0:数据在/SS 为低(SSIG=00)时被驱动,在SPICLK 的后时钟
                           沿被改变,并在前时钟沿被采样。
                            (注:SSIG_atbit(1 时的操作未定义)
    SPCTL^1~0(SPR1~0)…SPR0/SPR1是SPI 时钟速率选择控制位。
                        SPR1^SPR0:
                            0 0 -CPU_CLK/4
                            0 1 -CPU_CLK/16
                            1 0 -CPU_CLK/64
                            1 1 -CPU_CLK/128
*/
sfr SPI_DATA  =0X86;        /* SPI数据收发寄存器SPDAT    */
sfr ADC_CONTR =0XC5;        /* ADC控制寄存器            */
/*    其中:
    ADC_CONTR^7(ADC_POWER)..ADC 电源控制位。0:关闭;1:打开.
                            启动AD 转换前一定要确认AD 电源已打开,AD 转换结束
                            后关闭AD 电源可降低功耗,也可不关闭。初次打开内部
                            A/D 转换模拟电源,需适当延时,等内部模拟电源稳定
                            后,再启动A/D 转换建议启动A/D 转换后,在A/D 转换
                            结束之前,不改变任何I/O 口的状态,有利于高精度A/D
                            转换.
    ADC_CONTR^6~5(SPEED1~0).模数转换器转换速度控制位
        SPEED1 SPEED0         A/D 转换所需时间
            1     1            210个时钟周期转换一次,CPU 工作频率20MHz 时,A/D转
                            换速度约 100KHz
            1    0            420个时钟周期转换一次
            0    1            630个时钟周期转换一次
            0    0            840个时钟周期转换一次
    ADC_CONTR^4(ADC_FLAG)…模数转换器转换结束标志位,当A/D 转换完成后,ADC_FLAG
                            _atbit( 1,要由软件清0。不管是A/D 转换完成后由该位申请产
                            生中断,还是由软件查询该标志位A/D 转换是否结束,当A/D
                             转换完成后,ADC_FLAG= 1,一定要软件清0。
    ADC_CONTR^3(ADC_START)…模数转换器(ADC)转换启动控制位,设置为1时,开始转换
    ADC_CONTR^2~0(CHS2~0)….CHS0:模拟输入通道选择
        CHS2 CHS1 CHS0    模拟输入通道选择
            0 0 0         选择 P1.0 作为A/D 输入来用
            0 0 1         选择 P1.1 作为A/D 输入来用
            0 1 0         选择 P1.2 作为A/D 输入来用
            0 1 1         选择 P1.3 作为A/D 输入来用
            1 0 0         选择 P1.4 作为A/D 输入来用
            1 0 1         选择 P1.5 作为A/D 输入来用
            1 1 0         选择 P1.6 作为A/D 输入来用
            1 1 1         选择 P1.7 作为A/D 输入来用
*/
sfr ADC_DATA=0XC6;        /* A/D 转换结果特殊功能寄存器 */
sfr CCON=0XD8;        /* PCA 控制寄存器,支持位寻址后面有定义*/
/*    其中:
    CCON^7(CF)……PCA计数器阵列溢出标志。计数值翻转时该位由硬件置位。
                    如果CMOD寄存器的ECF位置位, CF标志可用来产生中断。
                    CF位可通过硬件或软件置位, 但只可通过软件清零。
    CCON^6(CR)……PCA计数器阵列运行控制位。该位通过软件置位, 用来起
                    动PCA计数器阵列计数。该位通过软件清零, 用来关闭
                    PCA计数器。
    CCON^5~2保留
    CCON^1(CCF1)….PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。
                    该位必须通过软件清零。
    CCON^0(CCF0)….PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。
                    该位必须通过软件清零。
*/

sfr CMOD    =0XD9;        /* PCA 模式寄存器 */
/*    其中:
    CMOD^7(CIDL)….计数器阵列空闲控制:CIDL_atbit(0时,空闲模式下PCA计数器继
                    续工作。CIDL=1时,空闲模式下PCA计数器停止工作。
    CMOD^6~3保留
    CMOD^2~1(CPS1,CPS0)PCA计数脉冲选择
        CPS1 CPS0     选择PCA 时钟源输入
        0    0         0,内部时钟,Fosc/12
        0    1        1,内部时钟,Fosc/2
        1    0        2,定时器0溢出,由于定时器0可以工作在1T方式,所以可以
                        达到计一个时钟就溢出, 频率反而是最高的, 可达
                        到Fosc
        1    1        3,ECI/P3.4脚的外部时钟输入(最大速率_atbit(Fosc/2)
    CMOD^0(ECF)…..PCA计数溢出中断使能:ECF_atbit(1时,使能寄存器CCON CF位的
                    中断。ECF_atbit(0时,禁止该功能。
*/

sfr CH            = 0XF9;        /* PCA计数器初始值高8位    */
sfr CL         = 0XE9;        /* PCA计数器初始值低8位    */
sfr CCAPM0    =0XDA;        /* PCA 比较/ 捕获模块寄存器0    */
/*
    CCAPM0^7保留
    CCAPM0^6(ECOM0)…….. 使能比较器。ECOM0= 1时使能比较器功能。
    CCAPM0^5(CAPP0)…….. 正捕获。CAPP0= 1时使能上升沿捕获。
    CCAPM0^4(CAPN0)…….. 负捕获。CAPN0= 1时使能下降沿捕获。
    CCAPM0^3(MAT0)……… 匹配。当MAT0= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将置位CCON寄存器的中断标志位CCF0。
    CCAPM0^2(TOG0)………    翻转。当TOG0= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将使CEXn脚翻转。(CEX0/P3.7)
    CCAPM0^1(PWM0)……… 脉宽调节模式。当PWM0= 1时, 使能CEXn脚用作脉宽调
                            节输出。
    CCAPM0^0(ECCF0)…….. 使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF0,
                            用来产生中断。
使用的机种基本模式组合:
ECOM0 CAPP0 CAPN0 MAT0    TOG0 PWM0 ECCF0            模块功能
    0    0      0        0    0     0        0        无此操作
    X    1      0        0    0     0        X        16位捕获模式,由CEX0的上升沿触发
    X    0      1        0    0     0        X        16位捕获模式,由CEX0的下降沿触发
    X    1      1        0    0     0        X        16位捕获模式,由CEX0的跳变触发
    1    0      0        1    0     0        X        16位软件定时器
    1    0      0        1    1     0        X        16位高速输出
    1    0      0        0    0     1        0        8位PWM
*/
sfr CCAP0H   =0XFA;        /* 当出现捕获或比较时,它们用来保存16 位的计数值。
                               当PCA 模块用在PWM 模式中时,它们用来控制输出的
                               占空比。CCAP0H.CCAP0L分别为高低8位,组合使用    */
sfr CCAP0L   =0XEA;
sfr PCA_PWM0 =0XF2;        /* PWM下9位数的最高位
                                PCA_PWM0^1(EPC0H)….在PWM模式下,与CCAP0H组成9位数
                                PCA_PWM0^0(EPC0L)….在PWM模式下,与CCAP0L组成9位数
                            */
sfr CCAPM1  =0XDB;        /* PCA 比较/ 捕获模块寄存器1,支持位寻址定义在后面 */
/*
    CCAPM1^7保留
    CCAPM1^6(ECOM1)…….. 使能比较器。ECOM1= 1时使能比较器功能。
    CCAPM1^5(CAPP1)…….. 正捕获。CAPP1= 1时使能上升沿捕获。
    CCAPM1^4(CAPN1)…….. 负捕获。CAPN1= 1时使能下降沿捕获。
    CCAPM1^3(MAT1)……… 匹配。当MAT1= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将置位CCON寄存器的中断标志位CCF1。
    CCAPM1^2(TOG1)………    翻转。当TOG1= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将使CEXn脚翻转。(CEX1/P3.5)
    CCAPM1^1(PWM1)……… 脉宽调节模式。当PWMn= 1时, 使能CEXn脚用作脉宽调
                            节输出。
    CCAPM1^0(ECCF1)…….. 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1,
                            用来产生中断。

使用的机种基本模式组合:
ECOM1 CAPP1 CAPN1 MAT1    TOG1 PWM1 ECCF1            模块功能
    0    0      0        0    0     0        0        无此操作
    X    1      0        0    0     0        X        16位捕获模式,由CEX1的上升沿触发
    X    0      1        0    0     0        X        16位捕获模式,由CEX1的下降沿触发
    X    1      1        0    0     0        X        16位捕获模式,由CEX1的跳变触发
    1    0      0        1    0     0        X        16位软件定时器
    1    0      0        1    1     0        X        16位高速输出
    1    0      0        0    0     1        0        8位PWM
*/
sfr CCAP1H   =0XFB;        /* 当出现捕获或比较时,它们用来保存16 位的计数值。
                               当PCA 模块用在PWM 模式中时,它们用来控制输出的
                               占空比。CCAP1H.CCAP1L分别为高低8位,组合使用    */

sfr CCAP1L   =0XEB;
sfr PCA_PWM1 =0XF3;        /* PWM下9位数的最高位
                                PCA_PWM1^1(EPC1H)….在PWM模式下,与CCAP1H组成9位数
                                PCA_PWM1^0(EPC1L)….在PWM模式下,与CCAP1L组成9位数
                            */

/*————————————————
PCON Bit Values
————————————————*/
#define IDL_    0×01
#define STOP_   0×02
#define EWT_    0×04
#define EPFW_   0×08
#define WTR_    0×10
#define PFW_    0×20
#define POR_    0×40
#define SMOD_   0×80

/*————————————————
TCON Bit Registers
————————————————*/
sbit     IT0=TCON^0;
sbit     IE0=TCON^1;
sbit     IT1=TCON^2;
sbit     IE1=TCON^3;
sbit     TR0=TCON^4;
sbit     TF0=TCON^5;
sbit     TR1=TCON^6;
sbit     TF1=TCON^7;

/*————————————————
TMOD Bit Values
————————————————*/
#define T0_M0_   0×01
#define T0_M1_   0×02
#define T0_CT_   0×04
#define T0_GATE_ 0×08
#define T1_M0_   0×10
#define T1_M1_   0×20
#define T1_CT_   0×40
#define T1_GATE_ 0×80

#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F

/*————————————————
P1 Bit Registers
————————————————*/
sbit     P1_0= P1^0;
sbit     P1_1= P1^1;
sbit     P1_2= P1^2;
sbit     P1_3= P1^3;
sbit     P1_4= P1^4;
sbit     P1_5= P1^5;
sbit     P1_6= P1^6;
sbit     P1_7= P1^7;

sbit     ADC0= P1^0;       /* + Analog input */
sbit     ADC1= P1^1;       /* + Analog input */
sbit     ADC2= P1^2;       /* + Analog input */
sbit     ADC3= P1^3;       /* + Analog input */
sbit     ADC4= P1^4;       /* + Analog input */
sbit     ADC5= P1^5;       /* + Analog input */
sbit     ADC6= P1^6;       /* + Analog input */
sbit     ADC7= P1^7;       /* + Analog input */

/* SPI 专用IO */
sbit     SS  = P1^4;        /* 主从SPI选择,外部输入P1.4_atbit(0为从机*/
sbit     MOSI= P1^5;        /* 主输出/从输入    */
sbit     MISO= P1^6;        /* 主输入/从输出    */
sbit     SCLK= P1^7;        /* SPI时钟,主方输出,从方接收    */

/*————————————————
SCON Bit Registers
————————————————*/
sbit     RI  = SCON^0;
sbit     TI  = SCON^1;
sbit     RB8 = SCON^2;
sbit     TB8 = SCON^3;
sbit     REN = SCON^4;
sbit     SM2 = SCON^5;
sbit     SM1 = SCON^6;
sbit     SM0 = SCON^7;

/*————————————————
IE Bit Registers
————————————————*/
sbit     EX0 = IE^0;       /* 1_atbit(Enable External interrupt 0 */
sbit     ET0 = IE^1;       /* 1_atbit(Enable Timer 0 interrupt */
sbit     EX1 = IE^2;       /* 1_atbit(Enable External interrupt 1 */
sbit     ET1 = IE^3;       /* 1_atbit(Enable Timer 1 interrupt */
sbit     ES  = IE^4;       /* 1_atbit(Enable Serial port interrupt */
sbit     ET2 = IE^5;       /* 1_atbit(Enable Timer 2 interrupt */

sbit     EA  = IE^7;       /* 0_atbit(Disable all interrupts */

/*————————————————
P3 Bit Registers (Mnemonics & Ports)
————————————————*/
sbit     P3_0= P3^0;
sbit     P3_1= P3^1;
sbit     P3_2= P3^2;
sbit     P3_3= P3^3;
sbit     P3_4= P3^4;
sbit     P3_5= P3^5;
/* P3_6 Hardwired as AOUT */
sbit     P3_7= P3^7;

sbit     RXD = P3^0;       /* Serial data input */
sbit     TXD = P3^1;       /* Serial data output */
sbit     INT0= P3^2;       /* External interrupt 0 */
sbit     INT1= P3^3;       /* External interrupt 1 */
sbit     T0  = P3^4;       /* Timer 0 外部时钟输入口P3.4 */
sbit     ECI = P3^4;       /* PCA计数器阵列的可选外部时钟输入口P3.4 */
sbit     T1  = P3^5;       /* Timer 1 外部时钟输入口P3.5 */
sbit     CEX1= P3^5;        /* PCA计数器与模块的比较/捕获寄存器的值的匹配时的输出口*/
sbit     PWM1= P3^5;        /* PWM方式时PWM1的输出口P3.5/PCA1反相输出*/
sbit     CEX0= P3^7;        /* PCA计数器与模块的比较/捕获寄存器的值的匹配时的输出口*/
sbit     PWM0= P3^7;        /* PWM方式时PWM0的输出口P3.7/PCA0反相输出*/

/*————————————————
IP 中断优先级寄存器低8位
————————————————*/
sbit     PX0 = IP^0;        /* 外部中断0 P3.2    */
sbit     PT0 = IP^1;        /* 定时计数器0中断    */
sbit     PX1 = IP^2;        /* 外部中断1 P3.3    */
sbit     PT1 = IP^3;        /* 定时计数器1中断    */
sbit     PS  = IP^4;        /* 通信中断RI或TI    */

/*————————————————
PSW Bit Registers
————————————————*/
sbit     P   = PSW^0;
sbit     FL  = PSW^1;
sbit     OV  = PSW^2;
sbit     RS0 = PSW^3;
sbit     RS1 = PSW^4;
sbit     F0  = PSW^5;
sbit     AC  = PSW^6;
sbit     CY  = PSW^7;

/*————————————————
PCA 控制寄存器CCON Bit Registers
————————————————*/
sbit     CCF0= CCON^0;    /*PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。
                      该位必须通过软件清零。*/
sbit     CCF1= CCON^1;    /*PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。
                      该位必须通过软件清零。*/
sbit     CR  = CCON^6;    /*PCA计数器阵列运行控制位。该位通过软件置位, 用来起
                      动PCA计数器阵列计数。该位通过软件清零, 用来关闭
                      PCA计数器。*/
sbit     CF  = CCON^7;    /*PCA计数器阵列溢出标志。计数值翻转时该位由硬件置位。
                      如果CMOD寄存器的ECF位置位, CF标志可用来产生中断。
                      CF位可通过硬件或软件置位, 但只可通过软件清零。*/

2009
12.29

很简单,在系统的hosts文件里面的最下面,加上两句话:

74.125.39.99 chrome.google.com
74.125.47.139 clients2.google.com

前者解决打不开网页,后者解决无法下载插件。
如何修改hosts请去百度Google一下,域名解析地址来源:http://www.williamlong.info/blog/archives/369.html
现在你可以访问https://chrome.google.com/extensions下载你喜欢的插件咯~

本文纯属凑字数。好久没写东西,冒个泡,省的大家都把我忘记鸟~

2009
11.28

World of Goo《粘粘世界》

研发公司:2D Boy

游戏类型:益智

蛋疼指数:★★★★☆

基本内容:

《粘粘世界》以凯勒·加布勒的概念游戏《Tower of Goo》为原型,主要玩法是利用粘性小球“粘豆包”(Goo)来构建建筑框架。游戏被分为五个章节,并细分为多个关卡。游戏吸取了蒂姆·伯顿电影作品的特点,让每个章节都有不同的主题画面和音乐风格,渲染出不一样的气氛,此外,游戏提供了联机竞技模式,玩家需要用有限的粘豆包建造尽可能高的结构。玩家的记录会被上传到2D Boys的服务器,让全球其它玩家来挑战记录。

游戏规则:

每个关卡的基本目标是收集一定数量的粘豆包到引向关卡外的水管。玩家要想方设法运用粘豆包构造桥梁、高塔等结构,同时克服重力和裂口、山峰、峭壁、尖刺等不利地形,最终将建筑搭建到水管口,以让没有用于搭建结构的粘豆包进入。如果玩家成功地搜集到了足够多的粘豆包就过关了。如果收集的粘豆包多于标准数额,多出部分可以在联机模式使用。

游戏中有各种各样的粘豆包,各有特点。灰色和绿色的粘豆包可以和周围2-3个结构块连接;半透明的粘豆包则只能和1个结构块连接,它们可以形成一个长链进行特种运输任务;大部分粘豆包塑型后不能回收,但绿色的粘豆包是可以取下再利用的;红棕色的粘豆包组成的结构靠近火源会起火燃烧。部分关卡的水管只能接收特定的粘豆包。在许多关卡中有气球可以让玩家使用,气球可以一定程度上克服重力对建筑结构的影响,取下的气球可以像粘豆包一样在结构上运动,但不能被任何水管吸收。

根据各关卡的设定,当玩家使用较少的步骤,收集一定量粘豆包,或在一定时间内完成关卡时,即可获得OCD奖。在关卡地图中,已通过OCD挑战的关卡会用写有特殊旗帜在选择关卡的地图中标记。

游戏截图:

World of Goo 1 World of Goo 2

World of Goo 3 World of Goo 4

下载地址:电驴下载


And Yet It Moves《重力世界/撕纸世界》

研发公司:Broken Rules

游戏类型:解谜

蛋疼指数:★★★☆

基本内容:

"重力世界"是一款学生制作的动作解谜类型的参赛游戏,它的试玩版在07年独立游戏节上受到好评,当时的版本只有2个关卡,经过2年多的继续制作开发,游戏推出了正式版,解谜关卡也增加到了共17关,特别推荐给喜爱解谜的玩家,感兴趣的朋友不可错过。

游戏规则:

游戏包括多达17个关卡,在游戏过程中可以欣赏到离奇的游戏世界和独特的画面风格,颠覆性的思维方式动作和解谜的双重挑战会让你体验到前所未有的游戏乐趣,解谜玩家不可错过的经典游戏。在画面,操作方式和谜题设计上,都有自己的独到之处,特别是根据独特的操作来设计的过关谜题,会让你在绞尽脑汁思索来解决谜题的过程中获得难以想象的解谜快感。

游戏采用键盘操作,在游戏开始后,会有逐步的操作提示,游戏中你要操纵角色的移动,同时还要根据情况来控制世界的翻转,对玩家的空间感和操作水平都有比较高的要求。

游戏截图: 

And Yet It Moves 1 And Yet It Moves 2

And Yet It Moves 3 And Yet It Moves 4

下载地址:电驴下载


Plants Vs. Zombies《植物大战僵尸》

研发公司:PopCap Games

游戏类型:益智

蛋疼指数:★★★★★

基本内容:

可怕的僵尸即将入侵你的家庭,你唯一的防御方式就是您栽种的植物。一款新奇的游戏即将登陆PC平台,名称为《植物大战僵尸(‘Plants vs. Zombies’ )》。武装您的49种植物,切换他们不同的功能,诸如樱桃炸弹或强悍的食人花,更加快速有效的将僵尸阻挡在入侵的道路上。不同的敌人,不同的玩法构成五种不同的游戏模式,加之夕阳、浓雾以及泳池之类的障碍增加了其挑战性 奇特的游戏乐趣永无止境。

游戏规则:

作为一款小游戏,它成功地借鉴了一些战略游戏的要素——采集资源并利用资源建造其它单位。甚至有一些玩家在拿星际的战略往这款游戏中套用,以阐述这款游戏需要在何时发展“经济”,何时发展“兵力”。游戏中可以选用的植物有40多种,而每个场景最多只能选用10种植物,这就需要玩家根据自己的游戏策略来作出取舍。有的玩家喜欢阻挡僵尸的前进,在后方种植大量的花朵来获取足够的资源,而有的玩家则喜欢在一开始便建造看起来非常顺眼的防御体系。而僵尸的种类也有近三十种,每种都有不同的特点,而每种也都有自己的弱点,针对不同僵尸的弱点来合理地种植植物也是胜利的诀窍。游戏前期会获得植物和僵尸图鉴,通过图鉴可以很直观地看到每种单位的特点,方便布置各种策略。

而随着游戏的推进,各种模式也将不断开启,迷你游戏模式、生存模式、解谜模式等等都由玩家去选择尝试,另外还有非常搞笑的培养模式,各种模式之间又有一定的关联,这款游戏绝不是一款将冒险模式打穿之后就会让人感到索然无味的游戏。

游戏截图:

Plants Vs. Zombies 1 Plants Vs. Zombies 2

Plants Vs. Zombies 3 Plants Vs. Zombies 4

下载地址:电驴下载


Eets《伊特》

研发公司:KLEI

游戏类型:解谜

蛋疼指数:★★★☆

基本内容:

伊特,英文名:Eets,是一只喜欢吃东西的白色小精灵,不同的食物会使它拥有各种神奇的力量,收集拼图是它的最大爱好。

游戏规则:

丰富的游戏道具是这款游戏的一大亮点,游戏中,每个大的关卡道具都不相同,物品种类相当丰富,发挥的作用更是另你想象不到:从大嘴鲸鱼,到放屁猪,再到各种机器人……开动脑筋,来帮助伊特解开谜题收集更多的拼图吧。

游戏截图:

Eets 1 Eets 2

Eets 3 Eets 4

下载地址:电驴下载


Chains《泡泡链》

研发公司:Meridian4

游戏类型:益智

蛋疼指数:★★★★☆

游戏规则:

游戏的目地很简单,把相同颜色邻近的泡泡连起来就可以消除掉。具体操作也很容易上手,点击一个泡泡,然后鼠标经过附近同颜色的泡泡就会拉出一条线,经过的越多当然得分越多,最少连到3颗再点击一下就会消除掉了。当然不是闭着眼消除就可以了,不同的关卡会有不同的目标需要达成,像是第五关,玩家必须一次连出15个泡泡才可以通过。

游戏截图:

Chains 1 Chains 2

Chains 3 Chains 4

下载地址:电驴下载

2009
11.13

image

啥也不说了,要邀请的,留下你的gmail账户,前30名有效……

2009
11.13

不晓得最近怎么搞的,总感觉很纠结,尤其是自从开始每天记账之后,更觉得纠结了。每次消费之前,我总要想想,要花多少钱,这些钱能买几分之几的G3。

哦,忘了说了,我目前打算攒钱买个G3。

当然,对于吃饭,我向来不会纠结,想吃什么吃什么,看着账本上,大多数都是吃早饭,吃中饭,吃晚饭,吃夜宵……感觉自己成了个饭桶。账本上吃饭的钱是一部分,还有其他乱七八糟的,像路费,打印费等等也占了一席之地。

今天跟王方方同学跑到研究生报名点把钱交上了,报名费+准考证邮费一共花了160,算算二十分之一的G3又没了~~诶,我无可救药了。对于考研虽然准备的不怎么样,先试试吧,就当体验考场氛围了~报的是山东理工大学的“检测技术与自动化装置专业”,研究方向是机器人技术。是不是很牛X?哇哈哈……

报名回来,路上突发奇想去看2012,因为今天是第一天上映,那个什么首映是看不到了,总归还是能尝尝鲜的嘛!兴奋的到了电影院,抬头仰望电子公告牌,愕然发现除了早上10点的那一场票价30外,其余的票价都是38……这都没什么,最悲剧的是,我们两人只带了76块钱,里面还得算上要坐公交回校的4块!算了,38也是钱啊,能买一百分之一的G3了,既然老天不让咱消费,那还是攒着吧。

在说说昨天,帮一个女·朋友(中间有个点)的男朋友(这次没点了)做了一个淘宝展示页面,说实话做的很一般,本来想加个flash上去,结果才发现淘宝竟然不支持JS……就把他撤掉了,换上了一些图片。做完之后觉得div确实NB,比表格强太多了。另外那男朋友承诺给我45的佣金,我竟然帮他砍价,说给我交一个月的网费(30)就可以了……

好吧,下面谈谈跟钱没关系(?),跟前途有关系的事情吧。

昨天下午还去面试来着,有个杭州的公司来我们学校招人,招一些管理和销售人员,还有WAP开发工程师。一看跟网页制作有点联系,我拿着简历跑了过去准备看看情况,诺大的教室,只坐了30个人,而且不时有三三两两的同学往外走。从下午2点一直讲到3点半,讲了些公司情况和待遇之类的,包住不包吃。还有毕业之前不签正式合同,借口是杭州政府管理很严格,他解释了半天,我也没明白为嘛没有毕业证就不签正式合同。如果应聘上了WAP开发工程师,第一年就有3K的底薪,汗,又是钱。当我把简历交到他手上,一看是应聘WAP开发工程师的,他说,不好意思,我不懂技术,你回去把相关的作品发到我们邮箱吧。和着我等了2个半小时,是白等了。

今天早上还接到了东莞一个电子厂的电话,说实话,我都不记得是什么时候投过他们的简历了。东莞电子厂多如牛毛,看他那公司只生产数据线之类的,最高档的是CARD READER。去了之后我从基层干起,也就是去车间给他们组装产品。嗯,没谈薪酬,觉得在那里干的话实在是没前途,直接PASS掉。嗯,他们的车间是这样的(来源于他们官网):

2006888756862

2009
11.08

昨天,奋斗了3个星期的论文,总算是马马虎虎过关了。我的论文题目是《项目管理在声导系统中的应用》,其实应该多几个字的,我这论文说的是一个团队在设计声导系统时,如何利用项目管理的相关知识来管理。说实话,当初设计那个声导系统的时候,鬼才考虑项目管理呢,这不是要写论文了么,就上纲上线啦,嘿嘿。

其实写论文挺简单的,第一章是大背景,第二章是相关知识,第三章结合实例写一写,第四章来点展望,第五章写综述和不足,大体上就没错了,按字数比例来说2:3:4:1,差不多就行,当然也可以按照需要左右浮动一点。

除了论文,我们学校还要求每人翻译1W字符的外文文献,其实也不是很多,也就2000~3000个单词左右。主要是外文文献不怎么好找,最后还是Google的文献搜索帮了大忙,如果关键词是英文的话,搜索结果全是英文的论文或期刊之类的。接下来的翻译就好办了,我让Google先翻译一遍,看看哪句话不通顺,改一改就OK了。

写论文最麻烦的就是排版,大标题,次级标题,小标题,页眉页脚,字体,大小……总的来说,花在排版上的时间不比写论文的时间少,尤其是写论文还可以参照别人的,排版就要自己一点一点弄了。嗯,还有一点,就是打印的时候有很多不确定性,主要是Word文档太容易变形,在自己电脑上排的版,拿到打印社电脑上,效果完全不一样,最好的办法就是把Word文档转换成PDF格式,而且最好是图片形式的。

再说说前天吧,也就是答辩的前一天晚上,我们寝室竟然停电了,神奇的是隔壁小区竟然没停电。⊙﹏⊙第二天就要答辩了,论文的电子档还在电脑里面,而且有些地方还需要修改一下。又不清楚几点会来电,纠结了半天,跟寝室的一哥们合计一下,把电脑搬到隔壁小区的出租房里,继续修改论文~接下来的事情直接让我们崩溃了:当我们把电脑搬到隔壁小区,刚把电脑组装好,那哥们的女朋友来电话报喜了,学校来电了!杯具啊……晚上修改完论文,又把电脑搬回了寝室,丫的,这不是没事找事么。

昨天早上8点半开始答辩,于是我们早上6点起床,坐公交1个半小时以后到达武科大,直奔打印社。花了20元大洋,把论文打印出来,我还把论文多打印了一份,以便答辩的时候不至于忘词。其实答辩的时候应该脱稿的,我们老师睁一只眼闭一只眼,也不管我们带不带稿子了。打印完,直奔教室而去……

进了教室,随便找了个位置坐下,随意的往黑板上一看,立马惊呆了,我被安排到第一个答辩!我这什么都没准备呢,就要赶鸭子上架?老师在讲台上讲一些注意事项,我抓紧时间组织了一下语言,等老师讲完了,硬着头皮开始了我人生第一次答辩。

答辩的过程还是挺理想的,大概是第一个的缘故老师都没进入状态?就浅显的问了我几个问题,像你是怎么想到做这个项目的?你的这个项目具体是干嘛的?你这项目有什么应用前景?问了半天,我发现跟管理方面没有任何的关系……估计也跟我的论文有关,比较技术性,他们懂的也不多,项目管理也就那回事,他们也不屑一问(?)迷迷糊糊的就答辩结束了,到最后,我都不清楚是怎么过的……

有很多人答辩挺搞笑的,有一个家伙,他在上面长篇大论的念稿子,老师们估计听的不耐烦了,就说,“这位同学,你的答辩时间不多了,请抓紧时间。”那同学回答的倒是挺干脆的,就俩字,没了。

还有,老师也有犯错的时候,有位老师是专门提醒同学们,轮到谁答辩了。有一个同学刚答辩完,那老师就开始喊上了:“下一位,王浩楠,王浩楠同学在不在,王浩楠~”过了一会,有个弱弱的声音说道:“老师,我叫于洁楠。”

答辩结束后,就是修改毛糙的地方了,例如标题之间不能用顿号啦,图片要标注号码啦之类的小东西,基本上没什么大问题了。有的同学就比较惨了,答辩没过,要重新写论文,诶,我还是比较幸运的……

PS:昨晚我做梦,梦见明天中国建筑低开3个点,一直走平到中午。

2009
11.02

圈子无处不在,如果你不去找圈子,肯定就会让圈子把你排除在圈子之外,到了圈子之外以后,想得到任何的好处都是不可能的。

进入大四已然有近2个月的时间了,班上已然分成了3部分:按部就班的上课流,疯狂的考研流,以及没日没夜的堕落流。另外还有找工作的,貌似没有一个心满意足的,不提也罢。至于我呢?几乎这三个流派都沾上那么一点,但又不似他们那样疯狂,偶尔去教室上上课,偶尔看看大1到大3的书,偶尔玩玩游戏,偶尔为自己以后的出路担心……

按部就班上课流

正如雪纷飞同学说的那样,只要素导(辅导员)承诺考研的同学可以不用来上课,那教室里面肯定不会有很多人了,稀稀落落的散座在教室里(中间靠近老师的位置是人最少的)。不要想当然的认为考研的队伍有多么壮大,中间肯定有人借着幌子不上课的,Including me,嘿嘿……尤其是这两天寒风肆虐,气温直降N度,更没多少人去上课了。

现在的课,老师不认真教,学生不认真学,搞不明白是老师教坏了学生呢,还是学生不努力导致了老师对学生放任自流?额,貌似进入了一个鸡生蛋,蛋生鸡的问题了,算了,不去想他了。

努力冲刺考研流

还有2个月的时间就要研究生考试了,那些报了名并且确实想考研的同学们,一个个都窝在图书馆的自习室。想找到他们其实很简单,因为他们已经完美的做到了寝室、食堂、自习室的三点一线,任凭风吹雨打,我自岿然不动。我也偶尔去图书馆看看报纸期刊什么的,每当看到他们或奋笔疾书,或凝神思考,或埋头大睡……诶,都挺不容易的啊!

没日没夜堕落流

这个流派主攻计算机网游方面的知识,每天盯着屏幕,一直坐到腰酸手冷屁股痛。此流派下设众多分堂,但是人数最多的有两个堂口,一为DNF,一为DOTA。大概是考虑到以后要为生计奔波了,所以到了大四,抓紧时间再玩他一个学期,当做最后的堕落。

差点忘了,还有当下“如日中天”的农夫们。这些农夫辛勤的很呐,甚至还将闹钟设定在早上6点起床偷菜,如果不是早上6点才来电,估计他们能把闹铃设的更早。此游戏的精髓在于:趁人不备、夺其粮食、强大自我。

——纪念即将逝去的大四