51+HD7279+ADS1110+PT100的测温系统程序.docx
《51+HD7279+ADS1110+PT100的测温系统程序.docx》由会员分享,可在线阅读,更多相关《51+HD7279+ADS1110+PT100的测温系统程序.docx(35页珍藏版)》请在冰豆网上搜索。
51+HD7279+ADS1110+PT100的测温系统程序
#include
#include
typedefunsignedintuint;
typedefunsignedcharuchar;
typedefunsignedshortWORD;
floatcodeRTD_TAB_PT100[151]=//表格是以1度为一步,即-20,-19,-18.....
{
88.22,88.62,88.62,89.40,89.80,90.19,90.59,90.98,91.37,91.77,//-30~-21
92.16,92.55,92.95,93.34,93.73,94.12,94.52,94.91,95.30,95.69,//-20~-11
96.09,96.48,96.87,97.26,97.65,98.04,98.44,98.83,99.22,99.61,//-10~-1
100.00,100.39,100.78,101.17,101.56,101.95,102.34,102.73,103.13,103.51,//0~9
103.90,104.29,104.68,105.07,105.46,105.85,106.24,106.63,107.02,107.49,//10~19
107.79,108.18,108.57,108.96,109.35,109.73,110.12,110.51,110.90,111.28,//20~29
111.67,112.06,112.45,112.83,113.22,113.61,113.99,114.38,114.77,115.15,//30~39
115.54,115.93,116.31,116.70,117.08,117.47,117.86,118.24,118.62,119.01,//40~49
119.40,119.78,120.16,120.55,120.93,121.32,121.70,122.09,122.47,122.86,//50~59
123.24,123.62,124.01,124.39,124.77,125.16,125.54,125.92,126.31,126.69,//60~69
127.07,127.45,127.84,128.22,128.60,128.98,129.37,129.75,130.13,130.51,//70~79
130.89,131.27,131.66,132.04,132.42,132.80,133.18,133.56,133.94,134.32,//80~89
134.70,135.08,135.46,135.84,136.22,136.60,136.98,137.36,137.74,138.12,//90~99
138.50,138.88,139.26,139.64,140.02,140.39,140.77,141.15,141.53,141.91,//100~109
142.29,142.66,143.04,143.42,143.80,144.17,144.55,144.93,145.31,145.68,//110~119
146.06//120
};
//floatcodeRTD_TAB_PT100[41]=//表格是以5度为一步,即-50,-45,-40.....
//{
//80.31,82.29,84.27,86.25,88.22,90.19,92.16,94.12,96.09,98.04,//-50~-5
//100.00,101.95,103.90,105.85,107.79,109.73,111.67,113.61,115.54,117.47,//0~45
//119.40,121.32,123.24,125.16,127.08,128.99,130.90,132.80,134.71,136.61,//50~95
//138.51,140.40,142.29,144.18,146.07,147.95,149.83,151.71,153.58,155.46,//100~145
//157.33//50
//};
sbitbeep=P3^5;
//----------------ADS1110地址、配置字-----------------//
#defineADS1110_WR_ADDRESS0x92//10010010写
#defineADS1110_RD_ADDRESS0x93//10010011读
#defineADS1110_CONFIG_REG0x8C//连续转换模式,16bit精度,PGA=1
sbitADS1110_SDA=P1^5;//模拟I2C数据传输位
sbitADS1110_CLK=P1^6;//模拟I2C时钟控制位
//ucharTMR_H,TMR_L;//AD转换高8位,和低8位
uintAD_Result[25];
unsignedlongnTmp;
//***HD7279函数定义***
voidlong_delay(void);//长延时
voidshort_delay(void);//短暂延时
voiddelay10ms(unsignedchar);//延时10MS
voidwrite7279(uchar,uchar);//写入到HD7279
ucharread7279(uchar);//从HD7279读出
voidsend_byte(uchar);//发送一个字节
ucharreceive_byte(void);//接收一个字节
sbitcs=P0^7;//csatP1.4
sbitclk=P0^6;//clk连接于P1.5
sbitdat=P0^5;//dat连接于P1.2
sbitkey=P0^4;//key连接于P1.3
sbitHight_LED=P4^6;
sbitLow_LED=P4^1;
//******HD7279A指令******
#defineCMD_RESET0xa4
#defineCMD_TEST0xbf
#defineDECODE00x80
#defineDECODE10xc8
#defineCMD_READ0x15
#defineUNDECODE0x90
#defineRTL_CYCLE0xa3
#defineRTR_CYCLE0xa2
#defineRTL_UNCYL0xa1
#defineRTR_UNCYL0xa0
#defineACTCTL0x98
#defineSEGON0xe0
#defineSEGOFF0xc0
#defineBLINKCTL0x88
//--------AT24C04变量声明---------
sbit_24C02_SCL=P2^6;//AT24C04的时钟
sbit_24C02_SDA=P2^5;//AT24C04的数据
ucharBUF[16];//数据缓存区
uintcodenDefaultDATA[]=
{//nLowTMPnHightTMPnTMPAdj
480,650,0//默认设置
};
uintnSettingDATA[3]={0,0,0};//当前设置
voidDelay5us();
voidAT24C04_Start();
voidAT24C04_Stop();
voidAT24C04_SendACK(bitack);
bitAT24C04_RecvACK();
voidAT24C04_SendByte(uchardat);
ucharAT24C04_RecvByte();
voidAT24C04_ReadPage();
voidAT24C04_WritePage();
//******红外接收******
sbitIRIN=P3^3;//红外接收器数据线
ucharIRCOM[7];
ucharnFlag=0;
ucharnMode=1;//nMode0123
//meanNULLnLowTMPnHightTMPnTMPAdj
uintnLowTMP=480;//最低温度设定
uintnHightTMP=650;//最高温度设定
charnTMPAdj=0;//温度修正
voidsend_ad_result(uchartemp);
/***********************************************************************************
************************************************************************************
////////////////////////////////HD7279函数////////////////////////////////////////
************************************************************************************
************************************************************************************/
voidwrite7279(ucharcmd,uchardta)
{
cs=0;
send_byte(cmd);
send_byte(dta);
cs=1;
}
ucharread7279(ucharcommand)
{
cs=0;
send_byte(command);
return(receive_byte());
cs=1;
}
voidsend_byte(ucharout_byte)
{
uchari;
cs=0;
long_delay();
for(i=0;i<8;i++)
{
if(out_byte&0x80)
{
dat=1;
}
else
{
dat=0;
}
clk=1;
short_delay();
clk=0;
short_delay();
out_byte=out_byte*2;
}
dat=0;
}
ucharreceive_byte(void)
{
uchari,in_byte;
dat=1;//settoinputmode
long_delay();
for(i=0;i<8;i++)
{
clk=1;
short_delay();
in_byte=in_byte*2;
if(dat)
{
in_byte=in_byte|0x01;
}
clk=0;
short_delay();
}
dat=0;
return(in_byte);
}
voiddelay10ms(uinttime)//误差-0.000000000001us
{
uchara,b,c;
uinti;
for(i=0;i