基于STC15单片机-LM35-DS8B20温度测量-DS1302计时-proteus仿真-源程序

2023-09-14 15:54:52

一、系统方案
1、本设计采用STC15单片机作为主控器。
2、DS18B20采集温度值送到液晶1602显示。
3、DS1302计时,日期送到液晶1602显示。
4、LM35采集另一路温度值送到数码管显示。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化

/IO初始化为准双向/
void IO_Init()
{
P0M0 = 0x00;P0M1 = 0x00;
P1M0 = 0x00;P1M1 = 0x00;
P2M0 = 0x00;P2M1 = 0x00;
P3M0 = 0x00;P3M1 = 0x00;
P4M0 = 0xFF;P4M1 = 0x00;
P5M0 = 0x00;P5M1 = 0x00;
P6M0 = 0x00;P6M1 = 0x00;
P7M0 = 0x00;P7M1 = 0x00;
P0 = 0x00;P1 = 0x00;P2 = 0x00;P3 = 0x00;
P4 = 0x00;P5 = 0x00;P6 = 0x00;P7 = 0x00;

2、液晶显示程序
//写指令函数=
void LCD_write_command(uchar command)
{
LCD_DB=command;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;
LCD_E=0;
delay_ms(2);//等待执行完毕 。。。
}
//=写数据函数=
void LCD_write_data(uchar dat)
{ LCD_DB=dat;
LCD_RS=1;//数据寄存器
LCD_RW=0;//写入数据
LCD_E=1;
LCD_E=0;
delay_ms(2);//等待程序执行完毕 。。。
}
//=初始化函数
=
void LCD_init(void)
{
LCD_write_command(0x38);//设置8位格式,2行,57
LCD_write_command(0x38);//设置8位格式,2行,5
7
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位
LCD_write_command(0x01);//清屏显示
LCD_write_command(0x80);
delay_ms(2);
}
//光标定位
===========
void gotoxy(uchar x,uchar y)
{
uchar address;
if(y1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
}
//=显示一个字符串
========
void LCD_display(uchar *dat)
{
while(*dat!=‘\0’)
{ LCD_write_data(*dat);
dat++;
}
}

3、DS1302程序
#include"ds1302.h"

//—DS1302写入和读取时分秒的地址命令—//
//—秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//—DS1302时钟初始化2022年5月23日星期一17点29分00秒。—//
//—存储顺序是秒分时日月周年,存储格式是用BCD码—//
uchar time[7] = {0x00, 0x30, 0x17, 0x01, 0x06, 0x01, 0x22};

/*******************************************************************************

  • 函 数 名 : Ds1302Write
  • 函数功能 : 向DS1302命令(地址+数据)
  • 输 入 : addr,dat
  • 输 出 : 无
    *******************************************************************************/

void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;
nop();

SCLK = 0;//先将SCLK置低电平。
_nop_();
RST = 1; //然后将RST(CE)置高电平。
_nop_();

for (n=0; n<8; n++)//开始传送八位地址命令
{
	DSIO = addr & 0x01;//数据从低位开始传送
	addr >>= 1;
	SCLK = 1;//数据在上升沿时,DS1302读取数据
	_nop_();
	SCLK = 0;
	_nop_();
}
for (n=0; n<8; n++)//写入8位数据
{
	DSIO = dat & 0x01;
	dat >>= 1;
	SCLK = 1;//数据在上升沿时,DS1302读取数据
	_nop_();
	SCLK = 0;
	_nop_();	
}	
	 
RST = 0;//传送数据结束
_nop_();

}

/*******************************************************************************

  • 函 数 名 : Ds1302Read
  • 函数功能 : 读取一个地址的数据
  • 输 入 : addr
  • 输 出 : dat
    *******************************************************************************/

uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
nop();

SCLK = 0;//先将SCLK置低电平。
_nop_();
RST = 1;//然后将RST(CE)置高电平。
_nop_();

for(n=0; n<8; n++)//开始传送八位地址命令
{
	DSIO = addr & 0x01;//数据从低位开始传送
	addr >>= 1;
	SCLK = 1;//数据在上升沿时,DS1302读取数据
	_nop_();
	SCLK = 0;//DS1302下降沿时,放置数据
	_nop_();
}
_nop_();
for(n=0; n<8; n++)//读取8位数据
{
	dat1 = DSIO;//从最低位开始接收
	dat = (dat>>1) | (dat1<<7);
	SCLK = 1;
	_nop_();
	SCLK = 0;//DS1302下降沿时,放置数据
	_nop_();
}

RST = 0;_nop_();	//以下为DS1302复位的稳定时间,必须的。	
SCLK = 1;_nop_();	
DSIO = 0;_nop_();
DSIO = 1;_nop_();

return dat;	

}

/*******************************************************************************

  • 函 数 名 : Ds1302Init
  • 函数功能 : 初始化DS1302.
  • 输 入 : 无
  • 输 出 : 无
    *******************************************************************************/

void Ds1302Init()
{
uchar n;
Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能
for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
{
Ds1302Write(WRITE_RTC_ADDR[n],time[n]);
}
Ds1302Write(0x8E,0x80); //打开写保护功能
}

/*******************************************************************************

  • 函 数 名 : Ds1302ReadTime
  • 函数功能 : 读取时钟信息
  • 输 入 : 无
  • 输 出 : 无
    *******************************************************************************/

