DS1302、数码管显示遥控可调时钟,带温度显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/******************************************************
名称:DS1302时钟数码管显示遥控可调时钟,带温度显示
编写:
日期:2011.6
内容:DS1302实时时钟数码管显示,时间和日期切换显示按下按键,循环切换时间格式xx-xx-xx
日期格式xx-xx-xx
周秒格式x(-)xx.xC
******************************************************/
#include
#define uint unsigned int //宏定义
#define uchar unsigned char
sbit duxu=P2^2;//定义锁存使能端口段锁存
sbit wexu=P2^3;// 位锁存
sbit DQ=P1^3;//ds18b20 端口
bit rdflag;//定义读时间标志
uchar irtime,disnum;//红外用全局变量
bit irprok,irok; //处理完毕标志和接收完毕标志
uchar irtab[4]; //存储用户识别码两个字节+操作码两个字节
uchar irdat[33];//存储引导码及32位地址码和数据码的时间宽度
uchar code tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 uchar code tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
uchar tempdat[8]; //存储显示值的全局变量
sbit SCK=P1^4;
sbit SDA=P1^5;
sbit RST=P1^6;
#define sec_add 0x80 //秒寄存器写操作命令字
#define min_add 0x82 //分寄存器写操作命令字
#define hour_add 0x84 //时寄存器写操作命令字
#define day_add 0x86 //日寄存器写操作命令字
#define mon_add 0x88 //月寄存器写操作命令字
#define week_add 0x8a //周寄存器写操作命令字
#define year_add 0x8c //年寄存器写操作命令字
#define ctrl_add 0x8e //控制寄存器写操作命令字
#define cha_add 0x90 //涓流充电寄存器写操作命令字
#define clk_add 0xbe //时钟突发寄存器写操作命令字
uchar ary1[8]={20,11,7,14,15,49,0,2};//空年月日时分秒周数组:array
uchar ary[8]; //空年月日时分秒周
/***************************
延时子函数
***************************/
void delay(uint z) //延时1毫秒子函数
{
uint x,y; //声明两个局部变量x,y,取值范围0~65535;仅在此函数里有效。
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******************************
短延时(微秒级)子函数
********************************/
void delayus(uchar t)
{
while(--t); //12M晶振,t自减一次约2微秒
}
/**************************************************************
18B20初始化
**************************************************************/
bit init_1820()
{
bit date=0;
DQ=1; //DQ复位
delayus(5); //稍做延时
DQ=0; //单片机将DQ拉低
delayus(180); //精确延时大于480us 小于960us
delayus(180);
DQ=1; //拉高总线
delayus(50); //15~60us 后接收60-240us的存在脉冲
date=DQ; //如果dat=0则初始化成功, dat=1则初始化失败
delayus(25); //稍作延时返回
return date;
}
/**************************************************************
从18B20读取一个字节
**************************************************************/
uchar rd_byt()
{
uchar i;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0; // 给脉冲信号
dat>>=1;
DQ=1; // 给脉冲信号
if(DQ)
dat|=0x80;