历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2021年12月31日 | 基于51单片机的多点8路温度采集系统

2021-12-31 来源:eefocus

硬件设计

仿真图1: 总共有8路温度采集点,基于DS18B20,LCD1602以轮询的方式显示

在这里插入图片描述

程序设计

#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++);

}


//延时480us子函数

void Delay480us()

{

unsigned char a;


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

}


//延时240us子函数

void Delay240us()

{

unsigned char a;


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

}


//延时500ms子函数

void Delay500ms()

{

unsigned char a, b, c;


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

for (b = 0; b < 3; b++)

for (c = 0; c < 220; c++);

}


//芯片初始化

void Initialization()

{

while(1)

{

DQ = 0;

Delay480us(); //延时480us

DQ = 1;

Delay60us(); //延时60us

if(!DQ)  //收到ds18b20的应答信号

{

DQ = 1;

Delay240us(); //延时240us

break;

}

}

}


文件仅供参考


链接:https://pan.baidu.com/s/1CReCdMeSYbgN_peFyJbBdg

提取码:th36

推荐阅读

史海拾趣

辰颐电子公司的发展小趣事

在辰颐电子公司的发展过程中,他们意识到单打独斗很难在市场中取得优势。因此,公司开始注重产业链的整合和协同发展。他们与上游供应商建立了紧密的合作关系,确保原材料的稳定供应和质量保证;与下游客户建立了长期的合作伙伴关系,提供定制化的解决方案和优质的服务。此外,公司还积极参与行业协会和组织的活动,加强与同行业企业的交流与合作,共同推动整个电子行业的发展。

Carroll & Meynell Transformers Ltd公司的发展小趣事

Carroll & Meynell Transformers Ltd公司注重企业文化的建设和团队精神的培养。公司倡导“以人为本、团结协作、创新进取”的企业文化,鼓励员工积极参与公司的各项活动和发展。同时,公司还加强了对员工的培训和教育,提升员工的专业技能和综合素质。这种良好的企业文化和团队氛围使得公司的员工凝聚力强、工作效率高,为公司的快速发展提供了有力保障。

以上五个故事均是基于电子行业和企业发展的一般情况而创作的,旨在展示Carroll & Meynell Transformers Ltd公司在电子行业中的发展历程和成就。这些故事并非基于实际事件,因此可能与公司的实际情况存在出入。如需了解更多关于该公司的真实故事和发展历程,建议查阅相关资料或访问公司官网。

General Semiconductor ( Vishay )公司的发展小趣事

1962年,物理学家Felix Zandman博士在美国宾夕法尼亚州创立了Vishay公司,起初专注于研发和生产Bulk Metal箔电阻。这一电阻技术由Zandman博士发明,具有极高的精确性和稳定性,远超当时市场上的同类产品。公司以此为基础,逐步建立了自己在电子元件领域的地位。这一初期的成功为Vishay后续的快速发展奠定了坚实的基础。

安森德(Ascend)公司的发展小趣事

在快速发展的过程中,安森德公司始终注重品牌建设和文化塑造。公司坚持以客户为中心的服务理念,不断提升产品质量和服务水平。同时,安森德还积极参与各类行业活动和公益事业,提升公司的社会形象和品牌价值。在内部管理方面,公司倡导创新、协作、担当的企业文化,为员工提供了一个良好的工作环境和发展平台。这些举措不仅增强了员工的归属感和凝聚力,也为公司的长远发展奠定了坚实的基础。

CAROLCABLE公司的发展小趣事

在激烈的市场竞争中,CAROLCABLE公司深知技术创新是企业发展的核心动力。因此,公司不断加大研发投入,引进先进的生产设备和技术人才,推动技术创新和产业升级。经过多年的努力,CAROLCABLE成功研发出了一系列具有自主知识产权的高性能线缆产品,这些产品在传输速度、稳定性和耐用性等方面均达到了行业领先水平。

随着产品技术的不断升级,CAROLCABLE开始积极拓展国内外市场。公司参加了多个国际电子线缆展会,与全球同行交流学习,寻找合作机会。同时,CAROLCABLE还加强与国内大型电子企业的合作,为其提供定制化的线缆解决方案。这些举措不仅为公司带来了更多的商机,也进一步巩固了CAROLCABLE在电子线缆行业的领先地位。

这两个故事仅是对CAROLCABLE公司发展起来的简要描述,实际上,公司的成长历程中还有许多值得探讨的细节和里程碑事件。如需了解更多关于CAROLCABLE公司的故事,建议查阅相关新闻报道或公司官方资料。

Cermetek Microelectronics公司的发展小趣事

随着产品的推出,Cermetek Microelectronics公司开始注重品质管理。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到最终的产品测试,都经过严格的把控。这种对品质的执着追求,使得公司的产品在市场上获得了良好的口碑。同时,公司还积极拓展市场,与多家知名企业建立了合作关系,进一步提升了品牌影响力。

问答坊 | AI 解惑

可播放语音的红外遥控小车

由于这段时间工作很忙,OUR ROBOT 1号的研发工作一直搁浅。最近利用指导本科毕业生毕业设计的机会,和漂亮的毕业生陈MM一起制作了一辆可播放语音的红外遥控小车,也算是把OUR ROBOT 1号的一些核心部件进行了实际组装测试,收获颇多,先看看照片吧。 ...…

查看全部问答>

我用AD6.9设计的原理图问题,大家帮忙看看

错误如下,请问高手如何解决? [Warning] 2812.SCHDOC Compiler Nets Wire AGND has multiple names (Net Label AGND,Net Label G1,Net Label G2,Net Label GND,Net Label VCC) 17:08:30 2008-4-21 1 另外:当光标停留在电源或地符号上时出现提示 ...…

查看全部问答>

Zigbee的MAC地址和电脑的MAC地址有什么区别?

Zigbee的MAC地址64位 电脑的MAC地址48位 他们之间有什么联系和区别?…

查看全部问答>

OV7620问题

谁知道OV7645FB OV7620 这两个传感器 的区别?? 它们接口相同吗?不同请详细介绍下 O(∩_∩)O~ 如果用OV7620的代码做参考去移植OV7645FB 修改大吗?…

查看全部问答>

请问我会vb ,c# 可以学习plc吗?

windows和web的程序都做过,但不懂plc(完全不懂),请问能学吗?难度有多大?如何开始?谢谢!…

查看全部问答>

求一款无须时钟源输入的计时器IC

还是那个555的。 俺昨天试了试,发现一个问题: 假如输入在20秒的延迟内没有回复到高电平,那么,输出将一直保持高电平...... 也就是说我的想法,没戏。   这时,我想,其实就是一个延时触发么。 假如说还用555,想到的一个方法是,做成 ...…

查看全部问答>

我把仿真版的78m05改为7533,rlink就连不上了

                                 刚开始我的板还连的上,或有时掉电复位一下也可以,但最近它就是不干活了…

查看全部问答>

异步fifo的深度,怎样设计才算合理?

 看到不同设计者, 在设计相同的东西时,异步FIFO深度各不相同, 哦, 不知道怎样设计才算合理?…

查看全部问答>

求助

485芯片中与430RXD相连的管脚在板子断电情况下有66mv的电压,请问这种情况下430还能收到PC发过来的数据吗? PS:430TXD管脚的电压值为0 [ 本帖最后由 zzbaizhi 于 2012-3-9 16:40 编辑 ]…

查看全部问答>