<strong id="lmxpx"></strong>
  • <small id="lmxpx"><span id="lmxpx"><p id="lmxpx"></p></span></small>
    <rp id="lmxpx"></rp>
    <progress id="lmxpx"><track id="lmxpx"></track></progress>

    1. <ol id="lmxpx"></ol>
      <rp id="lmxpx"><ruby id="lmxpx"></ruby></rp>
    2. <button id="lmxpx"><acronym id="lmxpx"></acronym></button>
    3. 打印

      [綜合信息] 【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 | 只看該作者
      有點辣啊

      使用特權

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

      本版積分規則

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

      快速回復

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

      論壇熱帖

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