⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iread.c

📁 凌阳非接触式红外测温传感器的C51源程序。
💻 C
字号:
/*------------------------------------------------------------------------------
;    Copyright (C) 2006  WangChanghong INTEGRATED PRODUCTS, INC.
;    All rights reserved.
;    MCU:AT89s52 ,晶体频率:12MHz
:    作者:汪长洪
:    时间:2006年07月31日
:    地点:威海
;-----------------------------ZyTemp红外测温仪程序-----------------------------*/ 
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int  
/*----------------------------------工程说明--------------------------------------
;	工程名称:	ZyTemp.Uv2
;	功能描述:	测量环境温度和目标温度,并用键盘控制显示温度值,
;               按K1,显示目标温度
;               按K2,显示环境温度
;   IDE环境:   Keil uVision3 V3.31
;	硬件连接:	VCC-------VCC                
;               P1.0------Data
;				P1.2------Clk
;               P1.4------ACK              
;               GND-------GND
;------------------------------------定义接口------------------------------------*/ 
sbit TN_Data = P1^0;
sbit TN_Clk  = P1^2;
sbit TN_ACK  = P1^4;
sbit key_1 = P2^2;
sbit key_2 = P2^3;

/*-----------------------------------变量列表------------------------------------*/
unsigned char code keytab_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89};//H: 0x89;//L: 0x87;//P: 0x8a;//Q: 0X98;
unsigned char code keytab_2[]={0xef,0xdf,0xbf,0x7f};
uchar  ReadData[5],iShow[5];

/*-----------------------------------函数列表------------------------------------*/
void display_1(uchar i,uchar num);                  //定位显示单个字符
void display_2(void);                               //定位显示四个字符
void TN_ReadData(uchar Flag);						//读数据	
void TN_GetData(void);	                            //计算数据

/*----------------------------------主程序入口-----------------------------------*/
void main()
{
    TN_ACK=1;
	while(1)
	{
		if(!key_1)
		{
			TN_ACK=0;
			TN_ReadData(0x4c);				  //目标温度的第一个字节为0x4c
		}
		else if(!key_2)
		{
			TN_ACK=0;
			TN_ReadData(0x66);				  //环境温度的第一个字节为0x66
		}

		if((ReadData[0]==0x4c)&&(ReadData[4]==0x0d))         //每帧的最后一个字节为0x0d
		{
			TN_GetData();
			display_2();
		}
		else if((ReadData[0]==0x66)&&(ReadData[4]==0x0d))    //每帧的最后一个字节为0x0d
		{
			TN_GetData();
			display_2();
		}    
	}
}

/*------------------------------定位显示单个字符-------------------------------*/
void display_1(uchar i,uchar num)		
{   
    P0=keytab_1[i];
	P2=keytab_2[num]; 
}

/*------------------------------定位显示四个字符-------------------------------*/
void display_2(void)
{
    uchar kk;
    display_1(iShow[3]&0x0f,3);			 //显示十位
	for(kk=200;kk>0;kk--); 				 //延时
	display_1(iShow[2]&0x0f,2);			 //显示个位
	for(kk=200;kk>0;kk--); 				 //延时
	display_1(iShow[1]&0x0f,1);	         //显示小数第一位
	for(kk=200;kk>0;kk--);				 //延时
	display_1(iShow[0]&0x0f,0);			 //显示小数第二位
	for(kk=200;kk>0;kk--); 				 //延时
}

/*------------------------------------读数据-------------------------------------*/
void TN_ReadData(uchar Flag)	
{
	uchar i,j,k;
	bit  BitState=0; 
	for(k=0;k<7;k++)                        //每次发七帧
	{	
		for(j=0;j<5;j++)                    //每帧五个字节
		{
			for(i=0;i<8;i++)
			{
				while(TN_Clk);
				BitState= TN_Data;
				ReadData[j]=ReadData[j]<<1;
				ReadData[j]=ReadData[j]|BitState;     			    
		    	while(!TN_Clk);
		     }
		}
		
		if(ReadData[0]==Flag)  k=8;
	}
	TN_ACK=1;
}

/*-----------------------------------计算数据------------------------------------*/
void  TN_GetData(void)
{
    int Temp;
    Temp=(ReadData[1]<<8)|ReadData[2];
    Temp = Temp/16 - 273.15;
    Temp=Temp*100;                               //温度值乘100,以方便计算小数点后两位
	iShow[4]=Temp/10000;                         //计算温度值的百位数
	iShow[3]=(Temp/1000);                        //计算温度值的十位数
	iShow[3]=iShow[3]%10;                        
	iShow[2]=(Temp/100);                         //计算温度值的个位数
    iShow[2]=iShow[2]%10;
	iShow[1]=(Temp/10);                          //计算温度值的小数点后第一位数
	iShow[1]=iShow[1]%10;
	iShow[0]=(Temp);                             //计算温度值的小数点后第二位数                         
	iShow[0]=iShow[0]%10;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -