沈阳工业大学本科生毕业设计(论文)
Void SLA_SEND(char chip_select,char*wr_data,char number) {
SENDMODE=0x01; Totalnumber =number; Sendnumber=number; While(SM_BUSY); SM_BUSY=1; SMBOCN=0x44;
COMMAND=(chip_select|WRITE); STO=0; STA=1;
while(SM_BUSY); }
void Init18b20(void) {
SkipROMCode(); WriteDS18b20(0x44); }
void main(void) {
P26=1; tsound=0;
//关闭蜂鸣器
WDTCN=0xde;
WDTCN=0xad;
SystemInit();
void SYSCLK_Init(void); void PORT_Init(void); void Init18b20(void);
void uchar Adc0832(unsigned char channel) //获取压力参数
CH451_Init();
Temperture=Get_Tmp(); //读出当前温度 while(1) {
//测量压力、温度实时显示
if(flag) {
Display_Pres(Pressure);
Display_Temp(Temperature);
31
沈阳工业大学本科生毕业设计(论文)
}
//中断子程序 使用定时器中断T0// void Timer0_ISR() interrupt 1 {
TH0=Timer0_H; TL0=Timer0_L;
//定时器初值装载
static unsigned char counter=0; }
}
KeyControl(); if(Sendflag==1) { }
WarningControl();
//报警控制
//读出当前温度
Temperture=Get_Tmp(); Send(Send_Buf); Sendflag=0;
//键盘控制
DataChang(Pressure,Temperature); //串口通信,发送数据
counter++;
if(counter==50) { }
if(SensorFlag==0) { }
if(Warning_Flag==1) //报警服务程序 { }
P4=~P4; tsound=1; delay(20); tsound=0;
//发送触发信号
//至少延迟10us以上,保证超声波传感器被触发 //禁止触发信号,等待回波信号
//若测量标志清零,则触发下一次测量的触发信号
counter=0; Sendflag=1;
//串口通信,定时发送数据
SensorFlag=1;
32
沈阳工业大学本科生毕业设计(论文)
}
void Timer1_ISR(void)interrupt 3 //定时器1中断服务子程序 { }
void PCA0(void) interrupt 6 {
CCF1=0; csb=sound;
if(csb&&SensorFlag) { }
else if(Count_Flag) {
CR=0;
//停止计数,并取出计数值
stempl=CCAP1L; stemph=CCAP1H; CL=0; CH=0; CCAP1L=0x00; CCAP1H=0x00;
temp_l[SensorCounter] = Get_distance();
//若返回引脚为低,且测量标志位为高
CR=1;
//计数开始
Count_Flag=1;
//若返回引脚为高
//关模块1中断
else if(Warning_Flag==2) { } else { }
P4=1;
//防止结束时候是低电平
static char WFlag=0; WFlag++; if(WFlag==5) { }
P4=~P4; WFlag=0;
33
沈阳工业大学本科生毕业设计(论文)
}
void WarningControl_temp(void) { }
void WarningControl_pressure(void) {
if(pres>HIGH) //如果压力大于上限 {
if(pres>HIGH) //可以消除蜂鸣器非正常响 { }
Warning_Flag=1; //如果压力大于 HIGH,蜂鸣器报警
if(temp>HIGH) //如果温度大于上限 {
if(temp>HIGH) //可以消除蜂鸣器非正常响 { }
Warning_Flag=1; //如果温度大于 HIGH,蜂鸣器报警
}
SensorCounter++; { }
DistanceDataProcess(); SensorCounter=0;
//数据处理
//温度数据个数计数器自加
if(SensorCounter==60)
SensorFlag=0; Count_Flag=0;
}
else if(temp Warning_Flag=0; //其它情况蜂鸣器不报警 if(temp Warning_Flag=2; //如果温度小于 LOW,蜂鸣器报警 } 34 沈阳工业大学本科生毕业设计(论文) } } else if(pres Warning_Flag=0; //其它情况蜂鸣器不报警 if(pres Warning_Flag=2; //如果压力小于 LOW,蜂鸣器报警 } 源代码二:MAX485串口通信部分 #include \ unsigned char Send_Buf[7]={'#',0x04,0,0,0,0,0x55}; //发送两个字节数据 void Send(unsigned char *S); void DataChang(unsigned int Dis,unsigned int Tem); /*--------------------------------------------------*/ //函数名称:serial //功能描述:串口接收中断服务 //入口参数:无 //返回值:无 void serial() interrupt 4 { } /*--------------------------------------------------*/ //函数名称:Send //功能描述:将串口发送数据缓冲区中所有数据发出 //入口参数:缓冲区地址 //返回值:无 void SendOneByte(uchar ch) // MAX485异步串行通信 { ES = 0; TI = 0; SBUF=ch; while (TI == 0 ); TI= 0 ; RI=0; 35