万年历程序实现:集成温度显示与DS1302时钟
本文档介绍了一个在PD1000开发板上运行的万年历程序,该程序不仅具备传统万年历的功能,还具有显示温度的能力。程序主要利用了LCD1602液晶显示屏、DS18B20温度传感器以及DS1302实时时钟来提供全面的信息展示。以下是关键知识点的详细解析: 1. **硬件组成**: - LCD1602:16x2字符液晶屏,用于显示日期、时间以及其他信息。 - DS18B20:数字温度传感器,负责实时测量环境温度并将其传递给程序。 - DS1302:实时时钟芯片,用于精确的时间存储和管理,包括年、月、日、小时、分钟和秒的计时。 2. **编程接口**: - P1口配置为LCD1602的数据线(DataP0),控制线包括RS、RW和E引脚。 - P2口的一部分引脚用作LCD1602的命令行操作。 - P3口用于连接DS18B20和DS1302,T_IO、T_RST和T_CLK分别对应温度传感器的信号线。 3. **程序结构**: - `id_case1_key()`函数可能是处理按键输入的回调函数,用于用户交互。 - `Disp_line1()`和`Disp_line2()`函数负责在LCD1602上显示两行文本信息。 - `Disp_mod0()`可能用于显示模块0的相关数据,如当前的温度值。 4. **DS1302操作**: - 定义了寄存器读写函数`Set()`、`RTInputByte()`和`RTOutputByte()`,用于与DS1302进行数据交换。 - `W1302()`和`R1302()`函数负责写入和读取DS1302的数据。 - `Set1302(unsigned char*)`函数用于设置DS1302的时钟,可能包含年份、月份、日期等参数。 5. **变量声明**: - `uchar id`、`timecount`和`dipsmodid`可能是用来存储识别号、时间计数器或模块状态的变量。 - `lmcinit_or_not`、`flag`和`sflag`是布尔标志,用于控制初始化状态和事件处理。 6. **程序时间设置**: - 使用`T_IO`、`T_RST`和`T_CLK`引脚与DS1302通信,设置和读取时间。 - `ACC0`和`ACC7`可能是用于访问DS1302内部寄存器的位地址。 7. **版权信息**: - 该程序的开发日期为2011年02月28日,且声明了源代码的所有权,指出访问网站www.puaite.com或www.puaite.taobao.com了解更多信息。 这个万年历程序设计巧妙地将多个硬件组件集成在一起,实现了动态显示日期、时间和温度的功能,并通过用户输入处理进一步交互。在嵌入式系统开发中,这是一个实用且具有扩展性的示例,展示了如何在硬件和软件之间进行有效的通信和数据处理。
// 程序名称:1602+18b20+ds1302程序
// 实验目的:综合应用lcd1602,ds18b20,ds1302
// 连接方法:将LCD1602液晶屏 插到J9端子上 引脚朝下
// JP8与JP5 用8p排线连接
// 描 述:液晶显示当前时间(可调整) ,温度(精度可调)
// K1设置键 K2递增键 K3递减键
// 版 本:PD1000开发板
// 作 者:青岛普爱特
// 日 期:2011.02.28
//注:(1):主芯片STC89C52RD 使用12M晶振
// (2):Keil uV3 3.30编译运行通过
// (3):本例程在 PD1000 开发板平台上成功运行通过
// (4):青岛普爱特版权所有,只供学习参考,不得应用于商业用途.
// (5):公司网站:www.puaite.com 淘宝网店:www.puaite.taobao.com
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
//功能引脚定义
sbit set= P1^0; //设置调整按键
sbit up = P1^1; //加 键
sbit down =P1^2; //减 键
sbit LCM_RS= P2^5; //l602定义引脚
sbit LCM_RW= P2^6;
sbit LCM_E =P2^7;
#define LCM_Data P0
#define Busy 0x80 //用于检测LCM状态字中的Busy标识
uchar id,timecount,dipsmodid;
bit lmcinit_or_not; //是否需要清屏标志位“1”为需要“0”为不需要
bit flag,sflag; //flag是时钟冒号闪烁标志,sflag是温度负号显示标志
void Disp_line1(void); //显示屏幕第一行
void Disp_line2(void); //显示屏幕第二行
void id_case1_key();
void Disp_mod0(void);
//*********** DS1302 时间显示定义部分
sbit T_IO =P3^4;
sbit T_RST=P3^5;
sbit T_CLK=P3^6;
sbit ACC0=ACC^0;
剩余24页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 多传感器数据融合手册:国外原版技术指南
- MyEclipse快捷键大全,提升编程效率
- 从零开始的编程学习:Linux汇编语言入门
- EJB3.0实例教程:从入门到精通
- 深入理解jQuery源码:解析与分析
- MMC-1电机控制ASSP芯片用户手册
- HS1101相对湿度传感器技术规格与应用
- Shell基础入门:权限管理与常用命令详解
- 2003年全国大学生电子设计竞赛:电压控制LC振荡器与宽带放大器
- Android手机用户代理(User Agent)详解与示例
- Java代码规范:提升软件质量和团队协作的关键
- 浙江电信移动业务接入与ISAG接口实战指南
- 电子密码锁设计:安全便捷的新型锁具
- NavTech SDAL格式规范1.7版:车辆导航数据标准
- Surfer8中文入门手册:绘制等高线与克服语言障碍
- 排序算法全解析:冒泡、选择、插入、Shell、快速排序