| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 726 人关注过本帖
标题:求编程高手帮我改改这个程序,急!
只看楼主 加入收藏
wzhyljy
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-5-31
结帖率:0
收藏
 问题点数:0 回复次数:5 
求编程高手帮我改改这个程序,急!
这个程序是DS18B20读取电热杯的温度,然后把温度传送到labview里面进行波形显示,求高手帮我改一下,使我labview能显示到小数位,我现在精度是1度,还有就是希望能延时时间长点,这个连续采集的太快。

#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit DQ = P1^1;                     //DS18B20的数据口位P1.1
sbit Heat = P1^2;                   //加热的数据口位P1.2
sbit Beep = P1^3;                   //蜂鸣器的数据口位P1.3
uchar TPH;                           //存放温度值的高字节
uchar TPL;                           //存放温度值的低字节
void DelayXus(uchar n);
void DS18B20_Reset();
void DS18B20_WriteByte(uchar dat);
uchar DS18B20_ReadByte();
void SendCh(uchar ch);
void delaym(uint z);
uchar Readtemp();

void init()
{
    TMOD=0x20;
    TH1=TL1=0xfd;
    SCON=0x50;
   
    EA=1;
    TR1=1;
    ES=1;
}
void DelayX0us(uchar n)
{
    while (n--)
    {
        _nop_();
        _nop_();
    }
}
void DS18B20_Reset()
{
    CY = 1;
    while (CY)
    {
        DQ = 0;                     //送出低电平复位信号
        DelayX0us(48);              //延时
        DQ = 1;                     //释放数据线
        DelayX0us(6);               //等待
        CY = DQ;                    //检测存在脉冲
        DelayX0us(42);              //等待设备释放数据线
    }
}
uchar DS18B20_ReadByte()
{
    uchar i;
    uchar dat = 0;
    for (i=0; i<8; i++)             //8位计数器
    {
        dat >>= 1;
        DQ = 0;                     //开始时间片
        _nop_();                    //延时等待
        _nop_();
        DQ = 1;                     //准备接收
        _nop_();                    //接收延时
        _nop_();
        if (DQ) dat |= 0x80;        //读取数据
        DelayX0us(6);               //等待时间片结束
    }
    return dat;
}
void DS18B20_WriteByte(uchar dat)
{
    char i;
    for (i=0; i<8; i++)             //8位计数器
    {
        DQ = 0;                     //开始时间片
        _nop_();                    //延时等待
        _nop_();
        dat >>= 1;                  //送出数据
        DQ = CY;
        DelayX0us(6);               //等待时间片结束
        DQ = 1;                     //恢复数据线
    }
}
uchar Readtemp()
{
    uchar TPH,TPL;
    DS18B20_Reset();                //设备复位
    DS18B20_WriteByte(0xCC);        //跳过ROM命令
    DS18B20_WriteByte(0x44);        //开始转换命令
    while (!DQ);                    //等待转换完成
    DS18B20_Reset();                //设备复位
    DS18B20_WriteByte(0xCC);        //跳过ROM命令
    DS18B20_WriteByte(0xBE);        //读暂存存储器命令
    TPL = DS18B20_ReadByte();       //读温度低字节
    TPH = DS18B20_ReadByte();       //读温度高字节   
    return TPH<<5|TPL>>3;
}

void main()
{
    uchar i;
    uchar ST=60;
    init();
    while(1)
    {
                delaym(300);
                i=Readtemp()>>1;
//                 SendStr("\ntemp:");
//                     SendCh(i/10+48);
//                     SendCh(i%10+48);
                SendCh(i);
        if(i<(ST-4))
        {
            Beep=1;      //不鸣叫
            Heat=0;      //加热
        }
        if((ST-4)<=i&&i<(ST-2))
        {
            Beep=1;//不鸣叫
            Heat=1;//不加热
        }
        if((ST-2)<=i&&i<=(ST-1))
        {
            Beep=1;//不鸣叫
            Heat=0;//加热
        }
        if((ST-1)<i&&i<=(ST+1))
        {
            Beep=1;//不鸣叫
            Heat=1;//不加热
        }
        if(i>(ST+1))
        {
            Beep=0;    //鸣叫   
            Heat=1; //不加热
        }
    }
}

void uart() interrupt 4
{
    if(RI==1)
    {
        RI=0;
        P2=SBUF;
    }
}
void SendCh(uchar ch)
{
    SBUF = ch;
    while(!TI);
    TI=0;
}
void delaym(uint z)
{
    uint x;
    uchar y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
搜索更多相关主题的帖子: include 蜂鸣器 
2013-05-31 22:48
海上钢琴师
Rank: 2
等 级:论坛游民
帖 子:24
专家分:46
注 册:2013-4-18
收藏
得分:0 
好高端的感觉。。。

天行健!君子以自强不息;地势坤!君子以厚德载物。
2013-06-01 09:15
wzhyljy
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-5-31
收藏
得分:0 
难道就没有人会吗?
2013-06-02 16:34
dengjiajun
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:13
专家分:45
注 册:2013-5-2
收藏
得分:0 
改什么地方啊

2013-06-02 16:48
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
单片机。。。去嵌入式的模块发吧

自由、民主、宪政!
2013-06-02 16:56
dengjiajun
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:13
专家分:45
注 册:2013-5-2
收藏
得分:0 
TP=((TPH<<8)|TPL)*0.0625;            //将读取的数据转换成十进制数
2013-06-02 16:59
快速回复:求编程高手帮我改改这个程序,急!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024691 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved