历史上的今天
返回首页

历史上的今天

今天是:2025年06月20日(星期五)

正在发生

2018年06月20日 | 温度传感器18B20(串口显示)

2018-06-20 来源:eefocus

/*温度传感器18B20--串口显示温度*/  

#include  

#include   

  

typedef unsigned char uint8;  

typedef unsigned int  uint16;  

typedef          char int8;  

typedef          int int16;  

sbit DQ=P3^2;    //温度输入口  

  

void nops()  

{  

    _nop_();  

    _nop_();  

    _nop_();  

    _nop_();  

}  

  

void delay(uint16 n)  

{  

    while(n--);  

}  

  

void delay_ms(uint16 n)  

{  

    uint8 m=120;  

  

    while (n--)  

        while (m--);  

}  

  

void DS18b20_reset(void)  

{  

    bit flag=1;  

        while (flag)  

        {  

            DQ = 1;  

            delay(1);   //7.5us  

            DQ = 0;  

            delay(50); //139.8us  

            DQ = 1;   

            delay(6);  // 21us  

            flag = DQ;  

        }  

    delay(45);    //延时500us  

    DQ=1;  

}  

  

  

/* 

 * 18B20写1个字节函数 

 * 向1-WIRE总线上写一个字节 

*/  

void write_byte(uint8 val)  

{  

    uint8 i;  

  

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

    {  

        DQ = 1;  

        _nop_();     //两次传送间隔大于1us  

        DQ = 0;  

        nops(); //4us  

        DQ = val & 0x01;      //最低位移出  

        delay(6);           //66us  (30US)  

        val >>= 1;          //右移一位  

    }  

    DQ = 1;  

    delay(1);    

}  

  

  

/* 

 * 18B20读1个字节函数 

 * 从1-WIRE总线上读取一个字节 

*/  

uint8 read_byte(void)  

{  

    uint8 i, value=0;  

  

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

    {  

        value >>= 1;  

        DQ=1;  

        _nop_();  

        DQ = 0;  

        nops();   //4us  

        DQ = 1;  

        nops();   //4us   

        if (DQ)  

            value|=0x80;  

        delay(6);           //66us  

    }  

    DQ=1;  

    return value;  

}  

  

  

/* 

 * 启动温度转换 

*/  

void start_temp_sensor(void)  

{  

   DS18b20_reset();  

   write_byte(0xCC); // 发Skip ROM命令  

   write_byte(0x44);// 发转换命令  

}  

  

  

/* 

 * 读出温度 

*/  

int16 read_temp(void)  

{  

    uint8 temp_data[2]; // 读出温度暂放  

    int16 temp;  

  

    DS18b20_reset();  // 复位  

    write_byte(0xCC); // 发Skip ROM命令  

    write_byte(0xBE); // 发读命令  

    temp_data[0]=read_byte();  //温度低8位  

    temp_data[1]=read_byte();  //温度高8位  

  

    temp = temp_data[1];  

    temp <<= 8;  

    temp |= temp_data[0];  

    temp >>= 4;     //注意是移动四位  

  

    return temp;  

}  

  

/** 

 * UART初始化 

 * 波特率:9600 

*/  

void uart_init(void)  

{  

    TMOD = 0x21;        // 定时器1工作在方式2(自动重装)  

    SCON = 0x50;        // 10位uart,允许串行接受  

  

    TH1 = 0xFD;  

    TL1 = 0xFD;  

  

    TR1 = 1;  

}  

  

/** 

 * UART发送一字节 

*/  

void UART_Send_Byte(uint8 dat)  

{  

    SBUF = dat;  

    while (TI == 0);  

    TI = 0;  

}  

  

/** 

 * 将数据转换成ASC码并通过UART发送出去 

*/  

void UART_Send_Dat(uint8 dat)    //100度以下温度可用  

{  

    UART_Send_Byte(dat/10%10 + '0');  

    UART_Send_Byte(dat%10 + '0');  

}  

  

   

  

main()  

