历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2018年08月26日 | 基于51单片机及DS18B20温度传感器数码管显示程序

2018-08-26 来源:eefocus

#include
#include
sbit DQ=P1^4;//温度采集
sbit latch1=P2^2;//段锁存
sbit latch2=P2^3;//位锁存
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//点亮数码管
unsigned char TempData[8];//存储显示的度数
bit Readtime;//读取时间的标志



//定义延时函数delayus,delayms
void delayus(unsigned char t)
{
while(--t);
}
void delayms(unsigned char t)
{
while(t--)
{
delayus(245);
delayus(245);
}
}




//18b20初始化
bit ds18b20()
{
bit test=0;
DQ=1;//复位DQ
delayus(5);//稍作延时
DQ=0;//将DQ拉低
delayus(200);//精确延时 >480us <960us
delayus(200);
DQ=1;//将DQ拉高
delayus(50);//延时15~60us后,接收脉冲
test=DQ;//判断是否初始化成功
delayus(25);//延时后返回值
return test;
}




//显示程序函数
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;
P0=0;//防止有重影
latch1=1;//段锁存
latch1=0;


P0=dofly_WeiMa[i+FirstBit];//取位码
latch2=1;//位锁存
latch2=0;


P0=TempData[i];//取显示数据,取段码
latch1=1;//段锁存
latch2=0;


i++;
if(i==Num)
i=0;
}




//读取数据函数
unsigned char Readchar()
{
unsigned char i=0;
unsigned char test=0;
for(i=8;i>0;i--)
{
DQ=0;
test>>=1;//右移一位
DQ=1;
if(DQ)
test|=0x80;
delayus(25);

}
return(test);
}


//写入数据函数
void Writechar(unsigned char test)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=test&0x01;
delayus(25);
DQ=1;
test>>=1;
}
delayus(25);
}


//读取温度函数
unsigned int ReadTempture()
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
ds18b20();
Writechar(0xCC);//跳过读序列号
Writechar(0x44);//启动温度转换
delayms(10);
ds18b20();
Writechar(0xCC);//跳过读序列号
Writechar(0xBE);//读取温度
a=Readchar();//高8位
b=Readchar();//低8位


b<<=8;
t=a+b;
return(t);
}






//主函数main
void main()
{
unsigned int TempH,TempL,Temp;
TMOD |= 0x01;//确定使用哪个定时器,确定工作模式
  EA=1;    //打开中断允许
  ET0=1;       //定时器T0中断允许
  TR0=1;  //启动T0
while(1)
{
if(Readtime==1)
{
Readtime=0;
Temp=ReadTempture();
if(Temp&0x8000)
{
TempData[0]=0x40;//表示为负数
Temp=~Temp;//取反码
Temp+=1;//取补码
}
}
else
TempData[0]=0;//表示为正数


TempH=Temp>>4;
TempL=Temp&0x0F;
TempL=TempL*6/10;//小数近似处理


if(TempH/100==0)
TempData[1]=0;//百位温度
else
TempData[1]=dofly_DuanMa[TempH/100];//十位温度


if((TempH/100==0)&&((TempH%100)/10==0))//消隐
TempData[2]=0;
else
TempData[2]=dofly_DuanMa[(TempH%100)/10];//十位温度


TempData[3]=dofly_DuanMa[(TempH%100)%10]|0x80;//个位温度,带小数点
TempData[4]=dofly_DuanMa[TempL];//小数位温度
TempData[6]=0x39;//显示符号C


}
}




//定时中断函数
void Timer0_isr() interrupt 1 
{
 static unsigned int num;
 TH0=(65536-2000)/256;
 TL0=(65536-2000)%256;
 
 Display(0,8);//调用函数
 num++;
 if(num==300)
   {
    num=0;
    Readtime=1; //读标志位置1
}
}

推荐阅读

史海拾趣

Hirel Systems Ltd公司的发展小趣事

对于四通道红外遥控器接收器电路,网友可能提出的问题涉及多个方面,以下是一些可能的问题及回答:

一、技术原理类问题

  1. 问题:四通道红外遥控器接收器电路是如何工作的?
    回答:四通道红外遥控器接收器电路主要通过光电二极管接收遥控器发射的红外信号,经过放大、解码等处理,最终识别出不同的按键指令,并控制相应的设备执行操作。具体来说,当遥控器发射出特定频率的红外光信号时,光电二极管将光信号转换为电信号,经过放大电路放大后,送入解码器进行解码,解码器根据解码结果输出相应的控制信号,控制设备执行相应的操作。

  2. 问题:接收器电路中的关键元件有哪些?
    回答:接收器电路中的关键元件包括光电二极管(用于接收红外光信号)、放大器(用于放大微弱的电信号)、解码器(用于解码信号并输出控制信号)以及可能的滤波电路(用于滤除噪声干扰)等。这些元件共同协作,实现红外信号的接收和处理。

