代码是在12M的晶振的晶振下调试出来的,希望可以给大家带来参考价值
#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#include
#define uchar unsigned char
#define uint unsigned int
uchar Flag=0; //定义一个全局的标志位
uchar Feng=0;
sbit ds= P3^1; //接18B20
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<12; k++)
{ }
}
}
void dsreset(void)//初始化函数
{
uint i;
ds=0;
i=97;
while(i>0)
i--;
ds=1;
i=4;
while(i>0)
i--;
}
bit tempreadbit(void) //读一个字节
{
uint i;
bit dat;
ds=0;
i++;
ds=1;
i++; //i++起延时作用
i++;
dat=ds;
i=8;
while(i>0)
i--;
return(dat);
}
uchar tempread(void)//读一个数据
{
uchar i=8,dat=0;
bit j;
for(i=1;i<=8;i++)
{
dat=dat>>1;
j=tempreadbit();
if(j==1)
dat=dat|(0x80);
}
return(dat);
}
void tempwritebyte(uchar dat)//写一个字节
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&(0x01);
dat=dat>>1;
if(testb)
{
ds=0;
i++;
i++;
ds=1;
i=8;
while(i>0)
i--;
}
else
{
ds=0;
i=8;
while(i>0)
i--;
ds=1;
i++;
i++;
}
}
}
void tempchange(void)
{
dsreset();
delay(1);
tempwritebyte(0xcc); //写跳过读rom
tempwritebyte(0x44); //写温度转换
}
float get_temp()
{
uchar a;
uint b;
float Read_Value;
dsreset();
//tempwritebyte(0xcc); //写跳过读rom
//tempwritebyte(0x44); //写温度转换
delay(10);
//dsreset();
tempwritebyte(0xcc);//写跳过读ROM
tempwritebyte(0xbe);//读暂存器
a = tempread();
b = tempread();
b = (b << 8) + a;
Read_Value = b *0.0625;
// delay(1000);
return(Read_Value);
}
void Display1() //显示温度
{
int temp,temp1;
temp=get_temp();
temp1 = temp*100;
P1 = 0x80|(temp1/1000);
delay(10);
P1 = 0x40|(temp1%1000/100);
delay(10);
P1 = 0x20|(temp1%1000%100/10);
delay(10);
P1 = 0x10|(temp1%1000%100%10);
}
main()
{while(1)
{
tempchange();
Display1(); //显示温度
}
}
关键字:单片机的 温度传感器 18b20
引用地址:
基于单片机的温度传感器18b20的C语言程序
推荐阅读最新更新时间:2024-03-16 16:12
单片机的状态机框架编写
在单片机裸机的编程方法中,状态机的方法是比较好的,经典的比如按键的检测判断等。 其实有很多地方可以使用这种思想。比如传感器的数据采集,因为单片机不可能一直等待着运行,那样的效率是很低的,通常都是结合fsm + timer的方式来提高CPU的使用率 一、传感器中使用fsm的方法。 大家都知道,ds18b20的采集是比较慢的,发送转换指令后,最慢需要等待720ms,这个时间有点太长了。简直不能忍受。 如下所示:我采用了11bit分辨率,0.125的分辨率足够了,作为温度参考而已。 The resolution of the temperature sensor is user - configurable to 9, 10,
[单片机]
51单片机自定义函数实现任意串口的printf()
在嵌入式开发过程中,往往需要多个串口进行通讯,使用printf函数是个不错的选择,格式化输出后方便实用; 不论什么型号的单片机,只要支持标准C的编译器,都可以实现此功能, 添加如下头文件; #include stdio.h #include string.h #include stdarg.h 下面是函数定义,可以移植到任意的串口; bit S1_busy; unsigned char idata Put_buf ; //最大数量 void my_printf(char* fmt,...) { unsigned char i,len; va_list ap; va_start(ap,fmt);
[单片机]
如何正确的划分51单片机中的RAM
前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。 51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 的片内 RAM 地址从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。片外 RAM 最大可以扩展到 0x0000~0x
[单片机]
MCS-51系列单片机实现PWM输出功能的方法解析
MCS-51系列单片机无PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。采用高速光隔6N137输出,并将PWM的信号倒相。 一、 工作原理 二、PWM输出 1. 固定脉宽PWM输出 用T0定时器完成PWM输出,脉宽固定为65536us。T0定时器设置成16位定时器,PWM波形如图2所示。 程序清单:(12MHz) PwmData0;T0定时t1的初值(字) PwmData1;T0定时t2的初值(字) PwmF ;PWM输出标志 ;*************************** setb tr0;启动T0 …… ;T0中断服务程序 T0Int:JB,PwmF,PWMOUT ;PWM
[单片机]
飞思卡尔面向要求严苛的家电和工业应用扩展32位ColdFire MCU组合
飞思卡尔扩展其32位ColdFire MCU组合,以满足最严格的家电和工业应用的性能需求。MCF51AG128 MCU新系列提供最佳的性能和功能,以加强应用的系统安全和完整性,包括洗衣机、洗碗机、冰箱、微波炉、空调、工业传动系统/泵、风扇/压缩机。 电源电压为2.7V – 5.5V时,AG128 MCU以高达50 MHz的处理器内核速度进行运行,同时包括128KB的Flash内存和16KB的 SRAM。多个封装选项,外加新的GPIO增强功能,这将在布局和生产过程中实现最大灵活性。 该外设集专为实现三相电机控制应用的有效控制而设计。它包括两个16位FlexTimers、高速模拟比较器,双通道16位PWM定
[单片机]
基于51单片机和数码管的万年历程序
可实现功能: 启动程序数码管按照××-××-××格式显示时分秒并走时 按下C1按钮后按照××-××-××格式显示年月日 按下C3调时模式按钮时分秒/年月日静止,指示灯亮起,进入调时模式 先按C2选位按钮再按下C0加一按钮,对应的位置改变 再次按下C3按钮退出调时模式,继续走时 #include reg51.h #define uChar unsigned char #define uInt unsigned int uChar a ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uChar b ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
[单片机]
基于单片机的智能排插的设计方案
1 引言 随着节能减排、绿色环保意识的不断增强,人们对家用电器的节能减排提出了更高的要求。但并不是每家每户都有资金去更换使用多年、现在仍可以使用的家用电器。为此,本文设计研发了一款基于51 单片机控制的节能环保的智能排插,旧一代的家电通过使用这个排插可以蜕变为智能化家电,具备遥控、定时开关、无待机功耗等功能,节约了家电更新换代的成本。该排插现场运行效果良好,符合一般用户需求,具有一定的推广应用价值。 2 智能排插基本工作原理 为方便用户使用,本设计将系统分成两部分:排插控制系统和排插遥控器系统(如图1、图2 所示),它们分别由一片AT89S52 单片机控制。在排插控制系统中,单片机通过无线接收模块接收遥控器的
[单片机]
一文详解80C51单片机的中断系统
中断系统是计算机或者单片机的主要功能部件。 有了中断系统,便可以使微处理器具备对外部的异步事件进行处理的能力。 当微处理器的CPU正在执行程序的过程中,如果外部硬件或者内部组件有紧急的请求(如通信,断点,发生重大故障等),中断系统就可以将当前的程序暂停,优先处理这些中断请求。 这种处理方式,对整个系统的稳定性,健壮性至关重要,同时也能大大提高处理器的效率,使得系统的应用更加灵活多变。 中断的概念 中断是指单片机在执行程序的过程中,当出现异常情况或特殊请求时,单片机停止当前程序的运行,转向对这些异常情况或特殊请求进行处理,当处理结束后再返回原程序的间断处,继续执行原程序,这一现象称为中断。 中断是单片机实时处理内部或外部事件的一
[单片机]