51+HD7279+ADS1110+PT100的测温系统(程序)

更新时间:2023-07-26 18:37:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

#include <intrins.h>

#include <STC12C5A60S2.H>

typedef unsigned int uint;

typedef unsigned char uchar;

typedef unsigned short WORD;

float code RTD_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

};

//float code RTD_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

//};

sbit beep = P3^5;

//----------------ADS1110地址、配置字-----------------//

#define ADS1110_WR_ADDRESS 0x92 // 1001 001 0 写

#define ADS1110_RD_ADDRESS 0x93 // 1001 001 1 读

#define ADS1110_CONFIG_REG 0x8C // 连续转换模式,16bit精度,PGA=1

sbit ADS1110_SDA = P1^5; // 模拟I2C数据传输位

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

sbit ADS1110_CLK = P1^6; // 模拟I2C时钟控制位

//uchar TMR_H, TMR_L; // AD转换高8位,和低8位

uint AD_Result[25];

unsigned long nTmp;

//*** HD7279 函数定义 ***

void long_delay(void); // 长延时

void short_delay(void); // 短暂延时

void delay10ms(unsigned char); // 延时10MS

void write7279(uchar, uchar); // 写入到HD7279

uchar read7279(uchar); // 从HD7279读出

void send_byte(uchar); // 发送一个字节

uchar receive_byte(void); // 接收一个字节

sbit cs =P0^7; // cs at P1.4

sbit clk=P0^6; // clk 连接于 P1.5

sbit dat=P0^5; // dat 连接于 P1.2

sbit key=P0^4; // key 连接于 P1.3

sbit Hight_LED = P4^6;

sbit Low_LED = P4^1;

//****** HD7279A 指令 ******

#define CMD_RESET 0xa4

#define CMD_TEST 0xbf

#define DECODE0 0x80

#define DECODE1 0xc8

#define CMD_READ 0x15

#define UNDECODE 0x90

#define RTL_CYCLE 0xa3

#define RTR_CYCLE 0xa2

#define RTL_UNCYL 0xa1

#define RTR_UNCYL 0xa0

#define ACTCTL 0x98

#define SEGON 0xe0

#define SEGOFF 0xc0

#define BLINKCTL 0x88

//-------- AT24C04 变量声明 ---------

sbit _24C02_SCL = P2^6; //AT24C04的时钟

sbit _24C02_SDA = P2^5; //AT24C04的数据

uchar BUF[16]; //数据缓存区

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

uint code nDefaultDATA[] =

{// nLowTMP nHightTMP nTMPAdj

480, 650, 0 // 默认设置

};

uint nSettingDATA[3] = {0, 0, 0}; // 当前设置

void Delay5us();

void AT24C04_Start();

void AT24C04_Stop();

void AT24C04_SendACK(bit ack);

bit AT24C04_RecvACK();

void AT24C04_SendByte(uchar dat);

uchar AT24C04_RecvByte();

void AT24C04_ReadPage();

void AT24C04_WritePage();

//****** 红外接收 ******

sbit IRIN = P3^3; //红外接收器数据线

uchar IRCOM[7];

uchar nFlag = 0;

uchar nMode = 1; // nMode 0 1 2 3

// mean NULL nLowTMP nHightTMP nTMPAdj

uint nLowTMP = 480; // 最低温度设定

uint nHightTMP = 650; // 最高温度设定

char nTMPAdj = 0; // 温度修正

void send_ad_result(uchar temp);

/***********************************************************************************

************************************************************************************

////////////////////////////////HD 7279 函数////////////////////////////////////////

************************************************************************************

************************************************************************************/

void write7279(uchar cmd, uchar dta)

{

cs = 0;

send_byte (cmd);

send_byte (dta);

cs = 1;

}

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

uchar read7279(uchar command)

{

cs = 0;

send_byte(command);

return(receive_byte());

cs = 1;

}

void send_byte( uchar out_byte)

{

uchar i;

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;

}

uchar receive_byte(void)

