WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
delay_18B20(100);
a=ReadOneChar(); //读取温度值低8位
b=ReadOneChar(); //读取温度值高8位
temp1=b<<4;
temp1+=(a&0xf0)>>4; //小数点前的数据
temp2=a&0x0f; //小数点后的数据
temp=temp1;
// temp=((b*256+a)>>4);//当前采集温度值除16得实际温度值
// temp1 = t/100%10; //温度值十位
// temp2 = t/10%10; //温度值个位
// temp3 = t%10; //温度值十分位
}
/***************液晶显示子函数1正常显示*****************/
void displayfun1(void)
{
WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
DisplayOneChar(6,0,minite/10+0x30);
DisplayOneChar(7,0,minite%10+0x30);
DisplayOneChar(9,0, seconde/10+0x30);
DisplayOneChar(10,0,seconde%10+0x30);
DisplayOneChar(5,1,temp1/10+0x30);
DisplayOneChar(6,1,temp1%10+0x30);
DisplayOneChar(8,1,temp2/10+0x30);
}
/***************定时器t0初始化*******************/
void init_timer0(void)
{
TMOD=0x01; //time0为定时器,方式1
TH0=0x3c; //预置计数初值
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}
/***********定时器t0中断子函数**************/
void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次
{
TH0=0x3c;
TL0=0xb0;
mstcnt++;
if(mstcnt>=20 ) {seconde++; mstcnt=0; }
if(seconde>=60) {minite++; seconde=0;}
if(minite>=60 ) {hour++; minite=0; }
if(hour>=24 ) {hour=0;}
}
/*****************系统报警子函数***************************/
void playalarm(void) //语音提示温度上升过快
{
if(temp>20&&temp<25)
{
RED_ALARM=0;
PLAYE_ADDR=0x11;
_nop_();
PLAYE_ADDR=0x10;
delay_LCM(2000); //等待放音结束
RED_ALARM=1;
}
if(temp>25&&temp<30) //语音提示温度上升过慢
{
GREEN_ALARM=0;
PLAYE_ADDR=0x21;
_nop_();
PLAYE_ADDR=0x20;
delay_LCM(2000);
GREEN_ALARM=1;
}
if(temp>30) //语音提示恒温控制
{
WRITE_ALARM=0;
PLAYE_ADDR=0x31;
_nop_();
PLAYE_ADDR=0x30;
delay_LCM(1000);
WRITE_ALARM=1;
}
}
/***************the main funtion****************/
void main(void)
{
P1=0xff; //初始化p1口,全设为1
P3=0xff;
delay_LCM(500);
initLCM( ); //LCD初始化
上一页 [1] [2] [3] [4] 下一页
本文关键字:程序 语音 报警器 51单片机,单片机-工控设备 - 51单片机