{  

    int16 ans;  

  

    uart_init();  

    start_temp_sensor();  

    while (1)  

    {  

        delay_ms (1000); // 延时1秒  

  

        ans=read_temp();  

      

        if (ans < 0)  

        {  

            UART_Send_Byte('-');  

            ans = -ans;  

        }  

      

        UART_Send_Dat(ans);  

        UART_Send_Byte('\r');  

        UART_Send_Byte('\n');  

    }  

  


推荐阅读

史海拾趣

DETCO公司的发展小趣事

在电子产品行业日益关注环保和可持续发展的背景下,ElectronicsCorp采取了一系列积极措施。公司开始使用环保材料制造产品,并优化生产流程以减少能源消耗和废物排放。此外,ElectronicsCorp还推出了一系列回收计划,鼓励消费者将旧电子产品回收再利用。这些措施不仅提高了公司的环保形象,还增强了消费者对公司品牌的忠诚度。

扬州国芯(Gcore)公司的发展小趣事

为了进一步拓展全球市场,ElectronicsCorp制定了国际化战略。公司先后在北美、欧洲和南美等地设立了研发中心和生产基地。这些海外机构不仅为ElectronicsCorp提供了更广阔的市场空间,还使其能够更深入地了解不同地区的消费者需求和文化背景。通过本土化战略的实施,ElectronicsCorp逐渐在海外市场取得了成功。

Akustica(Bosch)公司的发展小趣事

ElectronicsCorp最初是一个在亚洲某城市的小型电子产品制造商。它以其高质量和合理的价格迅速获得了市场份额。公司创始人李先生坚持将研发作为核心驱动力,不断投入资金研发新技术。随着时间的推移,ElectronicsCorp的产品线不断扩大,包括智能手机、平板电脑和智能家居设备。凭借持续的创新和卓越的质量,ElectronicsCorp逐渐成长为全球电子行业的领导者。

台湾第一电阻(Firstohm)公司的发展小趣事
电冰箱发出异常声音可能是由多种原因引起的,如压缩机工作声音、制冷剂流动声音、风扇转动声音等。如果声音过大或异常,可能是部件松动、磨损或故障等原因引起的。此时应停止使用电冰箱,并请专业人员进行检查和维修。
Highland Electronics Co Ltd公司的发展小趣事

在追求技术创新和商业成功的同时,High Tech Chips Inc还积极践行环保和可持续发展理念。公司致力于开发绿色、低碳的芯片产品和技术解决方案,减少生产过程中的能源消耗和环境污染。同时,公司还积极参与社会公益活动,支持教育、环保等领域的项目发展。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长远发展注入了新的动力。

请注意,以上故事均为虚构内容,旨在展示电子行业高科技芯片公司可能的发展路径和策略。在实际情况中,不同公司的发展故事会因其独特的背景、资源和市场环境而有所不同。

浙江凡华(FANHAR)公司的发展小趣事

面对全球半导体市场的周期性波动和贸易环境的不确定性,High Tech Chips Inc展现出了强大的应变能力和灵活性。在市场需求下滑时,公司迅速调整产品结构,加大在物联网、5G通信等新兴领域的研发投入。同时,通过优化供应链管理、提高生产效率等方式降低成本,保持了良好的盈利能力。这种灵活应对市场挑战的策略使得公司在行业低谷期依然能够稳健发展。

问答坊 | AI 解惑

三极管资料大全

比较常见的三极管参数资料,看后记得回帖哦!…

查看全部问答>

数控电位器与89c51的连接?

谁帮我发个资料,数控电位器与89c51的连接图 发到邮箱:aaagfc@126.com 不胜感激…

查看全部问答>

发个3524做逆变电源的资料

不知道会不会出不出这类电源~~…

查看全部问答>

使用PPPD拨号建立连接,PING不通域名

使用PPPD控制GPRS模块拨号上网后,直接PING外网IP可以PING通,便是PING域名就不通,请问应怎样解决? 感觉应该是DNS的问题,使用PPPD能自动获取DNS吗,或怎样设置?…

查看全部问答>

编译WinCe内核,platform builder5死机是什么问题

请问一下,在我的台式机上能编译通过的WinCe内核,却把他转移到我的笔记本上的platform builder5编译却死机了 我笔记本上的信息: 系统:vista CPU:core2 T5670 请问这是什么问题?…

查看全部问答>

MouseMove消息异常,请大家帮忙分析原因

系统:CE5,开发工具:EVC4 用DirectShow开发MP3播放器,功能已经实现。但明天测试发现一个问题,先描述一下: 播放MP3,触笔点击播放进度条调整播放进度,然后正常播放。此时一切正常! 但是当这首歌播放完毕,自动转到下一首时,出现异常:不是 ...…

查看全部问答>

52步进电机控制

52控制步进电机,有仿真。…

查看全部问答>

一位老电子工程师十年的职场感悟

一位老电子工程师十年的职场感悟 当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!   [1]好好规划自己的路,不 ...…

查看全部问答>

Android系统如何操作CPU的GPIO口和串口

深圳扬创科技的Android工业平板电脑,是基于Cortex-A8架构的,支持以太网,串口,GPIO口等,方便用户直接进行通信控制。GPIO操作函数如下: 8路输出口: (1)IO全部输出为高按钮:控制8路输出全部为高电平。 (2)IO全部输出为低按钮:控制8 ...…

查看全部问答>

晒WEBENCH设计的过程+设计一款家用5W冷光LED照明灯电源

一 方案构想    现在LED照明非常火热,号称绿色能源,比节能灯寿命长,但是价格还是比较高。想着设计一款冷光LED灯,5W,可以做洗墙灯,装饰灯,台灯照明,卧室照明等应用。 二、设计过程            ...…

查看全部问答>