历史上的今天
返回首页

历史上的今天

今天是:2025年02月10日(星期一)

正在发生

2020年02月10日 | DS18B20多点测温源程序+proteus仿真工程

2020-02-10 来源:51hei

多点测温 + 1602显示仿真原理图如下

单片机源程序如下:

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define lcddata P0

sbit rs=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

sbit DQ=P2^3;

sbit key=P3^7;

uchar temp1[]={"T :       "};

uchar temp2[]={"T :       "};

/*uchar temp3[9]={"T3:      "};

uchar temp4[9]={"T4:      "};

uchar temp5[9]={"T5:      "};

uchar temp6[9]={"Ta:      "};*/ 

uchar code ds_rom1[]={0x28,0x22,0x22,0x22,0x00,0x00,0x00,0xca};//U2ROM

uchar code ds_rom2[]={0x28,0x33,0x33,0x33,0x00,0x00,0x00,0xa0};//U3ROM

uchar code ds_rom3[]={0x28,0x44,0x44,0x44,0x00,0x00,0x00,0xAF};//U4ROM

uchar code ds_rom4[]={0x28,0x55,0x55,0x55,0x00,0x00,0x00,0xC5};//U5ROM

uchar code ds_rom5[]={0x28,0x66,0x66,0x66,0x00,0x00,0x00,0x7B};//U6ROM

int temp;//温度

bit temp_flag,value_flag;//正负标志位

int t1,t2,t3,t4,t5,num=1;

/*1602LCD函数*/

void delay(uint x)

{

        uint a,b;

        for(a=x;a>0;a--)

                for(b=110;b>0;b--);

}


void writelcd(uchar dat,bit x)//写0指令,1数据

{

        e=0;

        lcddata=dat;

        rs=x;

        rw=0;

        e=1;

        delay(1);

        e=0;

}


void initlcd()

{

        writelcd(0x38,0);

        writelcd(0x0c,0);

        writelcd(0x06,0);

        writelcd(0x01,0);

}

/*DS18B20*/

void delayus(uchar x)//        延时1us

{

        while(--x);

}


bit init_DS18B20()//初始化函数

{

        bit Status_DS18B20;

        DQ=1;

        DQ=0;

        delayus(250);

        DQ=1;

        delayus(20);

        if(!DQ)

                Status_DS18B20=0;

        else

                Status_DS18B20=1;

        delayus(250);

        DQ=1;

        return Status_DS18B20;


}


uchar read_DS18B20()//读数据

{

        uchar i=0,dat=0;

        for(i=0;i<8;i++)

        {

                DQ=1;

                DQ=0;

                dat>>=1;

                DQ=1;

                if(DQ)

                        dat|=0x80;

                DQ=1;

                delayus(25);

        }

        return(dat);

}


void write_DS18B20(uchar dat)//写数据

{

        uchar i;

        for(i=0;i<8;i++)

        {

                DQ=1;

                dat>>=1;

                DQ=0;

                DQ=CY;

                delayus(25);

                DQ=1;

        }

}


void Match_rom(uchar a)         //匹配ROM

{

        uchar j;

        write_DS18B20(0x55);           //发送匹配ROM命令

        if(a==1)

        {

                for(j=0;j<8;j++)

                        write_DS18B20(ds_rom1[j]);                //发送18B20的序列号,先发送低字节 

        }

        if(a==2)

        {

                for(j=0;j<8;j++)

                        write_DS18B20(ds_rom2[j]);                //发送18B20的序列号,先发送低字节 

        }

        if(a==3)

        {

                for(j=0;j<8;j++)

                        write_DS18B20(ds_rom3[j]);                //发送18B20的序列号,先发送低字节 

        }

        if(a==4)

        {

                for(j=0;j<8;j++)

                        write_DS18B20(ds_rom4[j]);                //发送18B20的序列号,先发送低字节 

        }

        if(a==5)

        {

                for(j=0;j<8;j++)

                        write_DS18B20(ds_rom5[j]);                //发送18B20的序列号,先发送低字节 

        }


}


void gettemp(uchar z)/*读取温度值并转换*/

{        

        uchar a,b;

        while(init_DS18B20());    

        if(z==1)

        {

                Match_rom(1);                 //匹配ROM 1

        }

        if(z==2)

        {

                Match_rom(2);                 //匹配ROM         2

        }

        if(z==3)

        {

                Match_rom(3);                 //匹配ROM         3

        }

        if(z==4)

        {

                Match_rom(4);                 //匹配ROM         4

        }

        if(z==5)

        {

                Match_rom(5);                 //匹配ROM         5

        }


        write_DS18B20(0x44);//*启动温度转换*/

        while(init_DS18B20());    

        if(z==1)

        {

                Match_rom(1);                            //匹配ROM 1

        }

        if(z==2)

        {

                Match_rom(2);                                //匹配ROM         2

        }

        if(z==3)

        {

                Match_rom(3);                 //匹配ROM         3

        }

        if(z==4)

        {

                Match_rom(4);                 //匹配ROM         4

        }

        if(z==5)

        {

                Match_rom(5);                 //匹配ROM         5

        } 

        write_DS18B20(0xbe);//*读取温度*/ 

        a=read_DS18B20();

        b=read_DS18B20();

        temp=b;

        temp<<=8;

        temp=temp|a;

    if(b>=8)

        {

                temp=~temp+1;

            temp_flag=1;

        }

    else

    {        

                temp_flag=0;

        }

        if(temp_flag==1)

                temp=temp*0.625*-1;

        if(temp_flag==0)

                temp=temp*0.625;

        if(z==1)

        t1=temp;

        if(z==2)

        t2=temp;

        if(z==3)

        t3=temp;

        if(z==4)

        t4=temp;

        if(z==5)

        t5=temp;

}

