ds18b20程序 lm386 超声波测距
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




