找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2587|回复: 0
打印 上一主题 下一主题
收起左侧

有程序能帮忙画出程序框图吗?

[复制链接]
跳转到指定楼层
楼主
ID:79044 发表于 2015-5-6 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define uchar unsigned char
#define uint unsigned int
sbit DS18B20_DQ=P3^1;
uchar Tem_dispbuf[5]={0,0,0,0,0};// 显示数据暂存
uchar  data DS18B20_Temp_data[4]={0x00,0x00,0x00,0x00};          //储存温度值得数组
uchar code  DS18B20_TEM_Deccode[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,                        //温度小数位查表数组
                                                       0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
bit DS18B20_Presence;                        //18b20复位成功标示位  =0 成功   =1 失败

void Delay_6us(uchar xus)        //6*xus+11us的延时时间(经仿真得到的)
{
          while(xus--);
}

void DS18B20_RESET()          //复位
{
        DS18B20_DQ=1;
        Delay_6us(2);

        DS18B20_DQ=0;
        Delay_6us(80);                        //至少480us的低电平信号

        DS18B20_DQ=1;                        //拉高等待接收18b20的存在脉冲信号
        Delay_6us(10);

        DS18B20_Presence=DS18B20_DQ;

        Delay_6us(40);
        DS18B20_DQ=1;                        //拉高使总线在空闲状态

}

void Write_DS18B20_OneChar(uchar dat)          //写一个字节
{
        uchar i=0;
        for(i=8;i>0;i--)
        {
                DS18B20_DQ=0;
                DS18B20_DQ=dat&0x01;
                Delay_6us(5);
                DS18B20_DQ=1;
                dat>>=1;
        }
}

uchar Read_DS18B20_OneChar()                //读一个字节
{
        uchar dat=0;
        uchar i=0;
        for(i=8;i>0;i--)
        {
                DS18B20_DQ=0;
                dat>>=1;
                Delay_6us(1);
                DS18B20_DQ=1;

                if(DS18B20_DQ)
                dat|=0x80;
                Delay_6us(4);
        }
        return dat;
}
/***********读DS18B20温度**************/
void Read_18B20_Temperature()
{
        DS18B20_RESET();                                                //复位18B20
        if(!DS18B20_Presence)                                        //复位成功
        {
                Write_DS18B20_OneChar(0XCC);                //跳过读序列号
                Write_DS18B20_OneChar(0X44);                //启动温度转换
                Delay_6us(82);                                                //等待温度转换时间500us左右

                DS18B20_RESET();                                        //复位18B20
                Write_DS18B20_OneChar(0XCC);                //发送匹配ROM指令
                Write_DS18B20_OneChar(0XBE);
                DS18B20_Temp_data[0]=Read_DS18B20_OneChar(); //Temperature LSB
                DS18B20_Temp_data[1]=Read_DS18B20_OneChar(); //Temperature MSB
       
                Tem_dispbuf[0]=DS18B20_TEM_Deccode[DS18B20_Temp_data[0]&0x0f];                        //小数位
                Tem_dispbuf[4]=((DS18B20_Temp_data[1]&0x0f)<<4)|((DS18B20_Temp_data[0]&0xf0)>>4);        //取出温度值得整数位
                Tem_dispbuf[3]=Tem_dispbuf[4]/100;
                Tem_dispbuf[2]=Tem_dispbuf[4]%100/10;
                Tem_dispbuf[1]=Tem_dispbuf[4]%10;
        }       
                       
       
}
多谢了

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表