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

2023-11-05

一、系统方案
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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 双向链表的创建以及增删改查

    实现起来其实不难 于是我把代码做了优化 模仿了stm32的库函数哈哈哈 便于理解和修改 不足之处请指出 include stdio h include stdlib h 宏定义 define ElementType int define u
  • 免费java视频教程大全在线观看

    下面是免费java视频教程大全在线观看 尚学堂马士兵报表组件JFreeChart 尚学堂的项目管理工具 尚硅谷java20天 尚硅谷SVN 更多java视频与学习资料大家就到这里了解一下吧 http java 662p com forum
  • Java启动本机应用程序EXE的三种方式

    第一种方式 利用cmd方式 执行cmd命令 param command throws IOException public static String executeCmd String command throws IOException
  • 解决IE识别ES6语法

    使用jq做项目时 混用了部分es6的语法 导致在IE下项目无法正常运行 于是乎 便在网上找到了下面两种方法 并尝试了一下 一 直接在浏览器中引入browser min js 并且将script的type设置成text babel 尝试了在网
  • laravel 中 使用 composer 的中国镜像安装时报错(找不到包)

    composer require jenssegers mongodb 安装mongodb时报错 Your requirements could not be resolved to an installable set of packag

随机推荐

  • SpringBoot Admin集成诊断利器Arthas实践

    前言 Arthas 是 Alibaba开源的Java诊断工具 具有实时查看系统的运行状况 查看函数调用参数 返回值和异常 在线热更新代码 秒解决类冲突问题 定位类加载路径 生成热点图 通过网页诊断线上应用 如今在各大厂都有广泛应用 也延伸出
  • 使用docker搭建elk

    一 安装前须知 以下步骤在 VMware 中的 centos 7 中操作 ip 地址为 192 168 161 128 注意安装的时候最好统一版本 否则后面会出现许多问题 进官网搜索对应镜像 查看 Tags 标签下的版本 目前我这最新的 T
  • Transformer怎么入门?如何学习Transformer?

    Transformer比较好学 整个路线也非常简单 就三步 第一步 理论学习 理论学习部分首先要了解Attention机制 这里推荐李宏毅老师的机器学习 或者看他的PPT 讲的很清楚 国外的也有斯坦福的CS25 Transformers U
  • 校园资料分享平台的设计与开发、资料分享

    目录 1 使用框架和技术 2 功能展示与说明 3 系统展示 3 1 使用到技术 3 2 前台展示 3 3 后台界面 4 论文资料和程序 在教育领域 使用IT技术可以使任何人 任何地方和任意的时间 都可以获得需要的资料 但现在的校园大多是综合
  • [stable-diffusion-art] 指北-4 模型

    Beginner s guide to Stable Diffusion models and the ones you should know Stable Diffusion ArtHow to install use and merg
  • 史上最全的 Python 3 类型转换指南

    int 支持转换为 int 类型的 仅有 float str bytes 其他类型均不支持 float gt int 会去掉小数点及后面的数值 仅保留整数部分 int 12 94 12 str gt int 如果字符串中有数字 0 9 和正
  • Windows下误删文件解决办法

    推荐几款优秀的数据恢复软件 Disk Drill Disk Drill是一款免费软件 支持支Windows 与 Mac 使用它能我们找回磁盘 U盘 等各种储存装置的视频 照片 文章等各类文件 最早了解这款软件还是当初帮一个妹纸的电脑恢复照片
  • 中国电信定制的中兴 ZXV10 B760H 机顶盒root全程记录

    家里有台机顶盒 是中兴 ZXV10 B760H 它是智能机顶盒 在写这篇文章之前 我已經对它进行了破解 别看是 智能机顶盒 但实际上已經让中国电信阉割的差不多了 只能看IPTV 我这个破解可以让它安装第三方app 今天重点讲root 你需要
  • ————博客永久废止————转到http://1su.net/nsB

    由于CSDN博客太难以管理 博主转向Ghost Blog Node的博客引擎 该博客永久废止 新的博客地址为http 1su net nsB
  • FutureTask 源码 并发设计模式

    一 代码 https www jianshu com p 60f661d95d53 public static void main String args throws Exception Callable
  • spring应用上下文的理解

    spring应用上下文的理解 容器 什么叫容器呢 如果你想要一个手机 好这时候spring就给你一个手机 你想要使用的对象 spring就会给你 但是现在我们就会问那spring给的对象来自于哪里呢 spring要负责的工作很多 那么多对象
  • Matlab矩阵

    1 通用的特殊矩阵 zeros函数 产生全0矩阵 ones函数 产生全1矩阵 eye函数 产生对角线为1的矩阵 当矩阵是方阵时 得到一个单位矩阵 rand函数 产生 0 1 区间均匀分布的随机矩阵 randn函数 产生均值为0 方差为1的标
  • Bootstrap统计学方法简介以及中心极限定理

    一 概念 Bootstrap 一词出自英文习语 pull yourself up by your bootstraps 它的隐含意是 improve your situation by your own efforts 即 通过你自己的努力
  • 163免费企业邮箱申请后怎么登陆?

    163免费企业邮箱目前的用户已经很多了 而关于申请的流程却并不多 很多人想用却不知道怎么注册申请 申请后又不清楚怎么登陆 下面小编为您讲解163免费企业邮箱注册申请及登陆流程 163免费企业邮箱注册申请 搜索163免费企业邮箱 打开企业邮箱
  • Git---企业级开发模型

    文章目录 前言 拓展 一 系统开发环境 二 Git分支设计规范 master分支 release分支 develop分支 feature分支 hotfix分支 三 企业级项目管理实战 准备工作 创建项目 创建仓库 添加成员 1 添加企业成员
  • redis分页查询代码实现

    redis分页查询 简单明了代码实现 本文是个基于redis的分页查询实现 场景描述 Redis分页自定义包装类 收藏和取消收藏biz业务处理 查询收藏数 查询用户收藏状态 分页查询我的收藏 本文是个基于redis的分页查询实现 本人业务开
  • 【JavaScript】Math 对象常见方法详解

    文章目录 JavaScript Math 对象常见方法详解 Math常见的方法 1 Math random 2 Math round 3 Math ceil 4 Math floor 5 Math abs 6 Math min 7 Math
  • Promise,async,await 面试题

    目录 5 面试题 1 2 3 4 5 6 7 推荐先看Promise 相关知识点 5 面试题 1 结果 1 5 2 3 4 const promise new Promise resolve reject gt console log 1
  • 前端自测运行vue打包后的dist文件

    在Vue项目中 dist目录是代码打包之后生成的文件夹 其中包含了静态资源文件和打包后的JavaScript CSS等文件 如果要在本地运行打包后的项目文件 可以使用简单的静态服务器来启动 下面介绍一种使用Node js中的http ser
  • 基于STC15单片机-LM35-DS8B20温度测量-DS1302计时-proteus仿真-源程序

    一 系统方案 1 本设计采用STC15单片机作为主控器 2 DS18B20采集温度值送到液晶1602显示 3 DS1302计时 日期送到液晶1602显示 4 LM35采集另一路温度值送到数码管显示 二 硬件设计 原理图如下 三 单片机软件设