谁用STC1T的单片机写过ds18b20程序流程图,求程序

用8051单片机编的DS18B20显示温度程序,是按照书上写的,数码管却显示4095.希望各位大虾给看看啊_百度知道
用8051单片机编的DS18B20显示温度程序,是按照书上写的,数码管却显示4095.希望各位大虾给看看啊
硬件应该没啥问题吧,这里附上软件,麻烦各位给看看哦。程序如下:#include &reg51.h&unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit DQ=P3^3;unsigned char tempL=0;unsigned char tempH=0;/*延时子程序,入口参数:k*/void delay(unsigned int k){
while(k--);
}/*数码管扫描延时子程序*/void delay1(void){
for(k=0;k&400;k++); }/*数码管显示子程序,入口参数:k*/void display(int k){
P0=tab[k/1000];
P0=tab[k%];
P0=tab[k%100/10];
P0=tab[k%10];
}/*DS18B20初始化子程序*/bit Init_DS18B20(void){
unsigned char x=0;
delay(80);
delay(14);
delay(20);
return(x);
}/*向DS18B20读一字节数据,出口参数:dat*/ReadOneChar(void){
unsigned char i=0;
unsigned char dat=0;
for(i=8;i&0;i--)
DQ=0; dat&&=1; DQ=1; if(DQ) dat|=0x80; delay(4); } return(dat);
} /*向DS18B20写一字节数据,入口参数:dat*/WriteOneChar(unsigned char dat){
unsigned char i=0;
for(i=8;i&0;i--)
DQ=0; DQ=dat&0x01; delay(5); DQ=1; dat&&=1; }
}/*向DS18B0读温度值,出口参数:temprature*/int ReadTemperature(void){
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL= ReadOneChar();
tempH= ReadOneChar();
temperature=((tempH*256)+tempL)*0.0625;
delay(200);
return(temperature);
}void main(){
i=ReadTemperature(); display(i); }
提问者采纳
我看了一些你的程序,没看到什么问题。显示不正常可能是因为:1、硬件问题,ds18b20出现故障,可能性不大!2、软件问题。18b20对时序要求非常严格,我要求学生练习时序的时候,就拿18b20作为实例18b20对时序要求非常严格,我想问几个问题。你选用的晶振是多少?你严格按照说明书说的时序了吗?我没有测试你的程序,只是结合我以前的程序给你一些建议///////DS18B20初始化子程序////////void DS18B20_rst(void)
Delay(30); //精确延时
480~960us DQ = 1;
Delay(8); }unsigned int DS18B20_Read(void)
{ int i=0;unsigned int u=0; for (i=0;i&16;i++){
if(DQ) u|=0x8000;
Delay(4);} return (u);}void DS18B20_Write(unsigned char ku)
for (i=0;i&8;i++){
DQ =ku&0x01;
ku&&=1;}} void Display(void)
DS18B20_rst();
DS18B20_Write(0xCC);
DS18B20_Write(0x44);
DS18B20_rst();
DS18B20_Write(0xCC);
DS18B20_Write(0xBE);
tp=DS18B20_Read();
//取得DS18B20读的温度值
tp=(unsigned int)(tp*6.2俯掸碘赶鄢非碉石冬将5); }我的晶振是11.0592,单片机用的是普通12分频的STC89C51你对照改一下OK希望对你能有帮助
其他类似问题
ds18b20的相关知识
其他2条回答
96e4ioyouyi9t8uhjgib hijrgoibkvgm,h bif俯掸碘赶鄢非碉石冬将knbglrtp8gyhbyktgr
可能是读温度太频繁了,,在循环里不断的读,至少也要每隔一段时间才读取一次温度
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求个STC1T的单片机读取DS18B20的程序,12M晶振,我用的是STC12C5202AD单片机._百度知道
求个STC1T的单片机读取DS18B20的程序,12M晶振,我用的是STC12C5202AD单片机.
修改别人的程序改延时,12M晶振,我用的是STC12C5202AD单片机,时序老是不对求个STC1T的单片机读取DS18B20的程序
提问者采纳
com/datasheet/stc/STC-USER-CODE/STCMCU-DS18B20:你用其中1T的程序试试
提问者评价
太坑爹了,刚在STC官网找到了,就这个,可以用了,谢谢。
其他类似问题
您可能关注的推广
ds18b20的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求大神,52单片机上DS18B20采集的温度显示在1602上的程序_百度知道
求大神,52单片机上DS18B20采集的温度显示在1602上的程序
*------------------------------------------------
读取温度------------------------------------------------*//Init_DS18B20(); 给脉冲信号
dat|=0x80.x C
可以显示负温度
数码管显示同时通过串口发送到电脑端显示
使用HY配套的测温软件 晶振使用11;*------------------------------------------------
读取一个字节------------------------------------------------*/高位b&lt:/18b20;/
/ 启动温度转换DelayMs(10);#include&#include&quot, x=1则初始化失败 DelayUs2x(25);=1; /=8; } return(dat);0; / DQ = 1.h& 跳过读序号列号的操作WriteOneChar(0x44);/ }DelayUs2x(25);i--) {
DQ = 0;for (i=8; / /unsigned int t=0; /稍作延时返回********************HY-mini51实验开发板例程**********************
DelayUs2x(25);&bit Init_DS18B20(void){ bit dat=0,有印字那边对外面
*---------------------------------------------------------------*//
/稍做延时 DQ = 0;低位b=ReadOneChar();&/return(t);/ for (i=8;精确延时 大于 480us 小于960us DelayUs2x(200);/如果x=0则初始化成功;/i&/t=a+b;
//=1;*------------------------------------------------
18b20初始化------------------------------------------------*/检测初始化是否成功WriteOneChar(0xCC):DS18b20数码管显示同时将值送到电脑
内容;unsigned int b=0;
DQ = 1;&#47:显示格式 符号读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();/
DelayUs2x(25); i--) {
DQ = 0;0;WriteOneChar(0xCC);
DQ = 1;void WriteOneChar(unsigned char dat){ unsigned char i=0.0592M
硬件事项; /DQ复位 DelayUs2x(5);
dat&/ i&/ 给脉冲信号
DQ = dat&0x01; /
/ /单片机将DQ拉低 DelayUs2x(200):18B20插到座上;unsigned char ReadOneChar(void){unsigned char i=0;//unsigned int ReadTemperature(void){unsigned char a=0;拉高总线 DelayUs2x(50);/unsigned char dat = 0;}&#47.h&&*------------------------------------------------
写入一个字节------------------------------------------------*/ DQ = 1;
/}//跳过读序号列号的操作 WriteOneChar(0xBE);
/ /15~60us 后 接收60-240us的存在脉冲 dat=DQ这事两个子程序的例子;while(Init_DS18B20()); /}/
。解决了另外加分求大神加q聊。本人q,本人c语言较差
提问者采纳
我有做过我个的Proteus仿真.实物没做过.没买LCD
提问者评价
其他类似问题
ds18b20的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁问题补充&&
com/datasheet/stc/STC-U**R-CODE/STCMCU-DS18B20:http./...ry.rar你用其中1T的程序试试
•回答
•回答
•回答
•回答
•回答
猜你感兴趣
服务声明: 信息来源于互联网,不保证内容的可靠性、真实性及准确性,仅供参考,版权归原作者所有!Copyright &
Powered by

我要回帖

更多关于 stm32 ds18b20程序 的文章

 

随机推荐