利用ds18b20检测当前温度isd1420语音芯片的温度报警程序
功能:利用ds18b20检测当前温度,通过和设定参数的比较,给ISD1420发出
报警脉冲,通过功率放大器LM386 驱动喇叭报警。
注: isd1420的报警采用延时方式(isd1420的延时报警取决于录音时间的长短)
#include<reg51.h>
#include<intrins.h>
#include <absaCC.h>
#define uchar unsigned char
#define uint unsigned int
#define PLAYE_ADDR XBYTE[0XBFFF] //语音报警地址
#define BUSY 0x80 //LCD忙检测标志
#define DATAPORT P0
sbit P1_0=P1^4; //时钟调整
sbit P1_1=P1^5; //时钟加
sbit P1_2=P1^6; //时钟减
sbit RED_ALARM=P1^0; //红色指示灯
sbit WRITE_ALARM=P1^1; //白色指示灯
sbit GREEN_ALARM=P1^2; //绿色指示灯
sbit DQ = P3^7; //定义ds18b20通信端口
sbit LCM_RS=P2^0; //数据/命令端
sbit LCM_RW=P2^1; //读/写选择端
sbit LCM_EN=P2^2; //LCD使能信号
sbit RECLED_EOC=P3^5; //ISD1420放音结束查询标志
unsigned char seconde=0; //定义并初始化时钟变量
unsigned char minite=0;
unsigned char hour=12;
unsigned char mstcnt=0;
unsigned char temp1,temp2,teMP3;
unsigned char runtime; //系统运行总时间
unsigned char t;
unsigned int temp;
uchar code str0[]={"--- : : ---of"};
uchar code str1[]={"temp: . C------"};
void delay_LCM(uint); //LCD延时子程序
void initLCM( void); //LCD初始化子程序
void lcd_wait(void); //LCD检测忙子程序
void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数
void WritEDAtaLCM(uchar WDLCM); //写数据到LCM子函数
void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数
void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数
void init_timer0(void); //定时器初始化
void displayfun1(void);
void delay_18B20(unsigned int i);
void Init_DS18B20(void) ;
uchar ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void ReadTemperature(void);
void playalarm(void);
/*********延时K*1ms,12.000mHz**********/
void delay_LCM(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++)
{;}
}
}
/**********写指令到ICM子函数************/
void WriteCommandLCM(uchar WCLCM,uchar BusyC)
{
if(BusyC)lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0; // 选中指令寄存器
LCM_RW=0; // 写模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}
/**********写数据到LCM子函数************/
void WriteDataLCM(uchar WDLCM)
{
lcd_wait( ); //检测忙信号
DATAPORT=WDLCM;
LCM_RS=1; // 选中数据寄存器