二、故障排查与维修类问题

  1. 问题:接收器无法接收到信号,可能的原因有哪些?
    回答:接收器无法接收到信号的可能原因包括:

    • 光电二极管损坏或老化,导致无法有效接收红外光信号。
    • 接收器电路中的连接线松动或接触不良,导致信号传输中断。
    • 放大器或解码器故障,无法对接收到的信号进行正常放大或解码。
    • 接收器受到外界干扰(如光线、电磁干扰等),影响信号的接收和处理。

    针对以上问题,可以逐一检查光电二极管、连接线、放大器、解码器等元件的状态,并采取相应的维修或更换措施。同时,注意避免将接收器放置在易受干扰的环境中。

  2. 问题:如何排查和解决接收器响应延迟或误动作的问题?
    回答:排查和解决接收器响应延迟或误动作的问题可以从以下几个方面入手:

    • 检查遥控器发射的红外信号是否正常,包括信号的频率、强度等是否符合接收器的要求。
    • 检查接收器电路中的滤波电路是否设置得当,以避免噪声干扰导致误动作。
    • 检查解码器的解码逻辑是否正确,以确保能够准确识别出遥控器发射的指令。
    • 如果以上均正常,可以考虑检查接收器的电源系统是否稳定,以及是否有其他电路元件故障导致的影响。

    针对具体问题,可以采取相应的调整或维修措施来解决。

三、应用与拓展类问题

  1. 问题:四通道红外遥控器接收器电路可以应用于哪些场景?
    回答:四通道红外遥控器接收器电路可以广泛应用于各种需要遥控控制的设备中,如智能家居系统(如电视、空调、灯光等的遥控控制)、工业自动化控制(如电机、阀门等的远程控制)、安防监控系统(如摄像头、报警器的遥控操作)等。通过扩展通道数量和增加控制逻辑,还可以实现更复杂的控制功能。

  2. 问题:如何对四通道红外遥控器接收器电路进行升级或改造?
    回答:对四通道红外遥控器接收器电路进行升级或改造时,可以考虑以下几个方面:

    • 升级光电二极管或放大器等关键元件的性能,以提高接收灵敏度和信号处理能力。
    • 增加滤波电路或改进解码算法,以减少噪声干扰和提高解码准确性。
    • 扩展通道数量或增加控制逻辑,以实现更复杂的控制功能。
    • 引入无线通信模块(如Wi-Fi、蓝牙等),将红外遥控与无线控制相结合,提高控制的灵活性和便捷性。

    在进行升级或改造时,需要根据具体的应用需求和技术条件进行选择和设计。

AEM [ American Electronic Materials]公司的发展小趣事

在电子行业的发展过程中,AEM始终保持着对技术创新的追求。公司不断投入巨资进行技术研发,引进先进的生产设备和制造工艺,致力于提升产品的性能和品质。通过多年的努力,AEM成功突破了多项技术难题,取得了一系列重要的技术成果。

此外,AEM还积极与产业上下游的企业进行合作,共同推动电子行业的发展。通过与供应商和客户的紧密合作,AEM不断优化供应链和销售渠道,提高了公司的运营效率和市场竞争力。

乾坤(Cyntec)公司的发展小趣事

乾坤(Cyntec)公司在电子行业初创时期面临着诸多挑战。由于市场上已经存在多家知名的电子产品制造商,作为一家新兴公司,乾坤必须要在激烈的市场竞争中找到自己的定位。公司创始人深知,只有通过技术创新和产品差异化,才能在市场中站稳脚跟。于是,他们投入大量资源进行研发,专注于开发高性能、高稳定性的电子元器件。经过一段时间的努力,乾坤成功推出了一系列具有自主知识产权的新型电子元器件,这些产品很快在市场上获得了良好的口碑,为公司的后续发展奠定了坚实的基础。

EDAC公司的发展小趣事

面对数字化浪潮的冲击,ECS-D公司积极拥抱数字化转型,通过引入先进的信息技术和智能化设备,提升企业的运营效率和创新能力。公司建立了数字化管理平台,实现了生产、销售、财务等各个环节的信息化管理。同时,ECS-D公司还加强了对员工的数字化培训和教育,提升员工的数字化素养和创新能力。这些数字化转型的举措使ECS-D公司在激烈的市场竞争中保持了领先地位,也为公司的未来发展奠定了坚实的基础。

以上五个故事均以ECS公司的发展为主题,分别从不同角度描述了这些公司在电子行业中的成长历程和成功经验。这些故事旨在展示ECS公司如何通过技术创新、全球化战略、品质管理、绿色环保理念和数字化转型等方式实现持续发展和壮大。

Elite Enterprises (H K) Co Ltd公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,Elite Enterprises积极寻求与行业内外的合作伙伴建立战略合作关系。公司与多家知名企业签订了长期合作协议,共同开发新产品、拓展新市场。此外,公司还与一些高校和研究机构建立了产学研合作关系,共同推动LED技术的创新和应用。

全鹏(CHAMPION)公司的发展小趣事

随着电子商务的快速发展,全鹏公司也积极拥抱这一趋势。自2010年起,全鹏公司成立了电子商务零售部门,并与国内知名电商平台建立了长期战略合作关系。通过线上销售过季产品和折扣商品,全鹏公司的电商业务迅速增长,成为其新的增长点。同时,全鹏公司还不断优化电商平台的运营和管理,提升客户服务质量,为客户提供更加便捷、高效的购物体验。

以上五个故事基于全鹏公司在电子行业的发展历程和成就进行虚构,旨在展示全鹏公司在市场拓展、品牌建设、质量管理、研发创新和电商业务等方面的努力和成果。

问答坊 | AI 解惑

串口通讯问题

pc一次向单片机发送5个字节的数,可在仿真时查看数组变量就不对,数组指针也不对,请教各位高手怎么解决?源程序如下:#include<Reg52.h>unsigned char inbuf1[4]; unsigned char count3;void init()     {   &n ...…

查看全部问答>

高分求助!进来看看,都有加分

  我想问下搞射频电子,嵌入式,通信方面分别依次要学些什么啊,最好把要看的书籍的名字写上,还有看这些书的先后顺序。我是一个电子专业的学生,想搞这些方面,虽然问题是多了点,但是那位回答的最好,分加的最多!君子一言,驷马难追! ...…

查看全部问答>

一个PCI驱动多个相同的设备

请问我有多个PCI相同的设备插在了同一台主机上,可是只有一个设备功能正常。 请教我怎样修改驱动程序让它驱动多个相同设备呢?希望各位大虾提供些思路 ,小弟是pci的初学者…

查看全部问答>

ucos iar软件

我最近正在使用IAR 编写atmega128的ucos系统  不过在isr.r90文件中,有一句汇编语句 小弟不太懂  希望高人指教。 RSEG    CODE:CODE:NOROOT(0) 这条语句中的0代表什么意思?    在写中断汇编的时候, ...…

查看全部问答>

STA后report_timing的报告分析

****************************************Report : timing        -path full        -delay max        -max_paths 1Design : adder_N4Version: Z-2 ...…

查看全部问答>

3.3 转5V用什么芯片

来自:电子工程师技术交流(12425841)…

查看全部问答>

郁闷,430控制HT1621功耗!

唉,心血来潮!用MSP430F11101A控制HT1621显示LCD,用2节5号1.5V电池供电,结果电池很快搞完了,一查430只消耗50uA电流(LPM3),那个该死的HT1621居然是150uA,哪位大侠用过,请给个注意,怎样降低HT1621的功耗?(必须保证LCD一直显示,不能关LCD) ...…

查看全部问答>

LM324中文资料

本帖最后由 dontium 于 2015-1-23 13:24 编辑 LM324中文资料 …

查看全部问答>

【MSP430共享】基于MSP430F449的数字频率计设计

摘  要: 本文主要介绍了MSP430F449单片机的性能特点,结合前置双模分频器SAB6456A和高速数字分频器74HC390的典型应用,给出了以MSP430F449为主控芯片的射频数字频率计的硬件设计和软件的主程序流程,设计出了一种全自动、数显的射频频率计。 ...…

查看全部问答>

怎么区别一块PCB板上数字模块和模拟模块

请各位大虾帮帮忙,怎么判断一个电路板上的一个模块是数字模块还是模拟模块?还是就是模拟器件与数字器件是如何确切定义是区别的?请知道的朋友帮我解答一下,对这两个概念有点混乱,先谢了!…

查看全部问答>