{

uchar i, in_byte;

dat=1; // set to input mode

long_delay();

for (i=0;i<8;i++)

{

clk=1;

short_delay();

in_byte=in_byte*2;

if (dat)

{

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

in_byte=in_byte|0x01;

}

clk=0;

short_delay();

}

dat=0;

return (in_byte);

}

void delay10ms(uint time) //误差 -0.000000000001us

{

uchar a,b,c;

uint i;

for (i=0;i<time;i++)

{

for(c=7;c>0;c--)

for(b=168;b>0;b--)

for(a=24;a>0;a--);

}

}

void long_delay(void)

{

unsigned char i;

for (i=0;i<0x30;i++);

}

void short_delay(void)

{

unsigned char i;

for (i=0;i<8;i++);

}

/***********************************************************************************

************************************************************************************

////////////////////////////////HD 7279 函数 END////////////////////////////////////////

************************************************************************************

************************************************************************************/

//--------------------- 模块延时程序_1ms -------------------------

void delay1ms(uint delay1ms) //STC11F60XE,延时1ms

{

uchar a,b;

// 12M

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

// for(;delay1ms>0;delay1ms--)

// for(b=222;b>0;b--)

// for(a=12;a>0;a--);

// 11.0592M

for( ; delay1ms > 0; delay1ms--)

for(b = 21; b > 0; b--)

for(a = 130; a > 0; a--);

}

void Delay5us() // 晶振11.0592M 误差 -0.026765046296us

{

uchar a;

for(a=12;a>0;a--);

_nop_();

}

void delay(uint delay) //STC11F60XE,12M,延时170us

{

uchar a,b;

// 12M

// for(;delay>0;delay--)

// for(b=78;b>0;b--)

// for(a=5;a>0;a--);

// 11.0592M

for( ; delay > 0; delay--)

for( b = 2; b > 0; b--)

for( a = 232; a > 0; a--);

}

//--------------------- 数码管显示函数 -------------------------

void Display_TMP(uint nTmp1)

{

//send_byte(CMD_RESET);

write7279(DECODE0,nTmp1/100%100);

delay1ms(2);

write7279(DECODE0+1,nTmp1/10%10);

delay1ms(2);

write7279(SEGON,15);

delay1ms(2);

write7279(DECODE0+2,nTmp1%10);

delay1ms(2);

write7279(SEGON,63);

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

delay1ms(2);

write7279(SEGON,62);

delay1ms(2);

write7279(SEGON,61);

delay1ms(2);

write7279(SEGON,60);

delay1ms(2);

write7279(SEGON,59);

delay1ms(2);

// write7279(DECODE0+4,nTmp2/100%100);

// delay1ms(2);

// write7279(DECODE0+5,nTmp2/10%10);

// delay1ms(2);

// write7279(SEGON,47);

// delay1ms(2);

// write7279(DECODE0+6,nTmp2%10);

// delay1ms(2);

// write7279(SEGON,31);

// delay1ms(2);

// write7279(SEGON,30);

// delay1ms(2);

// write7279(SEGON,29);

// delay1ms(2);

// write7279(SEGON,28);

// delay1ms(2);

// write7279(SEGON,27);

// delay1ms(2);

//delay10ms(1000);

//send_byte(CMD_RESET);

}

void Display_SETTMP(uint nTmp2)

{

//send_byte(CMD_RESET);

write7279(DECODE0+4,nTmp2/100%100);

delay1ms(2);

write7279(DECODE0+5,nTmp2/10%10);

delay1ms(2);

write7279(SEGON,47);

delay1ms(2);

write7279(DECODE0+6,nTmp2%10);

delay1ms(2);

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

write7279(SEGON,31);

delay1ms(2);

write7279(SEGON,30);

delay1ms(2);

write7279(SEGON,29);

delay1ms(2);

write7279(SEGON,28);

delay1ms(2);

write7279(SEGON,27);

delay1ms(2);

//delay10ms(1000);

//send_byte(CMD_RESET);

}

void Display_SET()