void display(uchar i)//显示函数

{

        char y,value;

        temp=abs(temp);

推荐阅读

史海拾趣

APEM公司的发展小趣事

在20世纪末和21世纪初,APEM通过一系列收购和技术合作,不断增强自身的技术实力和市场竞争力。例如,APEM收购了丹麦的高性能PCB轻触开关制造商MEC,以及美国的开关面板制造商UNIFAB。这些收购不仅使APEM获得了先进的技术和知识产权,也为其在全球市场的竞争中赢得了先机。

通过以上五个故事,我们可以看到APEM公司在电子行业的发展历程中,始终坚持创新、扩张和合作的战略,不断壮大自身实力,成为行业内的佼佼者。

Chenmoun Enterprise Ltd公司的发展小趣事

Chenmoun Enterprise Ltd成立之初,专注于研发和生产电子产品的基础元件。随着技术的不断发展,公司敏锐地把握了市场趋势,开始研发具有创新性的芯片技术。通过不懈的努力,Chenmoun成功推出了性能卓越、成本更低的芯片产品,迅速占据了市场份额,并逐渐在电子行业内崭露头角。

Flexxon Pte Ltd公司的发展小趣事

随着电子行业的不断发展和市场需求的日益多样化,Flextronics(Flexxon Pte Ltd)开始实施多元化战略,积极拓展新的业务领域。公司不仅继续深耕消费电子、通信设备等传统市场,还积极涉足汽车电子、医疗电子、物联网等新兴领域。通过并购、合作等多种方式,Flextronics不断拓宽产品线和服务范围,为客户提供更加全面和专业的解决方案。这一战略调整不仅为公司带来了新的增长点,也进一步提升了公司的市场竞争力。

艾为(AWINIC)公司的发展小趣事

随着艾为电子在技术和产品方面的不断突破,公司开始积极拓展市场。艾为电子的产品不仅覆盖了华为、小米等知名手机厂商,还广泛应用于可穿戴设备、智能便携设备等领域。同时,公司还加大了品牌建设的力度,通过参加行业展会、举办技术研讨会等方式,提高了品牌知名度和影响力。

固得沃克(GOODWORK)公司的发展小趣事

深圳市固得沃克电子有限公司(GOODWORK)的故事始于2004年,当时公司正式成立,专注于半导体分立器件的研发、生产和销售。公司总部设在深圳,并创立了自主品牌“GK”。这一时期的固得沃克,凭借对技术的执着追求和对市场的敏锐洞察,逐步在电子行业站稳脚跟。公司初期虽面临诸多挑战,但凭借团队的坚持和创新精神,逐渐赢得了客户的信赖,为后续的快速发展奠定了坚实基础。

AOS公司的发展小趣事

随着技术的不断发展和市场的扩大,AOS公司开始积极寻求全球扩张的机会。1998年,AOS在南京独资成立了中国总部,开始了其在中国的深耕之旅。通过多年的努力,AOS在中国建立了完善的产研基地和销售网络,其产品横跨家用和商用两大领域,赢得了广大消费者的信任和喜爱。如今,AOS已成为中国市场上备受推崇的热水设备品牌之一。

问答坊 | AI 解惑

CN3063-专为太阳能供电方案

概述:             CN3063是可以用太阳能电池供电的单节锂电池充电管理芯片.该器件 内部包括功率晶体管,应用时不需要外部的电流检测电阻和阻流二极管.         内 ...…

查看全部问答>

cofdm 无线应急指挥调度系统

cofdm产品   无线应急指挥调度系统…

查看全部问答>

仪表放大器设计指南

本帖最后由 paulhyde 于 2014-9-15 03:59 编辑 仪表放大器设计指南,希望对做仪器仪表的同学有所帮助!  …

查看全部问答>

摩托罗拉的MC9S08AC16的I/O口带负载能力是多少呀?

如题。 刚刚用这个东西,翻了规格书也不知道。 MC9S08AC16的I/O究竟可以驱动多大的电流,希望各位可以给出一个精确的数据。 谢谢啦。…

查看全部问答>

CAN总线概况与原理

一、概述       对于一般控制,设备间连锁可以通过串行网络完成。因此,BOSCH公司开发了CAN总线(Controller Area Network),并已取得国际标准化组织认证(ISO11898),其总线结构可参照I SO/OSI参考模型。同时,国际上一些大的半导体 ...…

查看全部问答>

网络收音机有人做不?

网络收音机有人做不? 我想玩玩…

查看全部问答>

WinCE 文件夹属性

Directory(\"\\123\"):-Directory(\"war3 \") 可以在mycomputer目录下创建一个文件夹,请问这个文件夹的属性要怎么设置 ?…

查看全部问答>

我在fedora9上的交叉编译

编译embedded flash出现了impossible constraint in `asm\'错误,不知道怎么解决,是修改makefile文件么?…

查看全部问答>

求助t-DMB的音频AAC++负载

本人最近在做T-DMB项目,想问问AAC++方面的!   我现在把SL包解析后获得SL包负载数据是如何组织的?我要对AAC++解码,该如何处理SL包的负载? 有搞过这方面的大侠吗?给点提示,定重谢! 我最想知道到底解析音频SL包后的数据是啥格 ...…

查看全部问答>