77范文网 - 专业文章范例文档资料分享平台

基于DS1302的万年历毕业论文 数码管显现 附程序 硬件电路图(7)

来源:网络收集 时间:2019-02-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

参考文献

1. 王静霞. 单片机应用技术(C语言版),北京:电子工业出版社,2009.5. 2. 彭伟. 单片机C语言程序设计实训100例,北京:电子工业出版社,2009.6. 3. 刘守义.单片机应用技术(第二版),北京:西安电子科技大学出版社,2007.8.

4. 戴佳. 51单片机C语言应用程序设计实例精讲[M],北京:电子工业出版 社,2006.4.

25

附表A 程序

//基于DS1302的日历时钟

#include //包含单片机寄存器的头文件 #include //包含_nop_()函数定义的头文件 #define uchar unsigned char #define uint unsigned int

/*************************************************************** DS1302与单片机接口

***************************************************************/ sbit DATA = P1^1; //DS1302数据传输端定义在P1.1引脚 sbit RST = P1^0; //DS1302复位端口定义在P1.0引脚

sbit SCLK = P1^2; //DS1302时钟输入端口定义在P1.2引脚

/*************************************************************** 按键与单片机接

***************************************************************/ sbit xiugai_rq = P3^0 ; // S2按键进入时间修改 sbit jia = P3^1 ; // S3按键加1

sbit qiehuan = P3^2 ; // S1按键对时间和日期之间的切换,对日

期修改 中断0

sbit xiugai_sj = P3^3 ; // S4按键修改日期

/*************************************************************** 全局变量定义

**************************************************************/ UcharcodeTab_Num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80

,0x90};//0-9数字

Uchar Time_miao=0,Time_fen=0,Time_shi=12,Time_ri=11,Time_yue=11,

Time_nian=10; //分别储存秒、分、小时 , 日,月,年

uchar ReadValue; //暂时储存从1302读取的数据 uchar timdata, rtimdata ; //时间和日期时钟修改位置标志

bit secbit; // 时钟秒修改标志?secbit=1,正在修改时钟秒 bit minbit ; // 时钟分修改标志 minbit=1,正在修改时钟秒 bit hourbit ; // 时钟时修改标志 hourbit=1,正在修改时钟秒 bit daybit ; // 时钟日修改标志 daybit=1,正在修改时钟秒 bit monbit ; // 时钟月修改标志 monbit=1,正在修改时钟秒 bit yearbit ; // 时钟年修改标志 yearbit=1,正在修改时钟秒 /***************************************************** 函数功能:延时若干微秒 入口参数:n

***************************************************/ void delaynus(unsigned char n) {

unsigned char i; for(i=0;i

26

; }

/***************************************************** 函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ***************************************************/ void delay1ms() {

unsigned char i,j;

for(i=0;i<10;i++) for(j=0;j<33;j++)

}

/************************************************************** 函数功能:延时若干毫秒 入口参数:n

**************************************************************/ void delaynms(unsigned char n) {

unsigned char i;

for(i=0;i

/*************************************************************** 以下是DS1302芯片的操作程序

***************************************************************/ /************************************************************** 函数功能:向1302写一个字节数据 入口参数:x

**************************************************************/ void Write1302(unsigned char dat) {

unsigned char i;

SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); //稍微等待,使硬件做好准备 for(i=0;i<8;i++) //连续写8个二进制位数据 {

DATA=dat&0x01; //取出dat的第0位数据写入1302 delaynus(2); //稍微等待,使硬件做好准备 SCLK=1; //上升沿写入数据

delaynus(2); //稍微等待,使硬件做好准备 SCLK=0; //重新拉低SCLK,形成脉冲

dat>>=1; //将dat的各数据位右移1位,准备写入下一

个数据位

}

27

}

/************************************************************ 函数功能:根据命令字,向1302写一个字节数据 入口参数:Cmd,储存命令字;dat,储存待写的数据

************************************************************/ void WriteSet1302(unsigned char Cmd,unsigned char dat) {

RST=0; //禁止数据传递

SCLK=0; //确保写数居前SCLK被拉低

RST=1; //启动数据传输

delaynus(2); //稍微等待,使硬件做好准备 Write1302(Cmd); //写入命令字 Write1302(dat); //写数据

SCLK=1; //将时钟电平置于已知状态 RST=0; //禁止数据传递 }

/************************************************************ 函数功能: 1302进行初始化设置

************************************************************/ void Init_DS1302(void) { WriteSet1302(0x8E,0x00);

//根据写状态寄存器命令字,写入不保护指令

WriteSet1302(0x80,((Time_miao/10)<<4|(Time_miao)));

//根据写秒寄存器命令字,写入秒的初始值

WriteSet1302(0x82,((Time_fen/10)<<4|(Time_fen)));

//根据写分寄存器命令字,写入分的初始值

WriteSet1302(0x84,((Time_shi/10)<<4|(Time_shi)));

//根据写小时寄存器命令字,写入小时的初始值

WriteSet1302(0x86,((Time_ri/10)<<4|(Time_ri)));

//根据写日寄存器命令字,写入日的初始值

WriteSet1302(0x88,((Time_yue/10)<<4|(Time_yue)));

//根据写月寄存器命令字,写入月的初始值

WriteSet1302(0x8c,((Time_nian/10)<<4|(Time_nian)));

//根据写小时寄存器命令字,写入年的初始值

}

/*************************************************************** 函数功能:从1302读一个字节数据 入口参数:x

***************************************************************/ unsigned char Read1302(void)

28

{

unsigned char i,dat;

delaynus(2); //稍微等待,使硬件做好准备 for(i=0;i<8;i++) //连续读8个二进制位数据 {

dat>>=1; //将dat的各数据位右移1位, if(DATA==1) //如果读出的数据是1

dat|=0x80; //将1取出,写在dat的最高位

SCLK=1; //将SCLK置于高电平,为下降沿读出 delaynus(2); //稍微等待

SCLK=0; //拉低SCLK,形成脉冲下降沿 delaynus(2); //稍微等待 }

return dat; //将读出的数据返回 }

/************************************************************* 函数功能:根据命令字,从1302读取一个字节数据 入口参数:Cmd

*************************************************************/ unsigned char ReadSet1302(unsigned char Cmd) {

unsigned char dat;

RST=0; //拉低RST

SCLK=0; //确保写数居前SCLK被拉低 RST=1; //启动数据传输 Write1302(Cmd); //写入命令字 dat=Read1302(); //读出数据

SCLK=1; //将时钟电平置于已知状态 RST=0; //禁止数据传递

return dat; //将读出的数据返回 }

/************************************************************** 以下是1302数据的显示程序

**************************************************************/ /************************************************************* 函数功能:显示秒 入口参数:x

*************************************************************/ void DisplaySecond(unsigned char x) {

unsigned char i,j; //i,j分别储存拆开的十位和个位

i=x/10; //取十位

j=x; //取个位

29

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于DS1302的万年历毕业论文 数码管显现 附程序 硬件电路图(7)在线全文阅读。

基于DS1302的万年历毕业论文 数码管显现 附程序 硬件电路图(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/472312.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: