ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:78.21KB ,
资源ID:6557575      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6557575.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DS1302定时闹钟课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DS1302定时闹钟课程设计.docx

1、DS1302定时闹钟课程设计课程设计报告课程设计名称: 单片机课程设计 课程设计题目: DS1302 实时时钟(3) 专业班级: * 姓 名: * 学 号: * 实验室号:信息楼205/220 实验组号: 实验时间: (11.7.4-11.7.15) 批阅时间: 指导教师: 成 绩: 1. 题目名称DS1302 实时时钟(3)2. 课设目的1.掌握KEILuV 下汇编语言的调试方法2.练习利用单片机小系统板编程实现一些简单功能的方法。3. 课设内容1. 掌握KEILuV 下汇编语言的调试方法2. 编写软件(或借鉴网络共享的汇编语言程序)实现功能: 由键盘切换显示年,月,日,时,分,秒由键盘设置

2、年,月,日,时,分,秒3. 由键盘设置定时时间,当时钟的时间和定时时间相同时, 蜂鸣器响5 声,数码管闪烁3次4. 课设方案1、DS1302的结构及工作原理DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源

3、进行涓细电流充电的能力。1.1 引脚功能及结构图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电

4、平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。1.2 DS1302的控制字节DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为

5、1表示进行读操作,控制字节总是从最低位开始输出。 1.3 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。1.4 DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存

6、器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 2、程序设计流程图 no yes 3、m2t1原理图 板号NO.19 DS1302接线图5课设总结1、程序清单及注释主函数 /* 程序功能:实现DS1302功能并具有整点报时,闹钟功能。 C P U :STC12C5608AD 晶 振:22.1184MHz 调用文件:主函数 时 间:2011年7月10日2

7、0:13:41*/#include#include#includedelay.h#includeDS1302.h#includeCH451.h#define uchar unsigned char#define uint unsigned intvoid main () initCH451(); iniDS1302();/ initimer0(); while(1) mode(); Timer_approach(); Time_adjustment(); 子程序1/* 程序功能:数码管显示和键盘扫描的程序 C P U :STC12C5608AD 晶 振:22.1184MHz 调用文件:dela

8、y.h 函数接口:void initCH451(void) /初始化CH451 void CH451_wr(uint add,uchar dat) /写到数码管add位dat数据 void P_Key(void) /检测键盘按键 uchar If_Key_Press(void) /检测后是否已经按下 uchar Which_Key_Press(void) /检测后按了那个键 uint address(uchar AD) /将地址翻译机器码 uchar Trans_Num(uchar d8) /将显示位翻译机器码 Author : 时 间:2011年7月11日11:41:*/#include #

9、include #includedelay.h#define uchar unsigned char#define uint unsigned intsbit CLK =P34;sbit DIN =P33;sbit LOAD =P23;sbit DOUT =P22;uchar code smg=0xBE,0x24,0xEA,0xE6,0x74,0xD6,0xDE,0xA4,0xFE,0xF4,0xFC,0x5E,0x9A,0x6E,0xDA,0xD8,0x01; uint code addr=0x0A00,0x0900,0x0B00,0x0800,0x0C00,0x0D00,0x0E00,0x