void Ds1302ReadTime()
{
uchar n;
for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年
{
time[n] = Ds1302Read(READ_RTC_ADDR[n]);
}

}
4、核心算法程序
void main()
{

Init_DS18B20();

LCD_init();
judge=Init_DS18B20();
Ds1302Init();

gotoxy(0,1);	
LCD_display("20204397");
InitADC();
while(1)
{
		Ds1302ReadTime();
nyrstr[0] = 2 +'0'; 			    //“年”
nyrstr[1] = 0 +'0';
nyrstr[2] = (time[6] >> 4) +'0';  //“年”
nyrstr[3] = (time[6]&0x0F) +'0';
nyrstr[4] = '-';  
nyrstr[5] = (time[4] >> 4) +'0';  //“月”
nyrstr[6] = (time[4]&0x0F) +'0';
nyrstr[7] = '-';
nyrstr[8] = (time[3] >> 4) +'0';  //“日”
nyrstr[9] = (time[3]&0x0F) +'4';

TempPhoto =GetADCResultint(1); //实时读取P1.1通道的AD转换结果
TempPhoto=TempPhoto5.020/1023;

//Disp_Temperature(TempPhoto);

			gotoxy(0,1);	
			LCD_display(nyrstr);

display();

 LCD_write_command(0xc0);

			wendu=ReadTemperature();
			Disp_Temperature(wendu);
		

	}

}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

更多推荐

工厂模式-(简单工厂模式)

首先看一下设计模式的六大原则设计模式的六大原则1、开闭原则(OpenClosePrinciple)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体

服务器硬件监控解决方案,提升服务器稳定性

前言在当今数字化时代,服务器的稳定运行对于企业的核心业务至关重要。为了确保服务器的正常运行并及时发现潜在问题,我们公司开发了一款先进的服务器硬件监控解决方案。本文将深入探讨服务器硬件监控的重要性、解决方案的特点和优势,以及支持监控的硬件设备列表和服务器硬件指标一览。此外,我们还将介绍该解决方案提供的资产管理、自动巡检和

2023年CSP-J 普及组第一轮题目和答案详解

家人们首战报捷!!!!才教了一个月的学生,赛前一周才报名CSP-J都没提前安排初赛内容临时周内加了两节课,总共初赛也就上了3次课准备了不到一周半,压线进了复赛,不得不说学生基础还不错,脑子也转的快,接受程度嘎嘎强,茶馆也好喝家人们钱不钱无所谓主要是爱教课。复赛加油冲了!2023年CSP-J(题目和答案)ps:详解之后更

数据分析的概念

一、数据分析的目的:把隐藏在一大批看来杂乱无章的数据中的信息集中和提炼出来,从而找出研究对象的内在规律。(主要在于分析目的及过滤脏数据)1.数据分析是有组织有目的地收集数据、分析数据,使之成为信息的过程。(这一过程是质量管理体系的支撑关键)。2.数据分析覆盖项目的整个寿命周期,例如:项目的前提调研、可行性分析、用户行为

这些英国学校接受ChatGPT帮助写作

自从ChatGPT展现了其高超的AI技术,全球年轻人纷纷对其表示喜爱,尤其是学生们,将其视为一个优化版的网络搜索引擎,可以用来提高学习效率。ChatGPT具有多样化的功能,可以节省研究复杂文献的时间,编写简单的Python代码,并辅助学生理解知识点。然而,这也引发了被学生用来作弊的担忧。因此,英国的各大学连续数月来一直

lv5 嵌入式开发-1 进程的创建和回收

目录1进程概念2进程内容3进程类型4进程状态5查看进程信息5.1相关命令pstop/proc5.2相关命令nicerenice5.3相关命令jobbgfg6子进程概念7子进程创建–fork8父子进程9思考10进程结束–exit/_exit11进程的回收11.1进程回收–wait11.2进程回收–waitpid掌握:进程

2、 MongoDB应用与开发

2.MongoDB应用与开发2.1.MongoDB安装l官网下载安装介质:TryMongoDBAtlasProducts|MongoDB选择对应版本修改环境变量vi/etc/profileexportMONGODB_HOME=/home/lijin/mongodbexportPATH=PATH:PATH:PATH:MO

Golang 基础面试题 01

Golang面试题合集.png背景在之前的文章中分享了k8s相关的面试题,本文我们重点来讨论和k8s密切相关的Go语言面试题。这几年随着云原生的兴起,大部分后端开发者,特别是Java开发者都或多或少的想学习一些Go相关的技能,所以今天分享的内容比较初级,适合Go语言初学者。image.png本文内容依然来自于这个仓库h

torch 和paddle 的GPU版本可以放在同一个conda环境下吗

新建conda虚拟环境,python版本3.8.17虚拟机,系统centos7,内核版本Linuxfastknow3.10.0-1160.92.1.el7.x86_64,显卡T4,nvidia-smi,460.32.03,对应cuda11.2,安装cuda11.2和cudnn,conda版本23.1conda安装pad

shiro反序列化漏洞Shiro-550/Shiro-721反序列化

文章目录shiro反序列化漏洞Shiro-550反序列化漏洞(CVE-2016-4437)漏洞简介漏洞原理Shiro-721反序列化漏洞(CVE-2019-12422)Shiro550和Shiro721的区别是什么漏洞指纹漏洞介绍漏洞原理攻击流程漏洞复现:CVE-2016-4437漏洞复现:CVE-2019-12422

腾讯mini项目-【指标监控服务重构】2023-07-17

今日已办根据导师的指导意见修改了otelclient相关配置的代码认真学习uptrace的文档,会比otel、signoz的好理解:什么是OpenTelemetryhttps://uptrace.dev/opentelemetry/architecture.html#opentelemetry-sdktrace部分介绍

热文推荐