找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1136|回复: 1
收起左侧

单片机数字温度传感器程序 虚拟终端什么都没有显示 求帮助

[复制链接]
ID:633070 发表于 2020-5-16 09:27 | 显示全部楼层 |阅读模式
20200516080358228.png
#include <REG52.H> /*special function register declarations*/
#include <stdio.h> /*prototype declarations for I/O functions*/
#include <intrins.h>
#include <Absacc.h>
#include <string.h>
#include <ctype.h>
#define byte unsigned char
#define uchar unsigned char
#define word unsigned int
#define uint unsigned int
#define ulong unsigned long
#define BYTE unsigned char
#define WORD unsigned int
#define TRUE 1
#define FALSE 0
void initUart(void); /*初始化串口*/
void time(unsigned int ucMs); //延时单位:ms
void delay_50us(void); //延时50us
void delay_10us(void);
void delay_100us(void); //延时100us
/********************************************
*DS1820驱动程序
*版本:V1.0
*编程:飞扬
********************************************/
//引脚定义
sbit DS1820_DQ=P3^4; //单总线引脚
//函数声明
bit ds1820_reset();
void ds1820_write_data(unsigned char ds1820_wdat);
unsigned char ds1820_read_data();
unsigned int read_temp(); //读温度数据函数
/************* main函数 **************/
void main(){
        int wT=-110;
        float f;
        initUart(); /*初始化串行口*/
        wT=read_temp(); //首次无效
        time(1000);
        do{
                wT=read_temp();f=(float)wT/2;
                printf("Temperature Measured Value of DS18S20=%g\n",f);
                                //输出打印结果
                time(1000);
        }while(TRUE);
}
/**********************************************
*读温度数据函数
**********************************************/
unsigned int read_temp(){ //读温度数据函数
        
        unsigned char data temperature[2]; //存放温度数据
        unsigned char i;
        unsigned int wTemp;
        ds1820_reset(); //复位
        ds1820_write_data(0xcc); //跳过ROM命令
        ds1820_write_data(0x44); //温度转换命令
        ds1820_reset(); //复位
        ds1820_write_data(0xcc); //跳过ROM命令
        ds1820_write_data(0xbe); //读DS1820温度暂存器命令
        for (i=0;i<2;i++){
                temperature[ i]=ds1820_read_data();
        }
        ds1820_reset(); //复位,结束读数据
        wTemp=(wTemp);
}
/***********************************
*DS1820复位及存在检测(通过存在脉冲可以判断DS1820是否损坏)
*函数脉冲:DS1820_RESET()
*说明:函数返回一个位标量(0或1),flag=0存在,反之flag=1不存在
***********************************/
bit ds1820_reset(){
        unsigned char i;
        bit flag; //DS1820存在标志位
        DS1820_DQ=0; //拉低总线
        for(i=240;i>0;i--); //延时480us,产生复位脉冲
        DS1820_DQ=1; //释放总线
        for(i=40;i>0;i--); //延时80us对总线采样
        flag=DS1820_DQ;
        for(200;i>0;i--); //延时400us等待总线恢复
        return(flag);
}
/************************************
*写数据到DS1820
*函数名称:ds1820_write_data()*
************************************/
void ds1820_write_data(unsigned char ds1820_wdat){
        unsigned char i,j;
        for(i=8;i>0;i--){
                DS1820_DQ=0; //拉低总线,产生写信号
                for(j=2;j>0;j--); //延时4us
    DS1820_DQ = ds1820_wdat&0x01; //发送1位
    for(j=30;j>0;j--); //延时60us,写时序至少要60us
    DS1820_DQ = 1; //释放总线,等待总线恢复
    ds1820_wdat>>=1; //准备下一-位数据的传送
        }
}
/*************************************
*从DS1820中读出数据
*函数名称:ds1820_read_data ()
**************************************/
unsigned char ds1820_read_data() {
        unsigned char i, j,ds1820_rdat;
        for (i=8;i>0;i--) {
                ds1820_rdat>>=1 ;
                DS1820_DQ = 0; //拉低总线,产生读信号
    //for (j=2;j>0;j--); //延时 4us
    delay_10us(); //延时10us
    DS1820_DQ = 1; //释放总线,准备读数据
    for(j=4;j>0;j--); //延时8us读数据
    if(DS1820_DQ == 1)
    ds1820_rdat |= 0x80;
    for(j=30; j>0; j--); //延时60us
    DS1820_DQ = 1;//拉高总线,准备下一位数据的读取
        }
                return (ds1820_rdat) ; //返回读到的数据
}
/***********************************************
* 函数说明:延时5us,品振改变时只需要改变这一个函数
* 1.对于11.0592MHz 晶振而言,需要2个_nop_();
* 2. 对于22.1184MHz晶振而言,需要4个_nop_();
* 入口参数:无
* 返回:无
* 创建日期: 20010623
* 作者:张齐
*********************************************************/
void delay_5us(void)//延时5us,晶振改变时只用改变这一个函数!
{
        _nop_();
        _nop_();
        //_nop_();
        //_nop_();
}
/************ delay_50us ***************/
void delay_50us(void)//延时50us
{
        unsigned char i;
        for(i=0;i<4;i++)
        {
                delay_5us();
        }
}
/******** 延时100us ******************/
void delay_100us(void)//延时100us
{
        delay_50us();
        delay_50us();
}

/*********** 延时单位:ms *******************/
void time(unsigned int ucMs)//延时单位:ms
{
        unsigned char j;        
        while(ucMs>0){
                for(j=0;j<10;j++) delay_100us();
                ucMs--;
        }
}
/*********初始化串行口波特率********/
void initUart (void)  /* 初始化串行口波特率,使用定时器2*/
{
/*Setup the serial port for 9600 baud at 11. 0592MHz*/
   SCON = 0x50;  //串行口工作在工作方式1
   RCAP2H= (65536- (3456/96))>>8;
   RCAP2L= (65536- (3456/96))%8256;
   T2CON=0x34;   /*置位TI*/
   TI=1;
}

求助:虚拟终端什么都没有显示

回复

使用道具 举报

ID:633070 发表于 2020-5-16 17:39 | 显示全部楼层
我的问题已经解决了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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