您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页protues DS18B20仿真

protues DS18B20仿真

来源:宝玛科技网
程序 代码 #include #include #define uint unsigned int #define uchar unsigned char #define nops(); {_nop_();_nop_();_nop_();_nop_();} sbit DQ=P3^0; uchar code led []= { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 };

uchar code leddg []= { 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef,0xf7,0xfc } ; void display (double x); void delayms(uint z); void delay1(uint z); uint ds18b20(); uchar reset18b20(); void main () { double a; while(1) { a=ds18b20(); display(a); } }

///////////////////////////////////////////////////// void delayms(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

/////////////////////////////// void delay1(uint z) { while(--z); }

///////////////////////////////////////////////// void display (double x) //显示函数 { uint a,b,d,e; int c; double g,h;

if (x<=128) { c=(int)x;//45 10.12 a=c/100; //提取个位,百位 b=c%100/10; d=c%100%10; g=x-c;//0.119999 有误差 /* if((((int)(g*100)+1)-g*100)<=0.0001 ) //判断下 消除误差 g=g+0.01; d=(int)(g*10); h=10*g-d; e=(int)(h*10); */ e=(int)(10*g); P2=0xfe; P0=led[a]; delayms(10); P2=0xfd; P0=led[b]; delayms(10); P2=0xfb; P0=leddg[d]; delayms(10); P2=0xf7; P0=led[e]; delayms(10); } else { c=(int)(256-x); b=c/10; d=c%10; e=0; P2=0xfe; P0=0x40; delayms(10);

P2=0xfd; P0=led[b]; delayms(10); P2=0xfb; P0=leddg[d]; delayms(10); P2=0xf7; P0=led[e]; delayms(10); } }

//////////////////////////////////////////////////// uchar reset18b20() //复位18B20 { uchar a; DQ=1; _nop_(); _nop_(); DQ=0; delay1(80); DQ=1; nops(); a=DQ; delay1(20); return a ; }

//////////////////////////////////////// void write (uchar dat) //向18B20里写 { uchar i; DQ=1; _nop_(); for(i=0;i<8;i++) { DQ=0; DQ=dat&0x01; delay1(51); DQ=1;

dat>>=1; } }

///////////////////////////////////// uchar read() //读取18b20 { uchar i,dat=0; DQ=1; _nop_(); for(i=0;i<8;i++) { DQ=0; nops(); dat>>=1; DQ=1; nops(); if(DQ) { dat|=0x80; } delay1(30); DQ=1; } return dat; }

///////////////////////////////////////////// uint ds18b20() //启动18B20温度传感器 { uint a,b; reset18b20(); write(0xcc); //跳过ID地址 write(0x44); //启动温度转换 reset18b20(); write(0xcc); write(0xbe); //读取温度 a=read(); b=read(); b=b&0x0f; b<<=4; b+=(a&0xf0)>>4 ; //取出A的低4位 在和B相加 刚好 B中存的温度 的高低值 return b; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务