教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

ds18b20程序 lm386 超声波测距

来源:网络收集 时间:2026-06-28
导读: ds18b20程序 lm386 超声波测距 // ds18b20程序 #include reg52.h #include stdio.h #include display.h sbit ds=P1^4; sbit beep=P0^6; uint temp; float f_temp; void dsreset() //ds18b20 初始化 { uint i; ds=0; i=103; while(i0)i--; ds=1; i=4; while(i

ds18b20程序 lm386 超声波测距

// ds18b20程序 #include <reg52.h> #include <stdio.h> #include <display.h> sbit ds=P1^4; sbit beep=P0^6; uint temp; float f_temp; void dsreset() //ds18b20 初始化 { uint i; ds=0; i=103; while(i>0)i--; ds=1; i=4; while(i>0)i--; }

bit readbit() //读取一位数据 (返回一位数据用bit) { uint i; bit dat; ds=0; i++; //拉低后 延时最少1微妙 拉高数据线 ds=1; i++; // 拉高后 十五微妙之间有效 i++; dat=ds; i=8; while(i>0)i--; // 读时间间隙最少六十微妙 return (dat); }

uchar readbyte() // 读取一个字节 { uchar i,j,dat; dat=0; for(i=0;i<8;i++) { j=readbit(); dat=(j<<7)|(dat>>1); } return dat;

}

void writebyte(uchar dat) //写一个字节 { uint i; uchar j; bit test; for(j=0;j<8;j++) { test=dat&0x01; dat=dat>>1; if(test) //写1 { ds=0; i++; //拉低数据线后 15微妙内允许拉高数据线 i++; ds=1; i=8; //写间隙最少60微妙 while(i>0)i--; } else { ds=0; //写0 i=8; while(i>0)i--; // 写0时 延时60微妙 ds=1; i++; i++; } } }

void change() // 开始温度转换 { dsreset(); delay1(1); writebyte(0xcc); writebyte(0x44); }

uint get_temp() //读取温度数据 { uchar a,b; dsreset();

ds18b20程序 lm386 超声波测距

delay1(1); writebyte(0xcc); writebyte(0xbe); a=readbyte(); b=readbyte(); temp=b; temp<<=8; temp=temp|a; f_temp=temp*0.0625; temp=f_temp*10+0.5; f_temp=f_temp+0.05; return temp; }

void warn(uchar s) { uchar i; i=s; c=1; b=0; a=1; wr=0; beep=1; wr=1; delay1(s); c=1; b=0; a=1; wr=0; beep=0; wr=1; i=s; delay1(s); }

void deal(uint t) { uchar i; if(t>250&t<=270) { warn(40); } else if(t<=250) { warn(10); } else if(t<320&t>300)

{ warn(40); } else if(t>=320) { warn(10); } else { i=40; delay1(i); } }

void main() { uint x; while(1) { change(); x=get_temp(); display(x); deal(x); } }

ds18b20程序 lm386 超声波测距

// 显示程序(display.h) #define uchar unsigned char #define uint unsigned int sbit c=P2^7; sbit b=P2^6; sbit a=P2^5; sbit wr=P3^6; uchar code

wr=0;

P0=tab[dat%100/10]; wr=1; wei(); wr=0; P0=0x02; wr=1;

tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay1(uint c) { uchar x,y; for(x=c;x>0;x--) for(y=110;y>0;y--); }

void duan() { c=1; b=1; a=1; }

void wei() { c=1; b=1; a=0; }

void display(uint dat) { duan(); wr=0; P0=tab[dat/100]; wr=1; wei(); wr=0; P0=0x01; wr=1; delay1(5); duan(); delay1(5);

duan(); wr=0;

P0=tab[dat%10]; wr=1; wei(); wr=0; P0=0x04; wr=1; delay1(5);

}

ds18b20程序 lm386 超声波测距

// EEPROM (at24c02) IIC.h #include <reg52.h> #include <display.h> sbit scl=P2^0; sbit sda=P2^1; uint sec; bit write; void delay() {;;}

void init() { scl=1; delay(); sda=1; delay(); }

void start() { sda=1; delay(); scl=1; delay(); sda=0; delay(); }

void respons() { uchar i; scl=1; delay(); while(sda==1&&(i<255)) i++; scl=0; delay(); }

void stop() { sda=0; delay(); scl=1; delay();

sda=1; delay(); }

void writebyte(uchar date) { uchar i,k; k=date; for(i=0;i<8;i++) { k=k<<1; scl=0; delay(); sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); }

uchar readbyte() { uchar i,k; scl=0; delay(); sda=1; for(i=0;i<8;i++) { scl=1; delay(); k=(k<<1)|sda; scl=0; delay(); } delay(); return k; }

void writebyte_add(uchar address,uchar date) { start();

ds18b20程序 lm386 超声波测距

writebyte(0xa0); respons(); writebyte(address); respons(); writebyte(date); respons(); stop(); void t0() interrupt 1 { uchar i; TH0=(65536-50000)/256; TL0=(65536-50000)%256; i++; if(i==20) }

uchar readbyte_add(uchar address) { uchar date; start(); writebyte(0xa0); respons(); writebyte(address); respons(); start(); writebyte(0xa1); respons(); date=readbyte(); stop(); return date; }

void main() { init(); sec=readbyte_add(2); if(sec>100) sec=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; EA=1; TR0=1; while(1) { display(sec); if(write==1) writebyte_add(2,sec); } } { } }

i=0; write=1; sec++; if(sec==100) sec=0;

ds18b20程序 lm386 超声波测距

//pcf8591 AD/DA 转换 #include <reg52.h> #include <display.h> #include <IIC.h> uchar i;

void write_DA(uchar date) { start(); writebyte(0x90);//第一字节写地址 最后一位写是0 respons(); writebyte(0x40);//是芯片工作在数模转换状态 respons(); writebyte(date);// 写数 进行数模转换 respons(); stop(); }

uchar read_AD(uchar kz) // 返回值 { uchar j; start(); writebyte(0x90); respons(); writebyte(kz);//选择通道 respons(); start(); writebyte(0x91); // 读回通道中 由模拟量转换回来的数字量 j=readbyte(); stop(); return j; }

void main() { init(); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)/256; ET0=1; EA=1; TR0=1; while(1) { display(i);

} }

void t0() interrupt 1 { uchar k; TH0=(65536-50000)/256; TL0=(65536-50000)%256; k++; if(k==20) { k=0; i=read_AD(0x01); //一秒钟刷新一回 0x00 通道1 0x01通道2 0x02 通道3 0x03 通道4 } }

ds18b20程序 lm386 超声波测距

//用lm386放大 播放一段音乐 #include <reg52.h>

#define uchar unsigned char #define uint unsigned int sbit c=P2^7; sbit b=P2^6; sbit a=P2^5; sbit wr=P3^6; sbit beep=P0^6; sbit spk=P0^7; //定时常数

unsigned int number; //低音音频定义 #define l_dao 262 #define l_re 286 #define l_mi 311 #define l_fa 349 #define l_sao 392 #define l_la 440 #define l_xi 494 //中音音频定 …… 此处隐藏:4141字,全部文档内容请下载后查看。喜欢就下载吧 ……

ds18b20程序 lm386 超声波测距.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/114993.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)