PM2.5温度报警系统仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序:
- 部分代码:
- //18b20初始化函数
- void init_18b20()
- {
- bit q;
- dq = 1; //把总线拿高
- delay_uint(1); //15us
- dq = 0; //给复位脉冲
- delay_uint(80); //750us
- dq = 1; //把总线拿高 等待
- delay_uint(10); //110us
- q = dq; //读取18b20初始化信号
- delay_uint(20); //200us
- dq = 1; //把总线拿高 释放总线
- }
- //写18b20内的数据
- void write_18b20(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- { //写数据是低位开始
- dq = 0; //把总线拿低写时间隙开始
- dq = dat & 0x01; //向18b20总线写数据了
- delay_uint(5); // 60us
- dq = 1; //释放总线
- dat >>= 1;
- }
- }
- //读取18b20内的数据
- uchar read_18b20()
- {
- uchar i,value;
- for(i=0;i<8;i++)
- {
- dq = 0; //把总线拿低读时间隙开始
- value >>= 1; //读数据是低位开始
- dq = 1; //释放总线
- if(dq == 1) //开始读写数据
- value |= 0x80;
- delay_uint(5); //60us 读一个时间隙最少要保持60us的时间
- }
- return value; //返回数据
- }
- //读取温度的值 读出来的是小数
- uint read_Temp()
- {
- uint value;
- uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
- init_18b20(); //初始化18b20
- write_18b20(0xcc); //跳过64位ROM
- write_18b20(0x44); //启动一次温度转换命令
- init_18b20(); //初始化18b20
- write_18b20(0xcc); //跳过64位ROM
- write_18b20(0xbe); //发出读取暂存器命令
- low = read_18b20(); //读温度低字节
- value = read_18b20(); //读温度高字节
- value <<= 8; //把温度的高位左移8位
- value |= low; //把读出的温度低位放到value的低八位中
- value *= 0.625; //转换到温度值 小数
- return value; //返回读出的温度 带小数
- }
复制代码
全部资料51hei下载地址:
程序.rar
(96.71 KB, 下载次数: 126)
|