历史上的今天
返回首页

历史上的今天

今天是:2025年04月26日(星期六)

2019年04月26日 | PIC单片机DS18B20温度报警程序及仿真

2019-04-26 来源:eefocus

1、采用直插式数字温度传感器DS18B20; 


2、本程序只显示正数部分,负数部分请自行解决,而且精度保留后两位; 


3、使用DS18B20的跳过ROM指令,不支持单总线多个传感器的采集; 


4、采用pic18f45k22芯片及共阴极数码管显示; 


5、源程序如下: 

*#include “p18f45k22.h” 

*#define uchar unsigned char 

*#define DQ PORTBbits.RB0 

*#define DQ_HIGH() TRISBbits.RB0=1 

*#define DQ_LOW() TRISBbits.RB0=0;DQ=0 

uint tempr; 

uchar a1,a2,a3,a4;//鏁扮爜绠℃樉绀虹殑鍊? 

const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 

const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; 

void delayus(uchar x); 

void disp(uchar num1,uchar num2,uchar num3,uchar num4); 

void init(); 

void reset(); 

void write_byte(uchar date); 

uchar read_byte(); 

void get_tem(); 

int main(int argc, char const *argv[]) 

/* code */ 

init(); 

PORTA=0; 

while(1){ 

get_tem(); 

if((tempr/100)>30) 

PORTA=1; 

else 

PORTA=0; 

}


return 0;


