2959|1

16

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请问这个开启红外测温模块的几个语句是什么意思 [复制链接]


/*------------------------------------------------
              写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{        
        if (y == 0)
        {     
                 LCD_Write_Com(0x80 + x);     //表示第一行
        }
        else
        {      
                LCD_Write_Com(0xC0 + x);      //表示第二行
        }        
        while (*s)
        {     
                 LCD_Write_Data( *s);     
                 s ++;     
        }
}
/*------------------------------------------------
              初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
        LCD_Write_Com(0x38);    /*显示模式设置*/
        delay_ms(5);
        LCD_Write_Com(0x38);
        delay_ms(5);
        LCD_Write_Com(0x38);
        delay_ms(5);
        LCD_Write_Com(0x38);  
        LCD_Write_Com(0x08);    /*显示关闭*/
        LCD_Write_Com(0x01);    /*显示清屏*/
        LCD_Write_Com(0x06);    /*显示光标移动设置*/
        delay_ms(5);
        LCD_Write_Com(0x0C);    /*显示开及光标设置*/
}


//==========================================================================
//        //        C格式:        void TN_IRACK_EN(void);
//        实现功能:        红外模块启动函数
//        入口参数:        无
//        出口参数:        无
//==========================================================================
void TN_IRACK_EN(void)
{   
        unsigned char j;
        flag=0;
        A_TN9=0;
        delay();
    DATA_NUM=0;
    DATA_INDEX=0;

        for(j=0;j<=4;j++)
                TN_Data_Buff[j]=0;

}
//==========================================================================
//        C格式:                void TN_IRACK_UN(void);
//        实现功能:        红外模块关闭函数
//        入口参数:        无
//        出口参数:        无
//==========================================================================        
void TN_IRACK_UN(void)
{
        A_TN9=1;
}
//==========================================================================
//        C格式:                int TN_ReadData(void);
//        实现功能:        读测得数据
//==========================================================================        
void TN_ReadData(void)
{
        data_tmp=0;
        DATA_NUM=0;
        DATA_INDEX=0;
        while(DATA_INDEX<5)
        {
                   if(!CLK_TN9)
             {
                        if(flag==0)
                        {        
                                flag=1;                        
                                DATA_NUM++;
                                data_tmp<<=1;        
                              if(DATA_TN9)   
                        {
                                 data_tmp=data_tmp|0x01;
                        }
                                else
                                {
                                        data_tmp=data_tmp&0xfe;
                                }        
                                
                              if(DATA_NUM==8)
                        {
                                 
                                 TN_Data_Buff[DATA_INDEX]=data_tmp;
                                 DATA_NUM=0;
                                        DATA_INDEX++;
                                        data_tmp=0;
                        }
                        }

              }
                else
                {
                        if(flag==1)
                        {
                                flag=0;
                        }

                }
        }
}
//======================================================================//
//Program:TN红外传感器目标数据测量子程序
//InPut:NULL
//OutPut:unsigned int returnData        测量结果的出错标识
//Note:
//Edit by xinqiang 20050324
//======================================================================//
unsigned char TN_IR_GetData()
{
        unsigned char iItem,MSB,LSB;
        unsigned char Back_Data;                          //定义返回变量,返回0表示读出正确数据
        Back_Data = 0xaa;

    TN_IRACK_UN();
        delay_ms(10);
        TN_IRACK_EN();        //enable the TN        
        delay();
        delay();
        delay();                                             
        TN_ReadData();
        delay();


        iItem = TN_Data_Buff[0];                //取读到第一个字节数据
        delay();
        if(iItem==0x4c)                                //判断第一个字节数据是否正确
        {
                MSB = (TN_Data_Buff[1]);              //取读到第二个字节数据
                LSB = (TN_Data_Buff[2]);              //取读到第三个字节数据
                if(TN_Data_Buff[4] == 0x0d)     //判断是否读到结束标志
                {
                        iTemp = MSB*256 +LSB;                       //计算温度值,计算方法请参考红外测温模块
                        iTemp = iTemp/16 - 273.15;
                        Back_Data = 0;                                     //返回变量赋0
                }
        }
        TN_IRACK_UN();                                                     //Unable the TN
        return Back_Data;                                //返回Back_Data
}

/*****************目标温度值MBtemp处理子程序*************/
void dis_mbtemp()
{
        unsigned int mb;
        mb=MBTemp*100;                                          //变成整数,便于单片机处理
        table_mbtemp[4]=mb%10+0x30;                  //分别取温度十位、个位、小数点后一位、小数点后二位
        mb=mb/10;
        table_mbtemp[3]=mb%10+0x30;
        mb=mb/10;
        table_mbtemp[1]=mb%10+0x30;
        mb=mb/10;
        table_mbtemp[0]=mb%10+0x30;
}
/*****************************************************
                        主函数
*****************************************************/
void main()
{        
        LCD_Init();                        //LCD1602初始化音使用
        while(1)
        {
                show_temp();//显示温度示时间
               
        }
}
/*****************************************************
                        温度显示子函数
*****************************************************/
void show_temp()                                                
{
                                                                         //间续或连续模式
        
                if(!TN_IR_GetData())
                {   
                        MBTemp = iTemp;
                }
                dis_mbtemp();                                                           //目标温度值MBtemp处理
                LCD_Write_String(0,0,"MBTEMP:");
                LCD_Write_String(5,1,table_mbtemp);
                        
}
此帖出自51单片机论坛

最新回复

和红外模块相关的几个函数,需要结合模块的手册去分析。 比如 void TN_IRACK_EN(void);   红外模块启动函数, A_TN9=0;         delay();     DATA_NUM=0;     DATA_INDEX=0; 这个变量应该是控制单片机的引脚输出电平信号的。这些引脚和红外模块的某些引脚相连。使能信号什么的,找到和红外模块对应的那几个引脚,去看手册,就会发现,此函数改变了对应引脚电平,使能了模块。 读数据的函数,稍微复杂一些,但是道理是一样的,通过和红外模块之间的通信接口,根据手册的协议规定,进行数据读取。从简单的函数开始,一点点分析,就明白了。  详情 回复 发表于 2016-3-28 19:57
点赞 关注
 

回复
举报

3471

帖子

13

TA的资源

五彩晶圆(高级)

沙发
 
和红外模块相关的几个函数,需要结合模块的手册去分析。
比如 void TN_IRACK_EN(void);
  红外模块启动函数, A_TN9=0;
        delay();
    DATA_NUM=0;
    DATA_INDEX=0;

这个变量应该是控制单片机的引脚输出电平信号的。这些引脚和红外模块的某些引脚相连。使能信号什么的,找到和红外模块对应的那几个引脚,去看手册,就会发现,此函数改变了对应引脚电平,使能了模块。

读数据的函数,稍微复杂一些,但是道理是一样的,通过和红外模块之间的通信接口,根据手册的协议规定,进行数据读取。从简单的函数开始,一点点分析,就明白了。
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表