老夫子

    1. 05.23【每日一问】:什么是ADI实验室电路? 25/10496 ADI参考电路 2011-05-24
      之前用过啦 感觉不错 很用心   感觉是一系列的经过验证的电路  可以供芯片选型使用 :)
    2. 支持新版主 嘿嘿 大家可以跟帖说说自己的笔记本维修经历哈 俺家妹妹有个笔记本,某个按键坏掉了,这是不是得全换
    3. 贡献大家都感兴趣的OLED显示汉字源码 30/15855 微控制器 MCU 2010-09-20
      好东西 收着了 谢谢楼主
    4. LPC1114+MP3+数码相框+电子书 原理图 51/23785 NXP MCU 2010-08-24
      已经看到楼主一点点进展 很不错
    5. 真的?哇  那试试看 我在北京 9号那场
    6. 【MCU抉择】DIY智能家居——大投票! 28/6155 DIY/开源硬件专区 2010-07-26
      感觉坛子最近使用LPC的挺多 不如趁热打铁吧
    7. 目前网上查询搜到三家比较有名气的嵌入式培训机构,分别是华清远见,亚嵌,尚观。
    8. 一味追求新鲜玩意也有弊端 呵呵
    9. 很多情况下 酒精是个好东西 呵呵
    10. 飞思卡尔coldfire开发板调试完成 9/6538 NXP MCU 2010-04-21
      不错的东西 呵呵
    11. 现在愈发感到 电磁兼容是个大问题 大家有啥经验分享不
    12. 我对如何编写高质量的程序的看法 1/2639 嵌入式系统 2010-04-21
      #define        SCI_DRIVER /***************************************************************************************** *Copyright:    xxxxxCorporation                                                             * *File name:    SciDriver.c                                                                  * *Author:    Kenny_wang                                                                   * *Version:    V1.0                                                                         * *Date:                                                                        * ******************************************************************************************/ #include    "SciDriverSciDriver.h" #include    "SciDriverSourceFunLst.h" #include    "SciDriverPortsSciconfig.h" /******************************************************************************** * Constant Define                                * ********************************************************************************/ #define        cQBufNormal            0 #define        cQBufFull            1 #define        cQBufEmpty            2 /******************************************************************************** * Queue structure                                * ********************************************************************************/ typedef    struct{         unsigned char     *pIn;         unsigned char     *pOut;         unsigned char     *pStart;         unsigned int     bLength;         unsigned int     wSize;     }QUEUE; /******************************************************************************** * Sci structure                                    * * Including tranmit and receive queue structure and Tx,Rx threshold variabls    * ********************************************************************************/ typedef    struct{         unsigned char     bTxStatus;         unsigned int     wTxLength;         unsigned char     *pbTx;         QUEUE    *pqRx;         unsigned char     bSciType;     }SciStruct; /******************************************************************************** * List of Sci structure and queue                        * ********************************************************************************/ SciStruct    SciList; SciStruct    *pSciIndex; QUEUE    QList; unsigned char     bSciRxBuf[MAX_SCI_BUF_SIZE]; unsigned char     *pSciBuf = bSciRxBuf; unsigned char     bSciNo = 0; /******************************************************************************** * Internal Function Declaration                            * ********************************************************************************/ void    sQInit(QUEUE *pq,unsigned char  *pStart,unsigned int  wSize); unsigned char     sQDataIn(QUEUE *pq,unsigned char  bData); unsigned char     sQDataOut(QUEUE *pq,unsigned char  *pData); /******************************************************************************** *Function name:    sQInit                                * *Parameters:    pq:    pointer to queue structure to be initialized        * *        start:    start address of ring buffer                * *        size:    the size of the ring buffer                * *Description:    initialize a queue structure                    * ********************************************************************************/ void    sQInit(QUEUE *pq,unsigned char  *pStart,unsigned int  wSize) {     pq->pIn = pStart;     pq->pOut = pStart;     pq->pStart = pStart;     pq->bLength = 0;     pq->wSize = wSize; } /******************************************************************************** *Function name:    sQDataIn                            * *Parameters:    pq:    pointer to queue structure to be initialized        * *        data:    the data to be inserted into the queue            * *Returns:    cQBufNormal:    data has been inserted into the queue        * *        cQBufFull:    the buffer is full                * *Description:    insert a data into the queue                    * ********************************************************************************/ unsigned char     sQDataIn(QUEUE *pq,unsigned char  bData) {     if(pq->bLength == pq->wSize)     {         if(pq->pIn == pq->pStart)         {             *(pq->pStart + pq->wSize) = bData;         }         else         {             *(pq->pIn-1) = bData;         }         return(cQBufFull);     }     else     {         *(pq->pIn) = bData;         pq->bLength++;         if(pq->pIn == pq->pStart + pq->wSize - 1)         {             pq->pIn = pq->pStart;         }         else         {             pq->pIn++;         }         return(cQBufNormal);     } } /******************************************************************************** *Function name:    sQDataOut                            * *Parameters:    pq:    pointer to queue structure to be initialized        * *        pdata:    the address to save the data                * *Returns:    cQBufNormal:    data has been inserted into the queue        * *        cQBufEmpty:    the buffer is empty                * *Description:    Get a data from the queue                    * ********************************************************************************/ unsigned char     sQDataOut(QUEUE *pq,unsigned char  *pData) {     if(pq->bLength == 0)     {         return(cQBufEmpty);     }     *pData = *(pq->pOut);     pq->bLength--;     if(pq->pOut == pq->pStart + pq->wSize - 1)     {         pq->pOut = pq->pStart;     }     else     {         pq->pOut++;     }     return(cQBufNormal); } /******************************************************************************** *Function Name:    sInitialSci                            * *Parameters:    bSciId:        sci id                        * *        *bRxBuf:    receive buffer start address            * *        wRxSize:    receive buffer length                * *        bTxBuf:        transmit buffer start address            * *        wTxSize:    transmit buffer length                * *        type:        sci type                    * *Descriptions:    assign and initialize the sci control struct to  sci        * ********************************************************************************/ void    sInitialSci(unsigned int  wRxSize,unsigned char  bType) {     QUEUE    *pq;     SciStruct    *pSci;     pSci = &SciList;     pSciIndex = pSci;     pSci->pqRx = &QList;     pq = pSci->pqRx;     sQInit(pq,pSciBuf,wRxSize);     pSciBuf += wRxSize;     bSciNo++;     pSci->bTxStatus = cSciTxRdy;     pSci->wTxLength = 0;     pSci->bSciType = bType; } /******************************************************************************** *Function Name:    sSciRxISR                            * *Parameters:    bSciId:        sci id                        * *Description:    This function is executed in Sci rx interrupt io2sci rx compare    * *                interrupt.                    * ********************************************************************************/ void    sSciRxISR(void) {     unsigned char     bData;     QUEUE    *pq;     SciStruct    *pSci;     pSci = pSciIndex;     pq = pSci->pqRx;     if(sbGetSciRxRdy() == cSciRxRdy)     {         sSciResetRx();         bData = sbGetSciRxData();         sQDataIn(pq,bData);     } } /******************************************************************************** *Function Name:    sSciRead                            * *Parameters:    bSciId:        sci id                        * *        *pBuf:        address to save data received            * *Returns:    cSciRxBufEmpty:    receive  buffer is empty            * *        cSciRxRdy:    get one byte data successfully            * *Description:    This function is executed in AP                    * ********************************************************************************/ unsigned char     sSciRead(unsigned char  *pBuf) {     QUEUE    *pq;     unsigned char     bTemp;     SciStruct    *pSci;     pSci = pSciIndex;     pq = pSci->pqRx;     OS_ENTER_CRITICAL();     bTemp = sQDataOut(pq,pBuf);     OS_EXIT_CRITICAL();     if(bTemp == cQBufEmpty)     {         return(cSciRxBufEmpty);     }     else     {         return(cSciRxRdy);     } } /******************************************************************************** *Function Name:    sSciTxISR                            * *Parameters:    bSciId:        sci id                        * *Description:    This function is executed in Sci Tx interrupt io2sci Tx compare    * *                interrupt.                    * ********************************************************************************/ void    sSciTxISR(void) {     SciStruct    *pSci;     pSci = pSciIndex;     if(sbGetSciTxRdy() == cSciTxRdy)     {         if(pSci->wTxLength == 0)         {             pSci->bTxStatus = cSciTxRdy;             sSciResetTx();         }         else         {             sSciTxData(*(pSci->pbTx));             (pSci->pbTx)++;             (pSci->wTxLength)--;             sSciResetTx();         }     } } /******************************************************************************** *Function Name:    sSciWrite                            * *Parameters:    bSciId:        sci id                        * *        *pstart:    start address of data to be sent        * *        wLength:    the length of data to be send            * *Returns:    cSciTxBufFull:    transmit  buffer is empty            * *        cSciTxRdy:    send one byte data successfully            * *Description:    This function is executed in AP                    * ********************************************************************************/ unsigned char     sSciWrite(unsigned char  *pStart,unsigned int  wLength) {     SciStruct    *pSci;     pSci = pSciIndex;     if(pSci->bTxStatus == cSciTxBusy)     {         return(cSciTxBusy);     }     OS_ENTER_CRITICAL();     pSci->pbTx = pStart;     pSci->wTxLength = wLength;     pSci->bTxStatus = cSciTxBusy;     sSciTxData(*(pSci->pbTx));     (pSci->pbTx)++;     (pSci->wTxLength)--;     OS_EXIT_CRITICAL();     return(cSciTxRdy); } /******************************************************************************** *Function Name:    sbGetSciTxStatus                        * *Parameters:    bSciId:            sci id                    * *Returns:    sci tx status        cSciTxRdy                * *                    cSciTxBusy                * *Description:    Get the sci trasmit status                    * ********************************************************************************/ unsigned char     sbGetSciTxStatus(void) {     SciStruct    *pSci;     pSci = pSciIndex;     return(pSci->bTxStatus); } /******************************************************************************** *Function Name:    sSetSciBaudRate                            * *Parameters:    bSciId:            sci id                    * *Returns:    bBaudrate        Sci Baudrate                * *Description:    Set the sci baudrate                        * ********************************************************************************/ void    sSetSciBaudRate(unsigned char  bBaudrate) {     sSciChangeBaudRate(bBaudrate); }
    13. 让人体皮肤变为触摸面板~~~ 1/3849 创意市集 2010-03-12
      相关信息:
      美国卡内基梅隆大学(Carnegie Mellon University)宣布,该大学与微软共同开发出了将人体皮肤作为大尺寸触摸屏的技术“Skinput”(英文发布资料)。只需用一只手指点触手掌及手臂等的皮肤表面,即可操作游戏等。 该技术由卡内基梅隆大学的研究生Chris Harrison与微软的研究人员共同开发而成。Skinput是在袖箍内侧安装声波传感器并将其与计算机系统连接。可根据需要配合使用手掌大小的小型投影仪。配带该袖箍后,用一只手的手指敲击手臂及手掌,其振动会转变为声学脉冲,随后在皮肤上像波浪一样传播。臂带上的传感器检测出该脉冲后,传递给分析信息的计算机。 Harrison等通过关注声波脉冲的波形及强度因敲击手臂及手掌的部位不同而发生变化这一点,开发出了根据该波形信息等通知敲击的是手臂哪一部位的软件。“在手臂上,能以95.5%的准确率判断敲击部位”(Harrison)。 Harrison表示,通过利用该功能,可操作各种便携终端。比如,在手臂上将音乐播放器的各种操作划分为几个部位,只需用手指敲击手臂,便可操作与袖箍连接的音乐播放器。如果利用小型投影仪,还可将手臂及手掌作为屏幕来收看或收听音视频以及操作游戏机及手机等。 Skinput利用投影仪等、以手掌等代替手机界面这一点与美国麻省理工学院(MIT)开发的“Sixth Sense”相似。不同的是,利用Skinput时无需使用摄像机。检测敲击部位时,Sixth Sense采用的是基于摄像机的图像识别方法,而Skinput利用的是声波脉冲。另外,Skinput完全聚焦于便携终端界面,并不是实现以计算机信息强化现实信息的增强现实(AR,augmented reality),这一点Skinput与Sixth Sense也不同。 Harrison将Skinput的开发定位于分离便携终端通信等基本功能与界面的研究的一环。目前便携终端的体积越来越小,虽然携带方便这一点非常便利,不过,界面的按钮变小或者画面尺寸变小,反而变得不便于使用。因此,“利用身边的桌子及墙壁作为界面”这一想法便是开发Skinput的初衷。
    14. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12
      自己顶一下 呵呵
    15. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12
    16. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12
    17. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12
    18. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12
    19. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12
    20. 传说中前辈高手的《葵花宝典》手抄本 19/5097 模拟电子 2010-03-12

最近访客

< 1/4 >

统计信息

已有459人来访过

  • 芯积分:3018
  • 好友:1
  • 主题:123
  • 回复:152

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言