没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实验二十三
LCD1602+DS1302+DS18B20 多功能电子钟综合实验
一.实验目的:
做一个可以显示温度的多功能电子钟。
二.实验电路图:
键盘接线图
LCD1602 接线图
FDR工作室制作
更多资料:www.scutradio.com
Email:fdrstudio@tom.com
华南理工大学
无线电爱好者协会
FDR工作室
Ds1302 和 ds18b20 接线图
三、硬件接线图:
1602 及 18b20 的连接
FDR工作室制作
更多资料:www.scutradio.com
Email:fdrstudio@tom.com
华南理工大学
无线电爱好者协会
FDR工作室
蜂鸣器连接
按键及 ds1302 连接
四、实验原理:
FDR工作室制作
更多资料:www.scutradio.com
Email:fdrstudio@tom.com
华南理工大学
无线电爱好者协会
FDR工作室
前面我们做了那么多的实验,好像都只是不实用的东西。现在这个就实用了,
LCD1602+DS1302+DS18B20多功能电子钟综合实验 。DS1302的精度可达到一天只差
一秒,(当然在常温下,其精度取决于你的晶振的精度。)而DS18B20的测温精
度是0.0625度。所以整个系统的精度还是很高的。
我们还要什么功能呢?可以显示时间和温度了,那时间慢了,怎么办?所以要键盘啦,
可以修改时间。还要什么功能呢?闹钟,可以通过键盘来设定闹钟。闹钟的声音通过蜂鸣器
发出来。那么这个系统就完善了。当然可以用蜂鸣器发出音乐来,这里我就不加这个进去了,
让你们来加吧。
下面我就先介绍一下这个系统的用法了。首先,显示屏(LCD1602)上要显示时间温度,
第一行显示:DAT:日期 星期,第二行显示:时间 温度。其次,我们可以修改时间,包括
修改闹钟的时间:按下 0 修改秒,按下 1 修改分,按下 2 修改时,按下 3 修改日,按下 4
修改月份,按下 5 修改星期,按下 6 修改年份,按下 7 修改闹钟的时间。进入修改界面后,
键 15 是确定键,键 14 是取消键,键 13 是推出键,键 13 是闹钟的功能取消(如果想再开闹
钟的话,重新修改闹钟时间就行了)。修改界面中,第一行是提示修改什么,第二行显示你
要修改的内容的当前数据和你键入的数据。闹钟响了之后按下按键 8-15 中的任意一个就可
以使闹钟停止闹铃了.
五、源程序:
#include <reg52.h>
#include <intrins.h>
#define MSB 0x80 //读忙位
#define HIGH 1
#define LOW 0
//*****************************************
#define DATA_MODE 0x28 //LCD 模式设置,0x28 位四位数据线模
式
#define OPEN_SCREEN 0x0C //打开 LCD 显示
#define DISPLAY_ADDRESS 0x80 //写地址指令
#define CLEARSCREEN LCD_en_com(0x01) //清屏
//***********//LCD1602 的接线//*****************************
#define LCDIO P0 //LCD1602的高四位接在 P0 口的高四位
sbit LCD1602_RS=P0^0; //RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指
令寄存器。
sbit LCD1602_RW=P0^1; //RW 为读写信号线,高电平时进行读操作,低电平时进行写操
作。
sbit LCD1602_EN=P0^2; //E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执
行命令。
//*********************************************************//
sbit alarm_speaker=P3^7; //蜂鸣器的接线
sbit DS18B20=P1^0; //自已定义的 ds18b20 口
FDR工作室制作
更多资料:www.scutradio.com
Email:fdrstudio@tom.com
华南理工大学
无线电爱好者协会
FDR工作室
sbit SCLK=P3^2; //ds1302 的接线
sbit IO=P3^3;
sbit RST=P3^4;
sbit ACC7=ACC^7; //累加器
sbit ACC0=ACC^0;
unsigned char L_18B20,H_18B20; //分别存放低八位 高八位的数据;
unsigned char fg=0,zhengshu,xiaoshu1,xiaoshu2; //fg 为负数标志位,zhengshu 是温度的整数部
分,xiaoshu1 是十分位,xiaoshu2 是百分位
unsigned char times[7]={55,39,16,7,11,3,7}; //存放时间
unsigned char key=16; //存放健值
unsigned char alarm_clock[3]={0}; //用于存放闹钟的时间:时分和闹钟的标志位
void Reset_18B20(void); //ds18b20 复位程序
void Wait_18B20(); //等待程序,等待 ds18b20 应答
bit Readbit_18B20(void); //读取一个 bit 的数据
unsigned char Readbyte_18B20(void); //读取一个字节的数据
void Writebyte_18B20(unsigned char b); //写一个字节(控制字)
void Convert(void); //开始转换
void Read_18B20(void); //读取 ds18b20
void write_1302_byte(unsigned char d); //向 1302 写入一字节数据 d
unsigned char read_1302_byte(void); //从 1302 读出一字节数据并返回
void write_1302_reg(unsigned char add,unsigned char d); //向 1302 地址 add 处写入数据 d
unsigned char read_1302_reg(unsigned char add); //从 1302 地址 add 处读出数据并返
回
void on_off_1302(unsigned char ch); //启动/停止计时,gate=0 时启动计
时,gate!=0 时停止计时
void hour_mode_1302(unsigned char ch); //时间显示方式设置,ch=0时为 24小
时格式,ch!=0 时为 12 小时格式
void write_1302_time(unsigned char *time); //设置时间
void read_1302_time(unsigned char time[]); //读出时间
//**********************************************************************
void LCD_en_com(unsigned char command); // 写命
令指令
void LCD_en_dat(unsigned char temp); //写数据指令
void LCD_set_xy(unsigned char x, unsigned char y); // 设置显示地
址:X 为横轴(0-15),Y 为纵轴(0-1).
void LCD_write_char(unsigned x,unsigned char y,unsigned char dat); //写一个字符
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s);//写一个字符串
void LCD_write_int(unsigned char x,unsigned char y,unsigned int intdat); //写无字符型整形数
void LCD_init(void); //lcd 初始化
void LCD_Read_BF(void); //LCD
读忙信号
FDR工作室制作
更多资料:www.scutradio.com
Email:fdrstudio@tom.com
华南理工大学
无线电爱好者协会
FDR工作室
剩余20页未读,继续阅读
资源评论
- angelyang12212013-08-11很好用,但是下载前你得懂这些东西 得自己改改!
Fengzhx
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功