{

send_byte(CMD_RESET);

if (nMode == 1) // set nLowTMP

{

write7279(SEGON,1);

delay1ms(2);

write7279(SEGON,2);

delay1ms(2);

write7279(SEGON,3);

delay1ms(2);

write7279(DECODE0+4,nLowTMP/100%100);

delay1ms(2);

write7279(DECODE0+5,nLowTMP/10%10);

delay1ms(2);

write7279(SEGON,47);

delay1ms(2);

write7279(DECODE0+6,nLowTMP%10);

}

if (nMode == 2) // set nHightTMP

{

write7279(SEGON,0);

delay1ms(2);

write7279(SEGON,1);

delay1ms(2);

write7279(SEGON,2);

delay1ms(2);

write7279(SEGON,4);

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

delay1ms(2);

write7279(SEGON,5);

delay1ms(2);

write7279(DECODE0+4,nHightTMP/100%100);

delay1ms(2);

write7279(DECODE0+5,nHightTMP/10%10);

delay1ms(2);

write7279(SEGON,47);

delay1ms(2);

write7279(DECODE0+6,nHightTMP%10);

}

if (nMode == 2) // set nTMPAdj

{

write7279(SEGON,0);

delay1ms(2);

write7279(SEGON,1);

delay1ms(2);

write7279(SEGON,2);

delay1ms(2);

write7279(SEGON,4);

delay1ms(2);

write7279(SEGON,5);

delay1ms(2);

write7279(SEGON,6);

delay1ms(2);

if (nTMPAdj < 0)

{

write7279(SEGON,32);

delay1ms(2);

write7279(DECODE0+5,(0-nTMPAdj)/10%10);

delay1ms(2);

write7279(DECODE0+6,(0-nTMPAdj)%10);

}

if (nTMPAdj > 0)

{

write7279(DECODE0+5,nTMPAdj/10%10);

delay1ms(2);

write7279(DECODE0+6,nTMPAdj%10);

}

}

}

/***********************************************************************************

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

************************************************************************************

////////////////////////////////红外解码 函数-BEGIN/////////////////////////////////

************************************************************************************

************************************************************************************/

void IR_IN() interrupt 2 using 0

{

// unsigned char j,k,N=0;

// EX1 = 0;

// delay(15);

// if (IRIN==1)

// {

// EX1 =1;

// return;

// }

// //确认IR信号出现

// while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。

// {

// delay(1);

// }

//

// for (j=0;j<4;j++) // 收集四组数据

// {

// for (k=0;k<8;k++) // 每组数据有8位

// {

// while (IRIN) // 等 IR 变为低电平,跳过4.5ms的前导高电平信号。

// {

// delay(1);

// }

// while (!IRIN) // 等 IR 变为高电平

// {

// delay(1);

// }

// while (IRIN) // 计算IR高电平时长

// {

// delay(1);

// N++;

// if (N>=30)

// {

// EX1=1;

// return;

// } // 0.14ms计数过长自动离开。

// } // 高电平计数完毕

// IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”

// if (N>=8)

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

// {

// IRCOM[j] = IRCOM[j] | 0x80;

// } // 数据最高位补“1”

// N=0;

// }//end for k

// }//end for j

//

// if (IRCOM[2]!=~IRCOM[3])

// {

// EX1=1;

// return;

// }

//

// send_ad_result(IRCOM[2]);

//

// switch(IRCOM[2])

// {

// case 0x45:

// if (nFlag == 0)

// nFlag = 1;

// nFlag = 0;

// //goto OVER;

// break;

//

// case 0x47:

// if((nFlag==1) && (nMode<=3))

// nMode = 0;

// nMode++;

// //goto OVER;

// break;

//

// case 0x16:

// if ((nFlag==1) && (nMode==2))

// nHightTMP--;

// if ((nFlag==1) && (nMode==1))

// nLowTMP--;

// if ((nFlag==1) && (nMode==3))

// nTMPAdj--;

// //goto OVER;

// break;

//

// case 0x19:

// if ((nFlag==1) && (nMode==2))

// nHightTMP++;

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

// if ((nFlag==1) && (nMode==1))

// nLowTMP++;

// if ((nFlag==1) && (nMode==3))

// nTMPAdj++;

// //goto OVER;

// break;

// }

// //send_ad_result(IRCOM[5]);

// //OVER:

// EX1 = 1;

return ;

}