10、0F00;uchar WKP=0,kp=0;void clock (void) delay(); CLK = 0; delay(); CLK = 1; delay();void setCH451(uint CTRL) uchar i; for (i=0;i= 1; /右移之后再判断 DIN = 1; LOAD = 0; delay(); LOAD = 1;void initCH451(void) uint ini=0x0201,sys=0x0403,CTRL=0x0500; /ini芯片内部复位;sys初始化系统参数; uint ss=0x0628; DIN = 0; /0x580数码管显示B

11、CD, 010110000000B 数码管BCD显示代码 delay(); DIN = 1; delay(); /初始化,令DIN先置低再置高。 setCH451(ini); setCH451(sys); setCH451(CTRL); setCH451(ss); void CH451_wr(uint add,uchar dat) uchar i; add+=dat; for (i=0;i=1; LOAD = 0; delay(); LOAD = 1;void P_Key(void) unsigned char i; unsigned char command; /定义命令字,和数据存储器 c

12、ommand=0x07; /输入读451命令字 LOAD=0; for(i=0;i=1; /往右移一位 CLK=1; /产生时钟上升沿锁通知CH451输入位数据 LOAD=1; /产生加载上升沿通知CH451处理命令数据 kp=0; /清除keycode for(i=0;i7;i+) kp=6; kp&=0xBF;uchar If_Key_Press(void) return WKP;uchar Which_Key_Press(void) return kp;uint address(uchar AD) uint ret; ret=addrAD; return ret;uchar Trans_

13、Num(uchar d8) uchar ret; ret=smgd8; return ret;void clrD(void) /清屏 uchar i; for (i=0;i8;i+) CH451_wr(addri,0x00);子程序2:C51 COMPILER V9.00 DELAY 07/12/2011 11:15:03 PAGE 1 / 函数作用:延时函数 / 晶 振:22.1184MHz / 接口程序:void Delay_Ms(unsigned int T) /毫秒延时程序 / void delayu(unsigned int T) / 作 者:pandawbp / / 时 间:201

14、1年7月4日13:53:45 /#includevoid Delay_Ms(unsigned int T) /毫秒延时程序 /仿真300-1s unsigned int i; while (T-) for (i=0;i0;i-); /STC12C5201为6 void delay(void) /延时两个机器周期 _nop_(); _nop_();子程序3:C51 COMPILER V9.00 DS1302 /* 程序功能:DS1302实时时钟以及、 按键调节时钟 C P U :STC12C5608AD 晶 振:22.1184MHz 调用文件:delay.h 函数接口: 修改内容:TH0set

15、/按键扫描时间定时器0工作方式1 时 间:2011年7月11日11:41:03*/#include #include #includeCH451.h#includedelay.h#define uchar unsigned char#define uint unsigned int#define TH0set 0x00 /按键扫描时间定时器0工作方式1sbit BUZZ =P26;sbit SCLK =P21;sbit IO =P20;sbit CE =P17;uchar sj3,flag=1; /sj为时间 sj2是小时= timer0uchar timer2; /闹钟缓冲区uchar Mo

16、deNow; /现行模式(0为时钟模式,1为闹钟调节模式,2为年月日模式)void initimer0 (void) /初始化定时器1(按键使用) EA=1; ET0=1; TH0=TH0set; TL0=0x00; TMOD=0x11; TR0=1;void DS1302_wr(uchar address,uchar dat) uchar i; CE=0; SCLK=0; CE=1; for (i=0;i=1; for (i=0;i=1; CE=0;uchar DS1302_re(uchar address) uchar i,value; CE=0; SCLK=0; CE=1; for(i=

17、0;i=1; SCLK=1; for (i=0;i=1; SCLK=0; CE=0; return value;void iniDS1302(void) DS1302_wr(0x8E,0x00);/ DS1302_wr(0x80,0x00);/ DS1302_wr(0x82,0x00);/ DS1302_wr(0x84,0x00);uchar read1302(void) /返回一个整点数或0 sj0=DS1302_re(0x81); Delay_Ms(10); CH451_wr(address(0),Trans_Num(sj0%16); CH451_wr(address(1),Trans_N

18、um(sj0/16); sj1=DS1302_re(0x83); Delay_Ms(10); CH451_wr(address(3),Trans_Num(sj1%16); CH451_wr(address(4),Trans_Num(sj1/16); sj2=DS1302_re(0x85); Delay_Ms(10); CH451_wr(address(6),Trans_Num(sj2%16); CH451_wr(address(7),Trans_Num(sj2/16); CH451_wr(address(2),0x42); CH451_wr(address(5),0x42); if (sj0=

19、0&sj1=0) return sj2; else return 0;uchar exchange216(uchar n) uchar i,j; i=n/16; j=n%16; n=i*10+j; return n;uchar exchange210(uchar n) uchar i,j; i=n/10; j=n%10; n=i*16+j; return n;void Timer_display(void) clrD(); setCH451(0x0600); CH451_wr(address(6),Trans_Num(timer0/10); CH451_wr(address(5),Trans_

20、Num(timer0%10); CH451_wr(address(3),Trans_Num(timer1/10); CH451_wr(address(2),Trans_Num(timer1%10); CH451_wr(address(4),0x40); void Timer_hour(void) /闹钟小时设定 if(ModeNow=1)timer0+; if (timer0=24) timer0=0; Timer_display(); Delay_Ms(60); if (flag) Delay_Ms(250); flag=0; ModeNow=1;void Timer_min(void) /

21、闹钟分钟设定 if(ModeNow=1) timer1+; if (timer1=60) timer1=0; Timer_display(); Delay_Ms(60); if (flag) Delay_Ms(250); flag=0; ModeNow=1;void date(void) sj0=DS1302_re(0x87); Delay_Ms(10); CH451_wr(address(0),Trans_Num(sj0%16); CH451_wr(address(1),Trans_Num(sj0/16); sj1=DS1302_re(0x89); Delay_Ms(10); CH451_w

22、r(address(3),Trans_Num(sj1%16); CH451_wr(address(4),Trans_Num(sj1/16); sj2=DS1302_re(0x8d); Delay_Ms(10); CH451_wr(address(6),Trans_Num(sj2%16); CH451_wr(address(7),Trans_Num(sj2/16); CH451_wr(address(2),0x40); CH451_wr(address(5),0x40);void SwitchTime(uchar posi,uchar com,char bac) sjposi=exchange216(sjposi); if (sjposi=bac) sjposi=0; else sjposi+; sjposi=exchange210(sjposi); DS1302_wr(com,sjposi); if (ModeNow=0) read1302(); else if (ModeNow=2) date(); Delay_Ms(60); if (flag) Delay_Ms(250); flag=0; void Time_adjustment(void) P_Key(); if (If_Key_Press() switch(Wh

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1