DS1302、数码管显示遥控可调时钟,带温度显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

名称:DS1302时钟数码管显示遥控可调时钟,带温度显示

编写:

日期:2011.6

内容:DS1302实时时钟数码管显示,时间和日期切换显示按下按键,循环切换时间格式xx-xx-xx

日期格式xx-xx-xx

周秒格式x(-)xx.xC

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

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#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;

相关文档
最新文档