• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 单片机获取温度串口通讯传递给电脑

单片机获取温度串口通讯传递给电脑

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了51单片机串口通讯,单片机串口通讯,单片机串口通讯程序,多个单片机串口通讯,单片机串口通讯原理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 单片机获取温度串口通讯传递给电脑
描述:

串口,通讯

我想实现从AT89C52 单片机的18B20获取温度 通过串口通讯 传给电脑 求大神赐教啊 初学者
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;           //define interface
uint temp;             // variable of temperature
uchar flag1;            // sign of the result positive or negative
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef};
void delay(uint count)      //delay
{
  uint i;
  while(count)
  {
    i=200;
    while(i>0)
    i--;
    count--;
  }
}
void dsreset(void)       //send reset and initialization command
{
  uint i;
  DS=0;
  i=103;
  while(i>0)i--;
  DS=1;
  i=4;
  while(i>0)i--;
}
bit tmpreadbit(void)       //read a bit
{
   uint i;
   bit dat;
   DS=0;i++;          //i++ for delay
   DS=1;i++;i++;
   dat=DS;
   i=8;while(i>0)i--;
   return (dat);
}
uchar tmpread(void)   //read a byte date
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tmpreadbit();
    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
  }
  return(dat);
}
void tmpwritebyte(uchar dat)   //write a byte to ds18b20
{
  uint i;
  uchar j;
  bit testb;
  for(j=1;j<=8;j++)
  {
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)     //write 1
    {
      DS=0;
      i++;i++;
      DS=1;
      i=8;while(i>0)i--;
    }
    else
    {
      DS=0;       //write 0
      i=8;while(i>0)i--;
      DS=1;
      i++;i++;
    }
  }
}
void tmpchange(void)  //DS18B20 begin change
{
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);  // address all drivers on bus
  tmpwritebyte(0x44);  //  initiates a single temperature conversion
}
uint tmp()               //get the temperature
{
  float tt;
  uchar a,b;
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);
  tmpwritebyte(0xbe);
  a=tmpread();
  b=tmpread();
  temp=b;
  temp<<=8;             //two byte  compose a int variable
  temp=temp|a;
  tt=temp*0.0625;
  temp=tt*10+0.5;
  return temp;
}
void display(uint temp) //显示程序
{
   uchar A1,A2,A2t,A3;
   A1=temp/100;
   A2t=temp%100;
   A2=A2t/10;
   A3=A2t%10;
   dula=0;
   P0=table[A1]; //显示百位
   dula=1;
   dula=0;
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(1);
   dula=0;
   P0=table1[A2]; //显示十位
   dula=1;
   dula=0;
   wela=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(1);
   P0=table[A3]; //显示个位
   dula=1;
   dula=0;
   P0=0xfb;
   wela=1;
   wela=0;
   delay(1);
}
void UART_init()
{
TMOD = 0x20;   //T1工作模式2  8位自动重装
TH1 = 0xfd;
TL1 = 0xfd;  //比特率9600
TR1 = 1; //启动T1定时器
SM0 = 0;
SM1 = 1;  //串口工作方式1 10位异步
REN = 1; //串口允许接收
EA  = 1; //开总中断
ES  = 1; //串口中断打开
}
void main()
{
 uchar a;
 UART_init(); //串口初始化 
  do
  {
    tmpchange();
for(a=10;a>0;a--)
   {   
   display(tmp());
   }
if(temp>=310)  //当温度超过31度(仅作试验用,实际可设为其他更高的值),蜂鸣器便会报警。
{
P1=0x00;
beep=0;
}
else
{
beep=1;
P1=0xff;
}
  } while(1);
}
void UART() interrupt 4
{
if(RI) //检测是否接收完成
{
num = SBUF;   //num 取出接收缓存器的值
RI = 0;
SBUF = tmp();
while(!TI);
TI = 0;
}
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 单片机获取温度串口通讯传递给电脑

相关文章

  • 2017-06-05 ALLJOYN支持跨网关通讯么
  • 2017-06-05 BlueNRG蓝牙开发,连接自动断开
  • 2017-06-05 串口通讯。。。问题急。。。。
  • 2017-06-05 WINCE60USBFN休眠唤醒后系统几乎死掉
  • 2017-06-05 关于sht10温湿度传感器的问题
  • 2017-06-05 求助!谁能给我一个USB键盘驱动程序代码?
  • 2017-06-05 各位大侠,如何得到当前硬件设备的详细信息啊???谢谢!!!
  • 2017-06-05 关于51单片机的中断实现多任务的问题
  • 2017-06-05 VXWORKS网络显示
  • 2017-06-05 keil编译遇到的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • STM32F205HSusb用作device使用内置phy
    • 外中断为什么进不去啊求解答
    • 有关6050测得航向角会偏移的问题
    • 我现在要做个ISA的接口卡,我该如何获得他的入口地址?
    • WEB服务器照书上打的程序,有点问题,大家帮我看看吧
    • 求推荐串口电压转33V的芯片
    • URU4000b指纹仪二次开发,谁有经验啊!?
    • 求助:arm-elf-ld链接问题???
    • lua中userdata和gc的使用?
    • 急,有没有人做过SOLOMONSSD1811或1815的驱动?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有