void init(){ 

ANSELA=0; 

ANSELB=0; 

ANSELC=0; 

ANSELD=0; 

TRISA=0; 

TRISC=0; 

TRISD=0; 

void reset(){ 

uchar st=1; 

DQ_HIGH(); 

Nop();Nop(); 

while(st){ 

DQ_LOW(); 

delayus(121);//750us 

DQ_HIGH(); 

delayus(8);//70us 

if(DQ==1) 

st=1; 

else 

st=0; 

delayus(80); 

void write_byte(uchar date){ 

uchar i,temp; 

DQ_HIGH(); 

Nop();Nop(); 

for(i=8;i>0;i–){ 

temp=date&0x01; 

DQ_LOW(); 

delayus(0);//20us~15us 

if(temp==1) 

DQ_HIGH(); 

delayus(4);//45us 

DQ_HIGH(); 

date=date>>1; 

uchar read_byte(){ 

uchar i,date; 

//static bit j; 

for(i=8;i>0;i–){ 

date=date>>1; 

DQ_HIGH(); 

Nop();Nop(); 

DQ_LOW(); 

Nop();Nop();Nop();Nop();Nop();Nop(); 

DQ_HIGH(); 

Nop();Nop();Nop();Nop(); 

//j=DQ; 

//if(j==1) 

if(DQ==1) 

date=date|0x80; 

delayus(1); 

return (date); 

void get_tem(){ 

uchar tem1,tem2; 

uint i; 

reset(); 

write_byte(0xcc);//璺宠繃 rom 

write_byte(0x44);//娓╁害杞崲 

// delayus(121);//750us


    for(i=125;i>0;i--){

    disp(a1,a2,a3,a4);

    }

reset();

write_byte(0xcc);

write_byte(0xbe);//璇昏浆鎹㈢粨鏋?鍏堣鐨勬槸浣庡瓧鑺?

tem1=read_byte();

tem2=read_byte();

tempr=(tem2*256+tem1)*6.25;

a1=tempr/1000;

a2=tempr%1000/100;

a3=tempr%100/10;

a4=tempr%10;


void delayus(uchar x){ 

uchar i; 

for(i=x;i>0;i–); 

// delayus(0);//22 

// delayus(1);//29 

// delayus(4);//47 

// delayus(8);//71 

// delayus(80);//503 

// delayus(121);//751 

void disp(uchar num1,uchar num2,uchar num3,uchar num4) 

PORTC=table[num1];//显示第一个数码管 

PORTD=0xfe;//0010 0000 

delayus(250); 

PORTD=0xff; 

PORTC=table1[num2];//显示第二个数码管 

PORTD=0xfd;//0001 0000 

delayus(250); 

PORTD=0xff; 

PORTC=table[num3];//显示第三个数码管 

PORTD=0xfb;//0000 1000 

delayus(250); 

PORTD=0xff; 

PORTC=table[num4];//显示第四个数码管 

PORTD=0xf7;//0000 0100 

delayus(250); 

PORTD=0xff; 

delayus(250); 

}//部分文字乱码,不兼容,没办法; 

6、仿真图: 

 
这里写图片描述 

7、这里补充说明一下,由于编译器的版本较低不能使用bit类型,没有配置状态字; 

8、对于18B20的使用主要注意通信协议:延时有2us到750us不等,所以需要注意,这里以read_byte()函数为例,读取每个18B20的byte,首先我们要一个位一个位的读取,使用右移指令来或0x80这样就可以得到一个8位数据,最后返回date;


推荐阅读

史海拾趣

格科微电子(GALAXYCORE)公司的发展小趣事

格科微电子(GALAXYCORE)公司的发展故事

故事一:创立与初期发展

格科微电子(GALAXYCORE)公司成立于2003年,由中国半导体行业的领军人物赵立新创立。赵立新曾在新加坡国立半导体公司和美国ESS公司积累了丰富的半导体设计经验,回国后,他凭借对CMOS图像传感器的深刻理解,创立了这家公司。初期,格科微电子专注于设计和开发具有成本优势的CMOS图像传感器,这些传感器主要用于功能手机和PC摄像头市场。随着技术的不断积累和产品线的扩展,格科微电子逐渐在市场上站稳了脚跟。

故事二:抓住智能手机市场机遇

进入2007年,随着国内智能手机市场的快速发展,格科微电子敏锐地捕捉到了这一机遇,迅速调整经营重点,将主要资源投入到智能手机图像传感器的研发和销售中。通过不断创新和优化产品设计,格科微电子的CMOS图像传感器在智能手机领域获得了广泛应用,逐渐在行业内崭露头角。这一转型不仅推动了公司的快速发展,也奠定了格科微电子在CMOS图像传感器领域的市场地位。

故事三:技术突破与市场份额提升

在持续的技术创新和研发投入下,格科微电子于2013年实现了重大技术突破,成为中国首家将背照技术应用于200万像素CMOS图像传感器并成功实现批量交付的国内企业。这一技术突破极大地提升了公司产品的性能和市场竞争力,使得格科微电子在全球CMOS图像传感器市场的份额迅速提升。到2014年,格科微电子已稳坐国内CMOS图像传感器出货量第一的宝座,并在全球市场占有率上达到了第二,全年出货量超过9.4亿颗芯片。

故事四:科创板上市与资本助力

2023年8月18日,格科微电子在上海证券交易所科创板成功上市,盘前市值一度突破千亿。此次上市不仅为公司带来了大量的资金支持,也进一步提升了公司的品牌影响力和市场竞争力。在资本市场的助力下,格科微电子将继续加大在技术研发、市场拓展和产能扩张等方面的投入,推动公司业务的持续快速增长。

故事五:新项目建设与未来展望

为了满足市场日益增长的需求,格科微电子启动了“12英寸CIS集成电路特色工艺研发与产业化项目”。该项目旨在通过引进先进设备和技术,提升公司在中高阶CIS产品的生产能力。目前,项目已完成首批设备的安装调试,并顺利产出了良率符合预期的合格产品。随着更多设备的安装和投产,公司的产能将进一步提升,预计最终将实现月产20,000片晶圆的产能。这一项目的成功实施将有助于公司在未来市场竞争中占据更有利的位置,实现更大的发展。

ETA-USA公司的发展小趣事

ETA-USA公司起源于XXXX年,当时由几位电子工程领域的先驱者在美国密歇根州的Troy市创立了这家专注于电子技术和解决方案的公司。初创时期,ETA-USA面临着技术挑战、资金短缺和市场竞争激烈等多重困难。然而,通过不断创新和提供高质量的工程服务,公司逐渐在电子行业崭露头角,赢得了客户的信任。

CW Industries公司的发展小趣事

随着全球电子市场的不断扩大,CW Industries也积极拓展其国际业务。公司通过参加各种国际电子展会和交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。这不仅为公司带来了更多的商机,还使得CW Industries能够及时了解国际市场的最新动态和技术趋势。通过这些国际交流活动,CW Industries不断提升其品牌影响力和市场竞争力。

依必安派特(ebmpapst)公司的发展小趣事

为了进一步满足中国市场的本地化需求,依必安派特在2005年成立了依必安派特电机(上海)有限公司,开始了国产化进程。这一举措不仅提高了产品的性价比,还缩短了交货周期,使得依必安派特在中国市场的竞争力得到了显著提升。随着国产化产品的快速增长,依必安派特在中国的前十年市场业绩突飞猛进,为后续的飞跃发展打下了坚实基础。

Faraday Technology公司的发展小趣事

1996年,依必安派特在上海外高桥保税区设立了其在中国的首个据点——依必安派特风机(上海)有限公司。最初,它仅作为销售为主的贸易公司,为中国市场提供德国制造的风机和电机产品。然而,随着中国市场的快速增长和需求的不断变化,依必安派特意识到仅仅作为贸易公司已无法满足市场需求。于是,在2000年,依必安派特电气(上海)有限公司正式成立,开始在上海本地生产风机和电机,标志着依必安派特从贸易到制造的转变。

EMI Filter Company公司的发展小趣事

TDK公司,作为全球知名的电子元器件制造商,早在上世纪80年代就开始涉足EMI滤波器领域。当时,随着电子设备的日益普及,电磁干扰问题逐渐凸显。TDK看准市场需求,投入大量资源进行EMI滤波器的研发。初期,他们面临着技术难题和市场接受度的挑战。然而,通过不断的技术创新和产品迭代,TDK的EMI滤波器逐渐在市场上站稳了脚跟。他们的产品在计算机、通信设备等领域得到了广泛应用,有效解决了电磁干扰问题,提升了设备的稳定性和可靠性。

问答坊 | AI 解惑

18B20传感器

18B20温度传感器中文资料…

查看全部问答>

电路设计技术与技巧(第二版)国外牛人Tim Williams著

国际电子大侠Tim Williams(蒂姆·威廉斯)著 内容简介 本书较全面和系统地讲述了在实际电子电路设计中常见问题和容易忽视的方方面面, 涵盖了设计产品所需是的全面知识,包括印制电路板布线和接地、有源和无源器件、模拟和数字集成电路、电源、电 ...…

查看全部问答>

STC12c5a单片机外扩flash,使用XBYTE读取flash的数据

我最近遇到一个问题,请教各位高手。 STC12c5a单片机,外扩flash,p0口复用为低8位地址线和8位数据位,p2为高8位地址线。 我使用XBYTE读取flash的数据,总有读错的情况发生。程序如下: ReadData=XBYTE[BankAddress];   _nop_(); & ...…

查看全部问答>

硬盘的内部逻辑结构

   大家好,我最近在学习硬盘的逻辑结构时遇到了很大的麻烦。由于我从Google和百度上搜的资料太零散,太浅,学习不系统,导致对这方面的知识理解混乱。于是我想求助在这方面擅长的朋友,能否提供一些系统的资料,先行谢过了。…

查看全部问答>

串口通信

我现在用RS232进行PC机和单片机的通信,在用串口调试助手的时候,发现单片机发送回来的数据是乱码,请问这是什么原因?…

查看全部问答>

地址卷绕

想问下,地址卷绕是一种什么概念啊!好像发生在运算结果上溢出和下溢出时候的!…

查看全部问答>

STM32用到的TFT屏幕资料及例程.欢迎补充

既然有人需要TFT屏 资料.放假在家也没什么事.整理一下自己手头有的吧.做个抛砖引玉.希望大家能吧自己方便分享的资料都上传上传~…

查看全部问答>

可以给推荐个这样的BOOST电路吗

求推荐这样一个BOOST电路。(不能外加电源)输入电压范围是17~170V,输出28V。由于这个范围太大,想进行两级变换,前级BOOST升压,将17~34V升到34V,后级将34~170降为28V。前端设计一个BOOST电路,当输入为17~34V时通过BOOST进行升压;当输入为34~1 ...…

查看全部问答>

TI充电电池设计方案

本帖最后由 dontium 于 2015-1-23 11:47 编辑 Hi,大家好!这次与各位分享的是德州仪器的充电电池设计方案~~欢迎各位下载哟! …

查看全部问答>

用quartusII编程3-8译码器,时序仿真出错,类似延迟,求指教

代码如下: // decoder 3 to 8 decoder with an enable control; module decoder ( y , en , a ); output [ 7:0 ] y;   // 八位输出 input en;    // 使能端 input [ 2:0 ] a;   // 三位地址端 reg [ 7:0 ] ...…

查看全部问答>