⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 此程序是我用AT89S52单片机来控制显示屏FYD12864,采用C语言编写的可以显示图形,我调试了一周,在此和大家一起分享
💻 C
字号:
#include "main.h"
#include "reg52.h"
//#include "ds18b20intrins.h"
#include "absacc.h"
#include "stdio.h"
#include "math.h"
#define uchar unsigned char
#define uint unsigned int

extern unsigned char Temperature_Lsm;
extern unsigned char Temperature_Msm;
sbit P3_5=P3^5;
uchar TEMP;                             	// 温度值的变量;
uchar flag1;                                    // 结果为负和正的标志位。		

void Delay (unsigned int count)
{           						
    unsigned int i;	
    while (count)	
    {
        i =200;
        while (i>0) i--;
        count--;
    }
}

void Temperature_Reset(void)                              // 发送复位和初始化
{
    unsigned int i;
    P3_5 = 0;	
    i = 103;
    while (i>0) i--;                    			// 延时
    P3_5 = 1;	
    i = 4;	
    while (i>0) i--;	
}

bit Temperature_Readbit(void)                          	// 读取数据的一位
{ 
    unsigned int i;
    bit dat;
    P3_5 = 0; i++;	
    P3_5 = 1; i++; i++;             			//延时	
    dat = P3_5;	
    i = 8; while (i>0) i--;             			// 延时
    return (dat);
}   

unsigned char Temperature_Readchar(void)                       //读一个字节
{
    unsigned char i,j,dat;	
    dat = 0;	
    for (i=1;i<=8;i++)
    {
        j =Temperature_Readbit();	
        dat = (j << 7) | (dat >> 1);	
    }
    return (dat);
}   

void Temperature_Write(unsigned char dat)                   //写一个字节
{   
    unsigned int i;
    unsigned char j;
    bit testb;	
    for (j=1;j<=8;j++)
    {	
        testb = dat & 0x01;
        dat = dat >> 1;	
        if (testb)
    	{	
            P3_5 = 0;       				// 写0 
            i++; i++;  
            P3_5 = 1;	
            i = 8; while (i>0) i--; 
    	}
        else	
    	{
            P3_5 = 0;       				// 写0 
            i = 8; while (i>0) i--; 
            P3_5 = 1;
            i++; i++;  
    	}
    }
}

void Temperature_Change(void)                            // ds1820 开始转换
{  
    Temperature_Reset();             				// 复位
    //tmpre ();                     		// 等待存在脉冲	
    Delay (1);              				// 延时
    Temperature_Write(0xcc);                        	// 跳过序列号命令
    Temperature_Write(0x44);                        // 发转换命令 44H,	
}

void Read_Temperature(void)                     		// 读取温度
{ 
    //unsigned char a,b;
    Temperature_Reset();             				// 复位
    Delay (1);              				// 延时
    Temperature_Write(0xcc);                        // 跳过序列号命令
    Temperature_Write(0xbe);                    	// 发送读取命令
    Temperature_Lsm= Temperature_Readchar();                    		// 读取低位温度	
    Temperature_Msm= Temperature_Readchar();                    	//读取高位温度	
    flag1=Temperature_Msm;                        		//若b为1则为负温
    if(flag1)
    {
        TEMP=~Temperature_Lsm+1;                      //如果为负温则去除其补码
    }
    else	
    {
        TEMP=Temperature_Lsm;	
    }
}

/*
main()
{
    do{	
        Tmperature_Change();                			// 开始温度转换
        Delay(200);             				// 读取延时
        Read_Tmperature();              				//读取温度
    }while(1);	
}   
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -