历史上的今天
返回首页

历史上的今天

今天是:2025年02月25日(星期二)

正在发生

2020年02月25日 | 51单片机控制八个DS18B20温度传感器显示

2020-02-25 来源:51hei

 


单片机源程序如下:

#include

#include


#define                DATA        P1      //1602驱动端口

//ROM操作命令

#define                 READ_ROM                       0x33                    //读ROM 

#define                 SKIP_ROM                       0xCC                    //跳过ROM 

#define                 MATCH_ROM               0x55                    //匹配ROM 

#define                 SEARCH_ROM              0xF0                    //搜索ROM 

#define                 ALARM_SEARCH            0xEC                    //告警搜索


//存储器操作命令

#define                 ANEW_MOVE                     0xB8                    //重新调出E^2数据

#define                 READ_POWER              0xB4                    //读电源

#define                 TEMP_SWITCH             0x44                    //启动温度变换 

#define                 READ_MEMORY             0xBE                    //读暂存存储器

#define                 COPY_MEMORY             0x48                    //复制暂存存储器

#define                 WRITE_MEMORY            0x4E                    //写暂存存储器


//数据存储结构

typedef struct tagTempData

{

        unsigned char                                         btThird;                                                        //百位数据                                        

        unsigned char                                         btSecond;                                                        //十位数据

        unsigned char                                         btFirst;                                                        //个位数据

        unsigned char                                         btDecimal;                                                        //小数点后一位数据

        unsigned char                                        btNegative;                                                        //是否为负数                

}TEMPDATA;

TEMPDATA m_TempData;



//引脚定义

sbit                                                         DQ = P2^7;                                                        //数据线端口

sbit                 RS=                P2^0;

sbit                 RW=                P2^1;

sbit                 E=                P2^2;



//DS18B20序列号,通过调用GetROMSequence()函数在P1口读出(读8次)

const unsigned char code ROMData1[8] = {0x28, 0x33, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xD7};        //U1

const unsigned char code ROMData2[8] = {0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E};        //U2

const unsigned char code ROMData3[8] = {0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9};        //U3

const unsigned char code ROMData4[8] = {0x28, 0x32, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xE0};        //U4

const unsigned char code ROMData5[8] = {0x28, 0x34, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x52};        //U5

const unsigned char code ROMData6[8] = {0x28, 0x35, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x65};        //U6

const unsigned char code ROMData7[8] = {0x28, 0x36, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x3C};        //U7

const unsigned char code ROMData8[8] = {0x28, 0x37, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x0B};        //U8


//判断忙指令

void Busy()

{

        DATA = 0xff;

        RS = 0;

        RW = 1;

           while(DATA & 0x80)

           {

                E = 0;

                   E = 1;

           }

           E = 0;

}


//写指令程序

void WriteCommand(unsigned char btCommand)

{

        Busy();

        RS = 0;

        RW = 0;

        E = 1;

        DATA = btCommand;

        E = 0;

}


//写数据程序

void WriteData(unsigned char btData)

{

        Busy();

        RS = 1;

        RW = 0;

        E = 1;

        DATA = btData;

        E = 0;

}


//清屏显示

void Clear()

{

        WriteCommand(1);

}


//初始化

void Init()

{

        WriteCommand(0x0c);        //开显示,无光标显示

        WriteCommand(0x06);        //文字不动,光标自动右移

        WriteCommand(0x38);        //设置显示模式:8位2行5x7点阵

}


//显示单个字符

void DisplayOne(bit bRow, unsigned char btColumn, unsigned char btData, bit bIsNumber)

{

        if (bRow)                 WriteCommand(0xc0 + btColumn);

        else                      WriteCommand(0x80 + btColumn);


        if (bIsNumber)         WriteData(btData + 0x30);

        else                   WriteData(btData);

}


//显示字符串函数

void DisplayString(bit bRow, unsigned char btColumn, unsigned char *pData)

{

        while (*pData != '')

           {

                   if (bRow) WriteCommand(0xc0 + btColumn);        //显示在第1行

                   else            WriteCommand(0x80 + btColumn);        //显示在第0行

                WriteData(*(pData++));                                                //要显示的数据

                btColumn++;                                                                        //列数加一

           }

}


//延时16us子函数

void Delay16us()

{

        unsigned char a;


        for (a = 0; a < 4; a++);

}


//延时60us子函数

void Delay60us()

{

        unsigned char a;


        for (a = 0; a < 18; a++);

推荐阅读

史海拾趣

Emhiser Research Inc公司的发展小趣事

Emhiser Research在成立之初就专注于半导体技术的研究。随着市场对更高效能、更小体积的芯片需求的增长,公司研发团队成功开发出了一种新型的高性能低功耗芯片。这一技术突破迅速吸引了众多手机厂商和电子设备制造商的关注。Emhiser抓住这一市场机遇,与多家大型企业建立了合作伙伴关系,其产品迅速在市场上占据了一席之地。

FRIWO公司的发展小趣事

作为全球化的技术型企业,FRIWO在全球范围内设立了研发、生产和营销部门,以满足不同市场的需求。FRIWO的电源解决方案业务部(FPS)专注于为客户量身订做电源解决方案,其客户群遍布医疗科技、IT通讯、家用电器、移动工具以及工业应用等多个领域。为了更好地服务本地客户,FRIWO在不同地区设立了分支机构,确保能够快速响应客户需求并提供专业的技术支持和服务。这种全球化布局与本地化服务的策略,使得FRIWO在激烈的市场竞争中保持了强劲的竞争力。

American Technical Ceramics (ATC)公司的发展小趣事

FRIWO公司自成立以来,始终在技术领域保持领先地位。从便携式收录机问世之初,FRIWO就凭借其先进的技术在该领域崭露头角。随后,随着技术的不断进步,FRIWO迅速将业务扩展到Atari计算机、摄影机等新兴领域,并成功成为这些领域的电源解决方案提供商。近年来,FRIWO更是专注于移动电话充电器市场,凭借其卓越的技术实力和创新能力,成为了世界上移动电话充电器的最主要供应商。这一系列的成功,彰显了FRIWO在电子行业中的技术领先地位和多元化发展战略。

AUREL公司的发展小趣事

AUREL公司深知人才是企业发展的核心动力。因此,公司一直注重人才的引进和培养。通过与高校和研究机构的合作,公司吸引了大批优秀的研发人才和管理人才。同时,公司还建立了完善的人才激励机制和培训体系,为员工提供了广阔的职业发展空间。这些举措使得AUREL公司的人才队伍不断壮大,为公司的持续发展提供了有力保障。

Deutron Electronics Corp公司的发展小趣事

随着环保意识的日益提高,Deutron Electronics Corp也积极响应环保号召,致力于实现绿色生产和可持续发展。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对节能减排的投入,提高了资源利用效率。这些努力使得Deutron Electronics Corp在行业内树立了良好的环保形象,也为公司的长期发展奠定了坚实基础。

Dionics Inc公司的发展小趣事

在经历了一段艰难的市场竞争后,Dionics Inc决定加大研发投入,寻求技术突破。经过数年的努力,公司成功研发出一款具有自主知识产权的高性能微处理器芯片,该芯片在性能上大幅超越同类产品,并在市场上取得了良好的口碑。随着这款芯片的成功上市,Dionics Inc的市场份额也逐渐扩大。

问答坊 | AI 解惑

欧姆龙PLC中断问题

欧姆龙PLC如何实现中断,从那里进入及退出,请高人指点!…

查看全部问答>

[求助]关于直接通过I/O接口访问硬盘数据的可能性及思路的探索。

这个问题大概是这样的:     在OS里要访问硬盘上的数据要经过文件系统,现在我想不经过文件系统,直接对硬盘上的数据进行读写。     我的思路来自于市场上的硬盘播放器(就是可以直接播放硬盘里的多媒体文件的设备)。查了一 ...…

查看全部问答>

请问在wince里怎样用wifi发送特定数据

请问在wince里怎样用wifi发送特定数据 有人说就是socket编程,我没想明白,难道系统会自动调用wifi? 还请各位前辈指点迷津!…

查看全部问答>

学习AD0809,所以做一个数字电压表!

想学习一下AD,打算仿真做一个数字电压表,测量0~5V输出0~255,通过数码管显示,AD用的0809,模拟输入采用一个1K滑动变阻器连接到IN0(不知道这种做法是否可行?)现在的问题是,改变滑动变阻器的值,数码管的值有变化,但是并不是有规律地增大或 ...…

查看全部问答>

ST选型

请问谁清楚ST的哪个8位机有2个PWM,3个定时器,10路ADC,34个I/O(含10个AD口) ,是用来做电源的。wendellyang@163.com…

查看全部问答>

热电堆 信号选择

小弟最近想做一个用于微波炉的温度测量的红外探测模块。由于以前都没有做过项目,所以经验非常少,现在我苦于热电堆型号的挑选。         网上看了看有这些:SC0067、SC0070、10TP583T、OTP系列(如OTP-537F2、OTP- ...…

查看全部问答>

关于硬盘无刷电机的驱动

小弟在研究硬盘电机的驱动,我曾试过用小功率管9013,8050,8550等等来搭成达林顿管子,但是驱动电机的时候发热严重,而且明显有气无力...虽然能转...在网上找了很久,想用场效管IRF540N来驱动,但是不知道电路如何搭建...求各位高手,走过路过的能 ...…

查看全部问答>

差分放大器低通滤波器设计

有没谁用差分放大器做个低通滤波器的?请指点小弟一下,谢了...…

查看全部问答>

大三学生方向分流,求好心人指点

大三嵌入式又要分方向了, ARM 、 PCL、 单片机,感觉吧....就是没感觉,有没有前辈给这三个方向的发展,优缺点,就业情况分析一下啊? 小弟先谢谢了....!!!   …

查看全部问答>

针对beaglebone 扩展板,进行Linux驱动的调试!

好久没有发帖子了!今天来分享一下针对beaglebone 扩展板,进行Linux驱动的调试吧! 第二次修正beaglebone板子的外围电路还是比较顺利的! 具体编译内核的过程就不在介绍了!论坛里有很多人写了这方面的教程,Ti官方的文档也提供了较为全面的编译 ...…

查看全部问答>