#include"reg51.h" #define uint unsigned int#define uchar unsigned charunsigned char code tab[] = {252,96,218,242,102,182,190,224,254,246}; sbit DQ = P2^0;int t; uint num; uchar dat; //读写数据变量 uchar a=0; uchar b=0; float tep=0; //读一个温度时的温度转换中间间 void delay1(){int i;for(i=0;i<600;i++);}void display(int k) {//P0 = 0x00;//P1 = tab[k/1000];//delay();P0 = 0x08;P1 = tab[k/100];delay1();P0 =0x0c;P1 = tab[k%100/10]+1;delay1();P0 = 0x0e;P1 = tab[k%10-1];delay1();P0 = 0x0f; }/****************************************************** 函数名称:delay(uint num) 返回值:无参数:uint num 延时数据值作用:延时 *******************************************************/ void delay(uint num) { while(num--); } /****************************************************** 函数名称:void Init_DS18B20(void) 返回值:无 参数:无 作用:初始化18B20 *******************************************************/ void Init_DS18B20(void) { char x=0; DQ=1;delay(10);//稍作延时DQ=0;delay(80);//延时>480us 540usDQ=1; //拉高总线 15-60usdelay(20);x=DQ;//读总线状态 为0复位成功,为1则不成功delay(30);DQ=1;//释放总线}/******************************************************函数名称:uchar ReadOneChar(void)返回值:uchar dat参数: 无作用:读取1820一个字节*******************************************************/uchar ReadOneChar(void){uchar i;uchar dat=0;for(i=0;i<8;i++){DQ=0;dat>>=1;DQ=1;//给脉冲if(DQ){dat|=0x80;}//读1 /// 读0右移处理delay(8);//15us内读完一个数}return(dat);}/******************************************************函数名称:void WriteOneChar(uchar dat)返回值:无参数: uchar dat作用:向1820写一个字节*******************************************************//////****写DS18B20***///写0 60us读完,写1 30us 内读完 void WriteOneChar(uchar dat){uchar i=0;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;//写所给数据最低位delay(10);///////////DQ=1;//给脉冲dat>>=1;}delay(8);}/******************************************************函数名称:int ReadOneTemperature(void)返回值:int t参数: 无作用:读温度值*******************************************************/int ReadOneTemperature(void)////////***读取温度值***********///// 每次读写均要先复位{Init_DS18B20();WriteOneChar(0xcc);//发跳过ROM命令WriteOneChar(0x44);//发读开始转换命令Init_DS18B20();WriteOneChar(0xcc);//发跳过ROM命令WriteOneChar(0xbe);//读寄存器,共九字节,前两字节为转换值a=ReadOneChar(); //a存低字节b=ReadOneChar(); //b存高字节t=b;t<<=8;//高字节转换为10进制t=t|a;tep=t*0.0625;//转换精度为0.0625/LSBt=tep*10+0.5;//保留1位小数并四舍五入****后面除10还原正确温度值)return(t);}void main(){while(1)display(ReadOneTemperature());}
数码管是共阴极的,按照你说的,去掉电阻也没变化。。。
追答你的仿真图与程序不相符,改仿真图没有用,因为,你的仿真图并不是运行这个程序,执行什么程序不知道,是程序问题,但看不到那个真正的程序。
PROTUES 仿真 DS18B20 当温度在12~25以内时,数码管显示不稳定,其他的...
首先,仿真图的P1口是位控,看引脚的运行状态和仿真图,数码管是共阳的,那么,仿真图对数码管的位控是不能串联限流电阻的,可以把P1口的4个电阻都去掉,用导线直接连接。其次,看你的程序,P1口却是段控,所以,你的仿真图并不是运行这个程度。或者,你这个仿真图是从别人那复制过来的,不是你的...
单片机DS18B20测温的问题,程序好像没问题,但是用protues仿真就是...
对了,你怎么这样写程序啊,这样显示的时间会不均衡的,即每位数码管显示的时间不一样,会带来一个暗一个亮,特别是当你想加点其它功能,比如说按键,采AD等等时,你会发现显示的不正常
单片机DS18B20测温的问题,程序好像没问题,但是用protues仿真就是...
你这是动态显示,ds18b20转换时间很长,基本上数码管就没有闪烁的时间就过去了,人眼很难捕捉到,你用静态显示就看见了 如果想动态显示那么 display();改成for(i=1;i<100,i++){ display();} 可以调整i的上限观察吧
用AT89C51单片机和温度传感器DS18B20S设计数字式温度计
本系统所设计的数字温度计采用的是DS18B20数字温度传感器测温,DS18B20直接输出的就是数字信号,与传统的温度计相比,具有读数方便,测温范围广,测温准确,上下限报警功能。其输出温度采用LED数码管显示,主要用于对测温比较准确的场所。该设计控制器使用的是51单片机AT89S52,AT89S52单片机在工控、测量、仪器仪表中应用还是比较广泛...
问一下就是DS18B20温度传感器芯片程序,烧写在板子上的和用protues软件...
你看一下你开发板的原理图和你的仿真原理图是否一样的。我看你的段码代码,0是0xbf,但是这个仿真图如果是共阳数码管的话,0应该是0xc0;共阴数码管,则是0x3f。
protues仿真ds18b20怎么设置显示小数
这个直接调节是不可以的,只能双击元件,在属性对话框内设置。其实温度的小数没不要。
基于18B20的多点温度显示系统
4)系统响应时间为1s用DS18b20作为温度传感器构建温度检测电路用pro... 设计要求1)温度设定范围:-40~40℃,最小区分度为0.5℃。2)测温点为8点。3)用十进制数码显示测温点标号和温度。4)系统响应时间为1s用DS18b20作为温度传感器构建温度检测电路 用protues软件构建系统硬件图用keil软件编写系统程序 展开 ...
求:基于AT89C51单片机的多路DS18B20测温显示
bit DS18B20_FLG = 0; \/\/“1”:DS18B20存在 ;“0”:不存在 unsigned char LEDBuf[4];void delay(unsigned int i);\/\/延时 display();\/\/DS18B20温度采集子程序\/\/\/DS18B20温度采集子程序\/\/\/DS18B20温度采集子程序\/\/\/ unsigned char Init_DS18B20(void);unsigned char Read_DS18B20(void); ...
在protues仿真中lm016l只是屏幕有亮光,但不显示内容。
可以给你i写一份
...温度传感器是DS18B20) 寻高手帮在C语言程序中加个报警程序。急需...
if(flag)\/\/温度为正数 由于实际的焊的板子只有三个数码管 所以,没加“+” 了。如 45.0度 { \/\/DIN=1;P2=0xff;P2=seg[0];P0=tab[0];delay1(4);P2=0xff;P2=seg[1];P0=tab[ge];DIN=0; \/\/ 问题问什么 加小数点要在P2口上加才能正常显示。delay1(4);DIN=1;P2=0xff;P2=...