DS18B20-51代码
来源:互联网 发布:沈阳seo外包公司 编辑:程序博客网 时间:2024/05/20 23:05
声明 :仅供参考
单片机 :89c52 pnp三极管驱动共阳数码管
# include <reg52.h># include <intrins.h># define uint unsigned int # define uchar unsigned charuchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x66,0x21,0x06,0x0e,0x0c,0x09,0x11};sbit led0=P2^0;sbit led1=P2^1;sbit led2=P2^2;sbit led3=P2^3;sbit led4=P2^4;sbit led5=P2^5;sbit ds=P2^6;float ftemp;uint temp,flag;void delay15us(uint temp) //整个函数关键的部分就在这个延时函数 在ds18b20中 每一步的延时都要求比较精确 要严格依据时序来写{for(temp;temp>0;temp--){_nop_();_nop_();_nop_();}_nop_();_nop_();}void delay(uint k) //延时函数 这个延时是为了数码管{uint i,j;for(i=k;i>0;i--)for(j=113;j>0;j--) ;}bit RST() //复位函数{bit ret=1; ds=0;delay15us(39);ds=1;delay15us(4);ret=ds; //检测是否变位成功 即ds是否为零 下面用一个led/测试一下//led=ds;delay15us(27);//这都是根据时序图上来写的ds=1; return ret ;//其实有点不明白 为什么加上这个返回值 有什么用吗}void writebit(bit dat_bit) //完全依据时序来写一位 的函数{ds=0;delay15us(0);ds=dat_bit;delay15us(2);ds=1;}void writebyte(uchar dat_byte){uint i;for(i=0;i<8;i++){ writebit((dat_byte&0x01)); dat_byte>>=1;}}bit readbit(){bit dat_bit;ds=0;_nop_();_nop_();_nop_();ds=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();dat_bit=ds;delay15us(3);ds=1;return dat_bit;}uchar readbyte(){uchar dat_byte=0;uchar i,j;for(i=0;i<8;i++){j= readbit();dat_byte=(j<<7)|(dat_byte>>1);}return dat_byte;}void sweap() //启动温度转换{RST();_nop_();_nop_();writebyte(0xcc);writebyte(0x44);}uint get(){uint a,b,t;RST();_nop_();_nop_();writebyte(0xcc);writebyte(0xbe);a=readbyte();b=readbyte();if(b&0xfc){ temp=b; temp= temp<<8; temp|=a; temp=((~temp)+1); ftemp=temp*0.0625*100+0.5; t=ftemp; flag=1;}else{ ftemp=((b*256)+a)*0.0625; t=ftemp*100+0.5;flag=0;}return t;}void display(disnum){led0=0;P1=table1[disnum/1000];delay(3);P1=0xff;led0=1;led1=0;P1=table2[disnum%1000/100];delay(3);P1=0xff;led1=1;led2=0;P1=table1[disnum%100/10];delay(3);P1=0xff;led2=1;led3=0;P1=table1[disnum%10];delay(3);P1=0xff;led3=1;led4=0;P1=0xc6;delay(1);led4=1;}void main(){uint disnum;led5=0;while(1){sweap() ;disnum=get();display(disnum);}}
阅读全文
1 0
- DS18B20-51代码
- stm8 ds18b20读温度代码
- 51+DS18B20测量温度
- DS18b20——51
- ds18b20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- ds18b20
- DS18B20
- ds18b20
- ds18b20
- ds18b20
- ds18b20
- JAVA读取EXCEL文件号段解析
- Vue.js less 添加支持和遇到的问题
- 二进制哈夫曼编码
- MyBatis Generator 详解
- asm,aop的利器
- DS18B20-51代码
- hive创建压缩分区表
- Android_ImageLoader
- (二) Ubuntu安装新版tensorflow以及目标检测API
- Spring Boot +Shiro 用户角色权限设计
- loslib.c解析(5.3.4)
- 简要谈谈javascript bind 方法
- 使用git上传本地文件到Gayhub(面向初学者)
- vue的进阶之路(一) 环境的配置