<wbr id="9qp22"><legend id="9qp22"><rt id="9qp22"></rt></legend></wbr>
<th id="9qp22"><noframes id="9qp22"><form id="9qp22"></form></noframes></th>

      <dd id="9qp22"><big id="9qp22"><video id="9qp22"></video></big></dd>
      <th id="9qp22"></th>
        <rp id="9qp22"><acronym id="9qp22"></acronym></rp>
        <dd id="9qp22"><pre id="9qp22"></pre></dd>

        1. <dd id="9qp22"><pre id="9qp22"></pre></dd>
          1. 打印

            [綜合信息] 【HC32L136 demo板】+TN9

            [復制鏈接]
            177|5
            跳轉到指定樓層
            樓主
            今晚寫了個TN9的讀取程序,開發環境是IAR。
            代碼:
            /******************************************************************************
            * Include files
            ******************************************************************************/
            #include "gpio.h"

            /******************************************************************************
            * Local pre-processor symbols/macros ('#define')
            ******************************************************************************/
            typedef unsigned char uchar;   




            void ACK_0() { Gpio_ClrIO(GpioPortB, GpioPin8);}  //
            void ACK_1() { Gpio_SetIO(GpioPortB, GpioPin8);}



            #define DATA            Gpio_GetInputIO(GpioPortC, GpioPin10)

            #define CLOCK           Gpio_GetInputIO(GpioPortC, GpioPin12)



            float Temp;
            float Temp1,Temp2;
            unsigned char ReadData[5];
            unsigned int a,b;

            //-----------------------------------------------------------------------------------------
            //函數名稱:Delay()
            //功    能:延時子程序
            //-----------------------------------------------------------------------------------------
            void Delay(unsigned char us)  //5,7,9
            {
              while(--us);  
            }

            //-----------------------------------------------------------------------------------------
            //函數名稱:Delayms()
            //-----------------------------------------------------------------------------------------
            void Delayms(unsigned int ims)
            {
              unsigned int i,j;
                for(i=0;i<ims;i++)
                  for(j=0;j<65;j++) { Delay(1); }
            }

            void InitIO(void)
            {
                stc_gpio_config_t pstcGpioCfg;
                //stc_gpio_config_t stcGpioCfg;

                ///< 打開GPIO外設時鐘門控
                Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

                ///< 端口方向配置->輸出
                pstcGpioCfg.enDir = GpioDirOut;
                ///< 端口驅動能力配置->高驅動能力
                pstcGpioCfg.enDrv = GpioDrvH;
                ///< 端口上下拉配置->無上下拉
                pstcGpioCfg.enPuPd = GpioNoPuPd;
                ///< 端口開漏輸出配置->開漏輸出關閉
                pstcGpioCfg.enOD = GpioOdDisable;
                ///< 端口輸入/輸出值寄存器總線控制模式配置->AHB
                pstcGpioCfg.enCtrlMode = GpioAHB;

                ///< GPIO IO PD05初始化(PD05在STK上外接LED)
                Gpio_Init(GpioPortD, GpioPin5, &pstcGpioCfg);

                Gpio_Init(GpioPortB, GpioPin8, &pstcGpioCfg);

                 ///< 端口方向配置->輸入
                pstcGpioCfg.enDir = GpioDirIn;
                ///< 端口驅動能力配置->高驅動能力
                pstcGpioCfg.enDrv = GpioDrvL;
                ///< 端口上下拉配置->上拉
                pstcGpioCfg.enPuPd = GpioPu;
                ///< 端口開漏輸出配置->開漏輸出關閉
                pstcGpioCfg.enOD = GpioOdDisable;
                ///< 端口輸入/輸出值寄存器總線控制模式配置->AHB
                pstcGpioCfg.enCtrlMode = GpioAHB;

                ///< GPIO IO PD04初始化(PD04在STK上外接KEY(USER))
                Gpio_Init(GpioPortC, GpioPin10, &pstcGpioCfg);
                Gpio_Init(GpioPortC, GpioPin12, &pstcGpioCfg);
            }

            void TN_IRACK_EN(void)
            {
                    ACK_0();
                    Delay(1);
            }


            void TN_IRACK_UN(void)
            {
                    ACK_1();
                    Delay(1);
            }
            void TN_ReadData(unsigned char Flag)
            {
                    unsigned char i,j,k,BitState=0;
                    for(k=0;k<7;k++)
                    {
                            for(j=0;j<5;j++)
                            {
                                    for(i=0;i<8;i++)
                                    {
                                            while(1)
                                            {
                                              if(CLOCK==0)
                                                break;
                                              Delay(1);
                                            }
                                            Delay(1);
                                            if(DATA==1)
                                              BitState=1;
                                            else
                                              BitState=0;
                                            ReadData[j]= ReadData[j]<<1;
                                            ReadData[j]= ReadData[j]|BitState;
                                            Delay(1);
                                            while(1)
                                            {
                                              if(CLOCK==1)
                                                break;
                                              Delay(1);
                                            }
                                    }
                            }
                            if(ReadData[0]==Flag)
                                    k=8;
                    }
                    TN_IRACK_UN();
            }
            float TN_GetData(unsigned char X)
            {
                    //Ack_Clk_Data_init;
                    InitIO();
                    TN_ReadData(X);
                    Temp=(ReadData[1]<<8)|ReadData[2];
                    Temp=(float)Temp/16.00-273.15;
                    return Temp;
            }
            float TN_GetTemp(unsigned char mode)
            {
                   
                    float T;
                   
                    {       
                            TN_IRACK_UN();
                            TN_IRACK_EN();
                            if(mode==0)
                            {
                                    T=TN_GetData(0x4c);
                           
                            }
                            else
                            {
                                    T=TN_GetData(0x66);
                                   
                            }
                    }
                   
                   
                    return T;
            }
            /**
            ******************************************************************************
            ** \brief  Main function of project
            **
            ** \return uint32_t return value, if needed
            **
            ** This sample
            **
            ******************************************************************************/
            int32_t main(void)
            {
                InitIO();
                while(1)
                {
                    Temp1=TN_GetTemp(0);
                    Temp2=TN_GetTemp(1);
                    a=((unsigned int)(Temp1*10));
                    b=((unsigned int)(Temp2*10));
                    Delayms(1500);
                }
            }

            效果圖:

            圖中289表示28.9度,290表示29度。
            a是體溫,b是環境溫度。


            其中Data腳接PC10,Clock接PC12。有個問題不明白,一開始Data腳接PB5,Clock接PB7則讀取不對。
            有高手知道,望告知。謝謝!

            使用特權

            評論回復
            沙發
            | 2019-9-27 08:03 | 只看該作者
            手動點個贊!

            使用特權

            評論回復
            板凳
            | 2019-10-3 10:39 | 只看該作者
            謝謝分享!

            使用特權

            評論回復
            地板
            | 2019-10-10 15:18 | 只看該作者
            tn9是啥

            使用特權

            評論回復
            5
             樓主 | 2019-10-10 15:30 | 只看該作者

            紅外體溫計

            使用特權

            評論回復
            6
            | 2019-10-10 15:51 | 只看該作者
            有點辣啊

            使用特權

            評論回復
            掃描二維碼,隨時隨地手機跟帖
            您需要登錄后才可以回帖 登錄 | 注冊

            本版積分規則

            我要發帖 投訴建議 創建版塊 申請版主

            快速回復

            您需要登錄后才可以回帖
            登錄 | 注冊
            高級模式

            論壇熱帖

            在線客服 快速回復 返回頂部 返回列表
            成人短片线上看