您当前的位置:五五电子网电子知识单片机-工控设备51单片机利用ds18b20检测当前温度isd1420语音芯片的温度报警程序 正文
利用ds18b20检测当前温度isd1420语音芯片的温度报警程序

利用ds18b20检测当前温度isd1420语音芯片的温度报警程序

点击数:7863 次   录入时间:03-04 11:51:34   整理:http://www.55dianzi.com   51单片机
    LCM_RW=0;               // 写模式
    LCM_EN=1;
    _nop_();
    _nop_();
    _nop_();
    LCM_EN=0;
}

/***********lcm内部等待函数*************/

void lcd_wait(void)
{
    DATAPORT=0xff;         
    LCM_EN=1;
    LCM_RS=0;               
    LCM_RW=1;               
    _nop_();
    _nop_();
    _nop_();
    while(DATAPORT&BUSY)
    {
        LCM_EN=0;
       _nop_();
       _nop_();
       LCM_EN=1;
       _nop_();
       _nop_();
    }
       LCM_EN=0;
    
}

/**********LCM初始化子函数***********/

void initLCM( )
{   
    DATAPORT=0;    
    delay_LCM(15);
    WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号
    delay_LCM(5); 
    WriteCommandLCM(0x38,0);
    delay_LCM(5); 
    WriteCommandLCM(0x38,0);
    delay_LCM(5); 

    WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号
    WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号
    WriteCommandLCM(0x01,1);    //清屏,检测忙信号
    WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号
    WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号
}

/****************显示指定坐标的一个字符子函数*************/

void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
    Y&=1;
    X&=15;
    if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40
    X|=0x80;                    //指令码为地址码+0X80
    WriteCommandLCM(X,0);
    WriteDataLCM(DData);
}

/***********显示指定坐标的一串字符子函数***********/

void DisplayListChar(uchar X,uchar Y,uchar code *DData)
{
    uchar ListLength=0;
    Y&=0x01;
    X&=0x0f;
    while(X<16)
    {
        DisplayOneChar(X,Y,DData[ListLength]);
        ListLength++;
        X++;
    }
}

/***********ds18b20延迟子函数(晶振12MHz )*******/ 

void delay_18B20(unsigned int i)
{
    while(i--);
}

/**********ds18b20初始化函数**********************/

void Init_DS18B20(void) 
{
     unsigned char x=0;
     DQ = 1;          //DQ复位
     delay_18B20(8);  //稍做延时
     DQ = 0;          //单片机将DQ拉低
     delay_18B20(80); //精确延时 大于 480us
     DQ = 1;          //拉高总线
     delay_18B20(14);
     x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
     delay_18B20(20);
}

/***********ds18b20读一个字节**************/  

unsigned char ReadOneChar(void)
{
    uchar i=0;
    uchar dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; // 给脉冲信号
          dat>>=1;
          DQ = 1; // 给脉冲信号
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
/*************ds18b20写一个字节****************/  

void WriteOneChar(uchar dat)
{
     unsigned char i=0;
     for (i=8; i>0; i--)
     {
          DQ = 0;
         DQ = dat&0x01;
        delay_18B20(5);
         DQ = 1;
        dat>>=1;
 }
}

/**************读取ds18b20当前温度************/

void ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;

    Init_DS18B20();
    WriteOneChar(0xCC);        // 跳过读序号列号的操作
    WriteOneChar(0x44);     // 启动温度转换

    delay_18B20(100);       // this message is wery important

    Init_DS18B20();
    WriteOneChar(0xCC);     //跳过读序号列号的操作
    WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

    delay_18B20(100);

    a=ReadOneChar();        //读取温度值低8位
    b=ReadOneChar();           //读取温度值高8位

上一页  [1] [2] [3] [4]  下一页


本文关键字:程序  语音  检测  51单片机单片机-工控设备 - 51单片机