搜索
bottom↓
回复: 4

基于51单片机的温度采集系统 请各位朋友帮忙看下程序

[复制链接]

出0入0汤圆

发表于 2012-10-31 18:41:33 | 显示全部楼层 |阅读模式
做一个基于VB 的温度采集系统  单片机部分自己焊接的电路板可以正常显示温度  但是要把显示的温度通过串口发送给VB 界面上   现在的程序只能显示温度   发送数据这段程序可能有错     数据好像没有发送出去   单片机部分只显示温度的整数值   用的是四位的共阴极数码管    串口这段程序请各位朋友帮忙看下!   先谢谢了!


#include<reg51.H>
#include<absacc.H>
#include <intrins.h>                  
#include<stdio.h>

#define XTAL 110592;//CPU晶振频率
#define baudrate 9600 //通信波特率

#define uchar unsigned char
#define uint unsigned int

//不带小数点
uchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//带小数点
uchar code TAB1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};                  

sbit DQ=P3^3;  //定义DS18B20的端口DQ

void delay(uint i)        //精确延时程序
{
       
        while(i--);
}

void DelayMS(uint ms)
{
        uchar i;
        while(ms--) for(i=0;i<120;i++);
}

void display(int k)//数码管显示
{
        P2=0xf7;
        P0=0x39; //显示C
        DelayMS(1);

        P2=0xfb;
        P0=0x63;//显示°
        DelayMS(1);
       
        P2=0xfd;
        P0=TAB[k%10];//显示个位
    DelayMS(1);

        P2=0xfe;
        P0=TAB[k/10%10];//显示十位
        DelayMS(1);
       
}


init_DS(void) //DS18B20初始化
{
        uchar x=0;
        DQ=1; //DQ复位
        delay(8); //延时
        DQ=0; //单片机拉低总线
        delay(85); //延时
        DQ=1; //释放总线,单片机拉高总线
        delay(14);
        x=DQ; //稍作延时后,如果X=0则初始化成功,X=1则失败
        delay(20);
}

Read(void)           //读一个字节
{
        uchar i=0;
        uchar dat=0;
        for(i=8;i>0;i--)
                {
                        DQ=0; //给脉冲信号
                        dat>>=1; //让脉冲读到的位数据,依次从高位移到低位
                                DQ=1; //释放总线
                        if(DQ) //控制器进行采样                          
                                dat|=0x80; //读出数据放入高位,最后右移到低位
                        delay(4); //延时
                }
        return(dat);
}  


write(uchar dat) //写一个字节
{
        uchar i=0;
        for(i=8;i>0;i--)
                {
                        DQ=0; //拉低总线
                        DQ=dat&0x01; //从低位开始写入
                        delay(5);
                        DQ=1; //写完后释放总线
                        dat>>=1;
                       
                }
        delay(4); //延时
}


Readtem(void) //获取温度
{
        uchar a=0,b=0;

        float t=0,t1;
        init_DS();        //初始化
        write(0xcc);//跳过读序列号操作
        write(0x44);//启动温度转换
        delay(125);

        init_DS();  //初始化
        write(0xcc);//跳过读序列号操作
        write(0xbe);//        读温度寄存器
       
        a=Read();//读取温度低位LSB
        b=Read();//读取温度低位HSB
        t1=(a&0x0f)*0.0625;//取小数部分
       
        t=((b<<4)|(a>>4));//取整数部分
        return(t);       
}

void init(void)         //串口初始化
{
   EA=1; //中断总允许

   TMOD=0x20;//设置定时器1为工作方式2

   TH1=0xfd;//给定时器赋初值
   TL1=0xfd;

   SCON=0x50;//设置串行口工作方式1,允许接收
   PCON&=0x00;//波特率不倍增

   TR1=1;//启动定时器1
   IE=0x00;//禁止任何中断
}



void send_char(uchar c) //传送温度数据
{
    SBUF = c;
        while(TI == 0);
        TI = 0;

}

void main()//主函数
{
   uchar receive;
   float tp;
   init();
   while(1)
    {
   tp=Readtem(); //读取温度
   display((uint) tp); //显示温度
   if(RI)   //是否有数据到来
    {
      RI=0;
          receive = SBUF;
          if (receive == 49)
          {
      send_char((uchar) tp);//传送采集的温度
  }
  }
}
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-11-4 19:23:02 | 显示全部楼层
非常好的东西。

出0入0汤圆

发表于 2013-4-17 11:34:58 | 显示全部楼层
很想帮你   问题是现在我也在做   一头雾水

出0入0汤圆

发表于 2013-10-10 15:46:38 | 显示全部楼层
我做的是:基于CAN总线的多点温度采集系统。用51单片机控制。(51+SJA1000+TJA1050)硬件电路有吗?

出0入0汤圆

发表于 2013-10-11 17:01:28 | 显示全部楼层
基于CAN的是洞洞板的,没有保留》。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 09:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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