6072|20

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);
                        
}
此帖出自传感器论坛

最新回复

DATA_INDEX看程序里面是用来计数的,其他的别删,还不知道我说的对不对呢,我都没看过你的规格书,还有,这程序不是你自己写的啊?从哪弄来的你可以问问人家啊  详情 回复 发表于 2016-3-18 13:18
点赞 关注
 
 

回复
举报

943

帖子

3

TA的资源

纯净的硅(中级)

沙发
 
这个程序不是有备注吗?
此帖出自传感器论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
雨后的梧桐 发表于 2016-3-18 09:02
这个程序不是有备注吗?

度温度时那个FLAG标志位是什么意思   flag=0   和flag=1
此帖出自传感器论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

4
 
开关量,表示模块是开的还是关闭的
此帖出自传感器论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

5
 
雨后的梧桐 发表于 2016-3-18 11:23
开关量,表示模块是开的还是关闭的

  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(flag=0){flag=1....
                                                               }
还有data_tmp=data_tmp|0x01;
data_tmp=data_tmp&0xfe;
这两句是干么么
此帖出自传感器论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

6
 
怪咖_ 发表于 2016-3-18 11:20
度温度时那个FLAG标志位是什么意思   flag=0   和flag=1

  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
                }
        }
这里的msb表示高8位   lsb表示低8位,而iTemp是十进制数,  iTemp = MSB*256 +LSB; (那么这句是16进制数转10进制数的意思吗  
此帖出自传感器论坛

点评

对的,之前那个问题是简单的将传感器读到的数据进行赋值,后面那个问题就可以理解为你说的将数据转换为十进制。实际上它是数据处理,将其转化为需要送去显示的数值。  详情 回复 发表于 2016-3-18 11:32
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

7
 
雨后的梧桐 发表于 2016-3-18 11:23
开关量,表示模块是开的还是关闭的

flag=0表示开  ,为什么函数体里面又给flag赋值=1
此帖出自传感器论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

8
 
怪咖_ 发表于 2016-3-18 11:28
if(iItem==0x4c)                                //判断第一个字节数据是否正确
        {
         ...

对的,之前那个问题是简单的将传感器读到的数据进行赋值,后面那个问题就可以理解为你说的将数据转换为十进制。实际上它是数据处理,将其转化为需要送去显示的数值。
此帖出自传感器论坛

点评

if(DATA_TN9) { data_tmp=data_tmp|0x01; } else  详情 回复 发表于 2016-3-18 11:51
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

9
 
雨后的梧桐 发表于 2016-3-18 11:23
开关量,表示模块是开的还是关闭的

边独数据是不是有脉冲的时候进行读书,然后  flag=0是开启,为什么  if()语句里面马上对flag赋值为1
此帖出自传感器论坛

点评

你说的对,flag=0,那么条件就成立了,那么后面将其置1 可能是为了防止后面忘掉。重点是后面执行的语句。  详情 回复 发表于 2016-3-18 11:59
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

10
 
雨后的梧桐 发表于 2016-3-18 11:32
对的,之前那个问题是简单的将传感器读到的数据进行赋值,后面那个问题就可以理解为你说的将数据转换为十 ...

  if(DATA_TN9)   
                        {
                                 data_tmp=data_tmp|0x01;
                        }
                                else
                                {
                                        data_tmp=data_tmp&0xfe;
                                }        
                                这里和0x01相或   和0xfe相与是什么意思  会得到什么结果
此帖出自传感器论坛

点评

这个跟你用的传感器有关,你看看传感器的资料书,这我不知道怎么说。同样,上面那个问题也是一样的道理。为什么会那样用我没见过资料我也不知道。  详情 回复 发表于 2016-3-18 11:57
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

11
 
怪咖_ 发表于 2016-3-18 11:51
if(DATA_TN9)   
                        {
                                 data_tmp=data_tmp|0 ...

这个跟你用的传感器有关,你看看传感器的资料书,这我不知道怎么说。同样,上面那个问题也是一样的道理。为什么会那样用我没见过资料我也不知道。
此帖出自传感器论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

12
 
怪咖_ 发表于 2016-3-18 11:48
边独数据是不是有脉冲的时候进行读书,然后  flag=0是开启,为什么  if()语句里面马上对flag赋值为1

你说的对,flag=0,那么条件就成立了,那么后面将其置1 可能是为了防止后面忘掉。重点是后面执行的语句。
此帖出自传感器论坛

点评

可是flag=1不是关闭的标志吗 怎么马上把它关了  详情 回复 发表于 2016-3-18 12:41
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

13
 
雨后的梧桐 发表于 2016-3-18 11:59
你说的对,flag=0,那么条件就成立了,那么后面将其置1 可能是为了防止后面忘掉。重点是后面执行的语句。

可是flag=1不是关闭的标志吗   怎么马上把它关了
此帖出自传感器论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

14
 
它只是一个条件,比如我现在说给你一个指令,你现在去吃饭,告诉了你之后我这个传达的信息就失去作用了,重点是接下来你该去吃饭了。那么我给你的指令就没有用了,你可以给他关掉,等待下一条指令。
此帖出自传感器论坛

点评

else { if(flag==1) { flag=0; } } 这样不会马上执行这个语  详情 回复 发表于 2016-3-18 13:03
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

15
 
雨后的梧桐 发表于 2016-3-18 12:59
它只是一个条件,比如我现在说给你一个指令,你现在去吃饭,告诉了你之后我这个传达的信息就失去作用了,重 ...

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

                }
这样不会马上执行这个语句吗
此帖出自传感器论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

16
 
不会,程序是顺序执行,判断条件到了他会继续执行之前那一句。除非你在之前那函数里用上中断指令。
此帖出自传感器论坛

点评

void TN_IRACK_EN(void) { unsigned char j; flag=0; A_TN9=0; delay(); DATA_NUM=0; DATA_INDEX=0; for(j=0;j  详情 回复 发表于 2016-3-18 13:09
unsigned char TN_IR_GetData() { unsigned char iItem,MSB,LSB; unsigned char Back_Data; //定义返回变量,返回0表示读出正确数据 Back_Data = 0xaa; 这  详情 回复 发表于 2016-3-18 13:07
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

17
 
雨后的梧桐 发表于 2016-3-18 13:05
不会,程序是顺序执行,判断条件到了他会继续执行之前那一句。除非你在之前那函数里用上中断指令。

unsigned char TN_IR_GetData()
{
        unsigned char iItem,MSB,LSB;
        unsigned char Back_Data;                          //定义返回变量,返回0表示读出正确数据
        Back_Data = 0xaa;

这个给Back_Data = 0xaa;赋值是干嘛的
此帖出自传感器论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

18
 
雨后的梧桐 发表于 2016-3-18 13:05
不会,程序是顺序执行,判断条件到了他会继续执行之前那一句。除非你在之前那函数里用上中断指令。

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;

}
还有这个开启的时候为什么都赋值为0
此帖出自传感器论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

19
 
初始化,因为现在还没有明确传感器读到的具体数据,其实我个人觉得这条语句可以不用写。但是我不知道是不是你用的传感器有特殊用处,所以我也说不好。具体你卡伊参考规格书。
此帖出自传感器论坛

点评

DATA_INDEX这个是用来干嘛的 那个条件语句不用 那其他的需要吗除了 A_TN9=0,其他的可以删掉吗  详情 回复 发表于 2016-3-18 13:12
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

20
 
雨后的梧桐 发表于 2016-3-18 13:11
初始化,因为现在还没有明确传感器读到的具体数据,其实我个人觉得这条语句可以不用写。但是我不知道是不是 ...

DATA_INDEX这个是用来干嘛的
那个条件语句不用
那其他的需要吗除了 A_TN9=0,其他的可以删掉吗
此帖出自传感器论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
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
快速回复 返回顶部 返回列表