• 基于51单片机DS18B20温度测量仿真设计(源码+仿真+报告+讲解)


    本设计

    基于51单片机DS18B20温度测量仿真设计(源码+仿真+报告+讲解)

    仿真原版本:proteus 7.8

    程序编译器:keil 4/keil 5

    编程语言:C语言

    设计编号:S0014

    1 功能说明:

    运用所学单片机知识,完成温度信号的测量。要求如下:单片机系统选择使用AT89C51,温度传感器采用DS18B20,在LED显示器上显示频率值,另外LED显示器使用动态方式显示。

    2 讲解视频:

    包含仿真讲解和代码讲解

    51单片机DS18B20温度测量protues仿真设计(源码+仿真+讲解)

    3 仿真电路:

    imgimgimg

    4 程序:

    #include  
    #define uint unsigned int
    #define uchar unsigned char   	//宏定义
    sbit DQ=P3^7;     				//定义DS18B20 的 I/O	
    sbit DIAN = P0^5;        		//显示小数点用
    
    uchar x=0;      				//计数器
    signed char m;     				//温度值全局变量
    uchar n;      					//温度值全局变量
    uint z;
    uint c;
    uint gaowen=35;  		       //高温报警温度,默认值为35
    uint diwen=0; 				   //低温报警温度,默认值0
    uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,
    			0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};
    
    /*****延时子程序*****/
    void Delay_DS18B20(int num)
    {
    	while(num--) ;
    }
    /*****初始化DS18B20*****/
    void Init_DS18B20(void)
    {
    	unsigned char x=0;
    	DQ = 1;         	//DQ复位
    	Delay_DS18B20(8);   //稍做延时
    	DQ = 0;        	   	//单片机将DQ拉低
    	Delay_DS18B20(80);  //精确延时,大于480us
    	DQ = 1;         	//拉高总线
    	Delay_DS18B20(14);
    	x = DQ;           	//稍做延时后,如果x=0则初始化成功,x=1则初始化失败
    	Delay_DS18B20(20);
    }
    /*****读一个字节*****/
    unsigned char ReadOneChar(void)
    {
    	unsigned char i=0;
    	unsigned char dat = 0;
    	for (i=8;i>0;i--)
      	{
        	DQ = 0;			 //给脉冲信号
        	dat>>=1;
        	DQ = 1;    		 //给脉冲信号
        	if(DQ)
        	dat|=0x80;
        	Delay_DS18B20(4);
      	}
      	return(dat);
    }
    /*****写一个字节*****/
    void WriteOneChar(unsigned char dat)
    {
    	unsigned char i=0;
      	for (i=8; i>0; i--)
      	{
        	DQ = 0;
        	DQ = dat&0x01;
        	Delay_DS18B20(5);
        	DQ = 1;
        	dat>>=1;
      	}
    }
    /*****读取温度*****/
    unsigned int ReadTemperature(void)
    {
    	unsigned char a=0;
      	unsigned char b=0;
      	unsigned int t=0;
      	float tt=0;
      	Init_DS18B20();
      	WriteOneChar(0xCC);  //跳过读序号列号的操作
      	WriteOneChar(0x44);  //启动温度转换
      	Init_DS18B20();
      	WriteOneChar(0xCC);  //跳过读序号列号的操作
      	WriteOneChar(0xBE);  //读取温度寄存器
      	a=ReadOneChar();     //读低8位
      	b=ReadOneChar();	 //读高8位
      	t=b;				 //高8位转移到t
      	t<<=8;			     //t数据左移8位
      	t=t|a;			     //将t和a按位或,得到一个16位的数
      	tt=t*0.0625;		 //将t乘以0.0625得到实际温度值
    					     //(温度传感器设置12位精度,最小分辨率是0.0625)
      	t= tt*10+0.5;        //放大10倍(将小数点后一位显示出来)输出并四舍五入
      	return(t);		     //返回温度值
    }
    /*****延时子程序*****/
    void Delay(uint num)
    {
    	while( --num );
    }			
    /*****读取温度*****/
    void check_wendu(void)
    {
    	uint a,b;
    	c=ReadTemperature();  		//获取温度值
    	a=c/100;     				//计算得到十位数字
    	b=c/10-a*10;    			//计算得到个位数字
    	m=c/10;      				//计算得到整数位
    	if(m<=0)				    //如果温度小于0,限制显示为0
    	{
    		m=0;
    	}
    	n=c-a*100-b*10;    			//计算得到小数位
    }
    /*****显示开机初始化等待画面*****/
    void Disp_init(void)    
    {
    	P0 = ~0x80;      		 //显示-
    	P2 = 0x7F;
    	Delay(200);
    	P2 = 0xDF;
    	Delay(200);   
    	P2 = 0xF7;
    	Delay(200);
    	P2 = 0xFD;
    	Delay(200);
    	P2 = 0xFF;       		 //关闭显示
    }
    /*****显示温度子程序*****/
    void Disp_Temperature(void)    
    {
    	P0 = ~0x98;        		//显示c
    	P2 = 0x7F;
    	Delay(1000);
    	P2=0xff;				//关闭显示
    
    	P0=~LEDData[n];     	//显示小数位
    	P2 = 0xDF;
    	Delay(1000);
    	P2=0xff;			   //关闭显示
    
    	P0 =~LEDData[m%10];    //显示个位
    	DIAN = 0;         	   //显示小数点
    	P2 = 0xF7;
    	Delay(1000);
    	P2=0xff;			   //关闭显示
    
    	P0 =~LEDData[m/10];    //显示十位
    	P2 = 0xFD;
    	Delay(1000);
    	P2 = 0xff;        	   //关闭显示
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143

    5 设计报告:

    img

    6 资料清单&&网盘链接:

    \0. 常见使用问题及解决方法–必读!!!!

    \1. 源程序

    \2. proteus仿真

    \3. 仿真视频

    \4. 开题报告

    \5. 设计报告

    \6. 讲解视频

    Altium Designer 安装破解

    KEIL+proteus 单片机仿真设计教程

    KEIL安装破解

    Proteus元器件查找

    Proteus安装

    Proteus简易使用教程

    单片机学习资料

    相关数据手册

    答辩技巧

    设计报告常用描述

    鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

    img

    网盘下载链接

  • 相关阅读:
    超赞:不愧是“阿里内部Redis学习笔记”从头到尾,全是精华
    JavaSE进阶21天---第二十天---JavaSE(​​日志、logback日志、添加模板、类加载器、ressources文件夹)
    一个最简单的自定义锁屏应用实现
    @RequestParam注解的详细介绍
    毕业设计 深度学习OCR中文识别 - opencv python
    在Docker中安装nacos
    iOS 64位程序调试环境搭建
    搭建深度学习网络时节约GPU显存的技巧
    Tomcat 基线安全加固操作
    CTFshow 命令执行 web29 30 31
  • 原文地址:https://blog.csdn.net/weixin_52733843/article/details/133980885