/***********************************************************************************

////////////////////////////////红外解码 函数 END////////////////////////////////////

************************************************************************************/

/***********************************************************************************

************************************************************************************

////////////////////////////////AD1110 转换 -BEGIN/////////////////////////////////

************************************************************************************

************************************************************************************/

/*******************************************************************************

名称:ads1110Start(void)

功能:ADS1110 I2C Start

********************************************************************************/

void ads1110Start(void)

{

ADS1110_SDA = 1;

_nop_(); _nop_(); _nop_();_nop_(); _nop_();

ADS1110_CLK = 1;

_nop_(); _nop_();

_nop_(); _nop_(); _nop_(); _nop_();

ADS1110_SDA = 0;

_nop_(); _nop_();

_nop_(); _nop_(); _nop_(); _nop_();

}

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

/*******************************************************************************

名称:ads1110Stop(void)

功能:ADS1110 I2C Stop

********************************************************************************/

void ads1110Stop(void)

{

ADS1110_SDA = 0;

_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();

ADS1110_CLK = 1; // -----------结束I2C总线.

_nop_(); _nop_();

_nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();

ADS1110_SDA = 1;

_nop_(); _nop_(); _nop_();

}

/*******************************************************************************

名称:waitAck(void)

功能:ADS1110 I2C 等待ack

********************************************************************************/

uchar waitAck(void)

{

uint i = 0;

ADS1110_CLK = 1;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

while((ADS1110_SDA==1)&&(i<500))

i++;

ADS1110_CLK = 0;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

return 0x00;

}

/*******************************************************************************

名称:void sendAck(void)

功能:向ADS1110 I2C 发送 ack

********************************************************************************/

void sendAck(void)

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

{

ADS1110_SDA=0;

_nop_();

_nop_();

_nop_();

_nop_();

ADS1110_CLK=1;

_nop_();

_nop_();

_nop_();

_nop_();

ADS1110_CLK=0;

}

/*******************************************************************************

名称:void sendNotAck(void)

功能:向ADS1110 I2C 不发送 ack

********************************************************************************/

void sendNotAck(void)

{

ADS1110_SDA=1;

_nop_();

_nop_();

_nop_();

_nop_();

ADS1110_CLK=1;

_nop_();

_nop_();

_nop_();

_nop_();

ADS1110_CLK=0;

}

/*******************************************************************************

名称:void ads1110SendByte(uchar sendData)

功能:向ADS1110 I2C 发送1个字节

********************************************************************************/

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

void ads1110SendByte(uchar sendData)

{

uchar i,temp;

temp = sendData;

for(i=0;i<8;i++)

{

temp = temp << 1;

ADS1110_CLK = 0;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();

ADS1110_SDA = CY;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

ADS1110_CLK = 1;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

}

ADS1110_CLK = 0;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

ADS1110_SDA = 1;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

}

/*******************************************************************************

名称:uchar ads1110ReceiveByte(void)

功能:ADS1110 I2C 接收1个字节

********************************************************************************/

uchar ads1110ReceiveByte(void)

{

uchar i,k;

ADS1110_CLK = 0;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();

ADS1110_SDA = 1;

_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();

for(i=0;i<8;i++)

{

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

ADS1110_CLK = 1;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

k= (k << 1)| ADS1110_SDA;

ADS1110_CLK = 0;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

}

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

return k;

}

/*******************************************************************************

名称:ads1110Config(void)

功能:对ADS1110进行配置

********************************************************************************/

void ads1110Config(void)

{

ads1110Start();

ads1110SendByte(ADS1110_WR_ADDRESS);

waitAck();

ads1110SendByte(ADS1110_CONFIG_REG);

waitAck();

ads1110Stop();

}

/*******************************************************************************

名称:读取ADS1100数据子程序

功能:

********************************************************************************/

uint RD_ADS()

{

uchar temp;

uint W_B1byte_high, W_B1byte_low, W_B1_word;

ads1110Start();

ads1110SendByte(ADS1110_RD_ADDRESS);

temp = waitAck();

if(!temp)

{

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

W_B1byte_high /*= TMR_H*/ = ads1110ReceiveByte();

sendAck();

W_B1byte_low /*= TMR_L*/ = ads1110ReceiveByte();

sendAck();

temp = ads1110ReceiveByte();

ads1110Stop();

W_B1_word = (W_B1byte_high << 8)+ W_B1byte_low;

if (W_B1_word > 0x7fff)

W_B1_word = 0;

return W_B1_word;

}

else

return 0x0000;

}

/*******************************************************************************

名称: 取AD结果函数

功能: 它是16位AD转换,连续去制25次,去掉3最大值和3个最小值,剩下19个取平均值

返回: 平均取值

********************************************************************************/

uint get_ad_result()

{

uchar i,j;

uint temp;

nTmp = 0;

for(i = 0; i < 25; i++) // 连续取值25次

{

AD_Result[i] = RD_ADS();

delay1ms(10);

}

for(i = 1; i< 25; i++) // 插入法对取的25个值进行排序

{

temp = AD_Result[i]; //store the original sorted array in temp

for(j=i ; j>0 && temp < AD_Result[j-1] ; j--) //compare the new array with temp

{

AD_Result[j] = AD_Result[j-1]; //all larger elements are moved one pot to the right }

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

AD_Result[j] = temp;

}

// for(i = 3; i < 22; i++) // 去掉3最大值和3个最小值,余下19个值求和

// {

// nTmp = nTmp + AD_Result[i];

// }

return AD_Result[12]; //nTmp / 19; // 取剩下19个数平均值

//ad_average_result=ad_average_result*4*5000/1024;

}

/*******************************************************************************

名称: 串口发送函数

功能: 取AD结果函数发送到串口,方便调试

返回: 无

********************************************************************************/

void send_ad_result(uchar temp)

{

SBUF = temp;

while(TI == 0) ;

TI = 0;

delay1ms(100);

//SBUF=R>>4;

}

/*******************************************************************************

名称: 初始化函数

功能: 设置串口相关寄存器值,波特率取9600, 12T模式

返回: 无

********************************************************************************/

void _initiate() //初始化函数

{

EA = 1;

ES = 0;

TMOD = 0x20; // 定时计数器方式控制寄存器,"自动重装,16位计数器".

SCON = 0x50; // 串行控制寄存器,方便在串口助手那观察

// 12M

// TH1 = 0xF3; // 定时器初值高8位设置

// TL1 = 0xF3; // 定时器初值低8位设置

// 11.0592M 波特率 9600

TH1 = 0xFD; // 定时器初值高8位设置

51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度

TL1 = TH1; // 定时器初值低8位设置

PCON = 0x00;

TR1 = 1;

// IE = 0x84; // 允许总中断中断,使能 INT1 外部中断

EX1 = 1;

// TCON = 0x10; // 触发方式为脉冲负边沿触发

}

/*******************************************************************************

名称: 蜂鸣器函数

功能: 设置蜂鸣器鸣响

返回: 无

********************************************************************************/

void Beep(uchar nSet)

{

}

/****************************************/

/****************************************/

//------------ AT24C04 驱动函数 --------------

/**************************************

向AT24C04写1页(16字节)数据

将TESTDATA开始的16个测试数据写如设备的00~0F地址中

**************************************/

void AT24C04_WritePage()

{

uchar i;

AT24C04_Start(); //起始信号

AT24C04_SendByte(0xa0); //发送设备地址+写信号

AT24C04_SendByte(0x00); //发送存储单元地址

for (i=0; i<3; i++)

{

AT24C04_SendByte(nSettingDATA[i]);

}

AT24C04_Stop(); //停止信号

}

/**************************************

从AT24C04读取1页(16字节)数据

将设备的00~0F地址中的数据读出存放在DATA区的BUF中

**************************************/

本文来源:https://www.bwwdw.com/article/l41m.html

Top