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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

SPI总线的DS1302实时钟控制.docx

1、SPI总线的DS1302实时钟控制SPI总线的DS1302实时钟控制实验四 SPI总线的DS1302实时钟控制一、实验目的1、了解电子电路PROTEUS软件的在单片机方面的仿真应用2、掌握具有SPI总线DS1302、MAX7219芯片的应用及编程二、实验要求在PROTEUS环境下,利用DS1302实时钟芯片实现时间、日期的显示,并且具有调节时间、日期的功能,显示用共阴极LED显示。用串行芯片MAX7219驱动LED显示.实现此功能的电路原理图如下所示:1、显示“星期”的共阳极二极管接到单片机的P0口,P0口数据线接上拉电阻;2、显示“时间”或“日期”,是采用MAX7219控制共阴极LED来实现

2、3、DS1302的IO脚接单片机的P1.1,时钟信号SCLK接单片机P1.0,复位信号/RST接单片机P1.2。DS1302的晶振在这里可以不接,电源、地线都省略。4、MAX7219是用来驱动“时间”或“日期”的LED显示的。MAX7219的DIN信号脚接单片机的P2.0,/LOAD接单片机的P2.1,CLK接单片机的P2.2;5、时间/日期的调整:按下调整键,再分别按相应的“星期”、“年”、“月”、“日”,“时”、“分”、“秒“键,即可以调整时间/日期;6、在正常显示时,按下“时间/日期“切换键,即可以在显示时间或日期来回切换。三、PROTEUS环境下的硬件设计1、打开PROTEUS ISI

3、S,在PROTEUS ISIS编辑窗口中单击列表上的“P”按钮,添加下列元器件:元件名称所属类AT89C51Microprocessor ICSCRYSTAL 晶振MisecllaneousCAP 电容CapacitorRES 电阻ResistorDS1302Microprocessor ICS7SEG-COM-ANODE共阳极OptoeletronicsBUTTON按键Switches&relaysMAX7129Microprocessor ICSRESPACK-7排阻Resistor7SEG-MPX-CA-BLUE 共阴极Optoeletronics表1在PROTEUS编辑窗口添加完元器件

4、,连线。如附图1。四、软件设计 在KEIL环境下编辑、编译程序,生成*.HEX文件后,装入单片机即可。五、实验程序源程序:#include /包含特殊功能寄存器库#include #include /该汉字库要求在你要显示的位置装入你要的汉字模(16*16)。void main() Init7219(); /初始化7219 Set1302(time); /设置初始时间 Get1302(Curtime); /读回DS1302中的数据 P0=CODE1Curtime5-1;/显示星期 Display1(num); /默认显示时间 delay(255); /延时 delay(255); while(

5、1) Get1302(Curtime); /取数据 if(TICK=0) /判断是否更改 t=t; while(TICK=0) while (t=1) if(WEEK=0) /更改星期 w+; while (WEEK=0); Get1302(Curtime); Curtime5=Curtime5+w; if(Curtime5=8) Curtime5=1; w=0; Set1302(Curtime); else if(YEAR=0) /更改年份 while (YEAR=0); Get1302(Curtime); Curtime6=add5(Curtime6); Set1302(Curtime);

6、 else if(MONTH=0) /更改月份 while (MONTH=0); Get1302(Curtime); Curtime4=add4(Curtime4); Set1302(Curtime); else if(DAY=0) /更改号数 while (DAY=0); Get1302(Curtime); Curtime3=add3(Curtime3); Set1302(Curtime); else if(HOUR=0) /更改时 while (HOUR=0); Get1302(Curtime); Curtime2=add2(Curtime2); Set1302(Curtime); els

7、e if(MIN=0) /更改分 while (MIN=0); Get1302(Curtime); Curtime1=add1(Curtime1); Set1302(Curtime); else if(SEC=0) /更改秒 while (SEC=0); Get1302(Curtime); Curtime0=0; Set1302(Curtime); if(CHAN=0) /是否有显示切换 n=n; while(CHAN=0) Get1302(Curtime); if(n=1) Display2(num); else Display1(num); P0=CODE1Curtime5-1; if(T

8、ICK=0) t=t; while(TICK=0) if(CHAN=0) /是否有显示切换 n=n; while(CHAN=0) if(n=1) Display2(num); else Display1(num);头文件“DS1302”#ifndef _DS1302_H_#define _DS1302_H_/*/#include void InputByte(unsigned char Da)/把数据Da写入DS1302 的IO口,先送低位 unsigned char i; ACC=Da; for(i=8;i0;i-) /开始传输8个字节的数据 IO=ACC0; /取最低位,注意DS1302的

9、数据和地址都是从最低位开始传输的 SCLK=1; /时钟线拉高,制造上升沿,SDA的数据被传输 SCLK=0; /时钟线拉低,为下一个上升沿做准备 ACC=ACC1; unsigned char OutputByte(void)/读出DS1302的数据并保存在Da中 unsigned char i; for(i=8;i0;i-) ACC=ACC1; ACC7=IO; SCLK=1; SCLK=0; return(ACC); void Write1302(unsigned char Addr, unsigned char Da)/写入DS1302地址和数据 RST=0; /初始CE线置为0 SC

10、LK=0; /初始时钟线置为0 RST=1; /初始CE置为1,传输开始 InputByte(Addr); /地址,命令 传输命令字,要写入的时间/日期地址 InputByte(Da); /*写1Byte数据 /写入要修改的时间/日期 SCLK =1; /时钟线拉高 RST=0; /读取结束,CE置为0,结束数据的传输unsigned char Read1302(unsigned char Addr)/根据寄存器地址读出DS1302的相应数据 unsigned char DD; RST=0; /初始CE线置为0 SCLK=0;/初始时钟线置为0 RST=1; /初始CE置为1,传输开始 Inp

11、utByte(Addr); /地址,命令 传输命令字,要读取的时间/日历地址 DD=OutputByte(); /读1Byte数据 读取要得到的时间/日期 SCLK=1; /时钟线拉高 RST =0; /读取结束,CE置为0,结束数据的传输 return(DD);/得到的时间/日期void Set1302(unsigned char *pSDa)/设置时间 unsigned char i; unsigned char Addr=0x80; Write1302(0x8e,0x00); /控制命令,WP=0,写操作 for(i =7;i0;i-) Write1302(Addr,*pSDa); /格

12、式为:秒 分 时 日 月 星期 年 pSDa+; Addr+=2; Write1302(0x8e,0x80); /控制命令,WP=1,写保护void Get1302(unsigned char *pSDa) unsigned char i; unsigned char Addr=0x81; for(i=0;i=1;i-) CLK=0; DIN=ACC7; ACC=ACC0;x-) for(y=255;y0;y-);unsigned char add1(unsigned char DATA)/分、秒调整子程序 unsigned char i,j; i=DATA&0x0f; j=DATA4; i+

13、; if(i=0x0a) i=0x00;j+; if(j=0x06)&(i=0x00) /超过59就变成0 i低位,j高位 i=0;j=0; DATA=(j4; i+; if(i=10) i=0;j+; if(j=2)&(i=4) /超过23就变成0,i低位,j高位 i=0;j=0; DATA=(j4; i+; if(i=10) i=0;j+;if(Curtime6/16*10+Curtime6%16)%4=0)&(Curtime4=0x02)&(j=0x03)&(i=0x00) i=1;j=0; Else if(Curtime6/16*10+Curtime6%16)%4!=0)&(Curti

14、me4=0x02)&(j=0x02)&(i=0x09) i=1;j=0; else if(Curtime4=0x01)|(Curtime4=0x03)|(Curtime4=0x05)|(Curtime4=0x07)|(Curtime4=0x08)|(Curtime4=0x10)|(Curtime4=0x12)&(j=0x03)&(i=0x02) i=1;j=0; else if(Curtime4=0x04)|(Curtime4=0x06)|(Curtime4=0x09)|(Curtime4=0x11)&(j=0x03)&(i=0x01) i=1;j=0; DATA=(j4; i+; if(i=

15、0x0a) i=0;j+; if(j=0x01)&(i=0x03)/超过12就变成0,i低位,j高位 i=1;j=0; DATA=(j4)+i; return(DATA);unsigned char add5(unsigned char Data)/年份调整子程序 unsigned char i,j; i=Data%16; j=Data/16; i+; if(i=0x0a) i=0;j+; if(j=0x0a)&(i=0x00) i=0;j=0; Data=(j=4)+i; return(Data);void Display1(unsigned char *num)/显示时间 unsigned

16、 char i,j,m=0x08; for(i=0;i4; num+; m-; *num=CODE2j&0x0f; Write7219(m,*num); num+; m-; if(num!=8) *num=0x01; Write7219(m,0x01); num+; m-; void Display2(unsigned char *num)/显示日期 unsigned char i,j,m=0x08; for(i=3;i4; num+; m-; *num=CODE2j&0x0f; Write7219(m,*num); num+; m-; if(num!=5) *num=0x01; Write7

17、219(m,0x01); num+; m-; *num=CODE2Curtime6&0x0f; Write7219(m,*num); j=Curtime64; num+; m-; *num=CODE2j&0x0f; Write7219(m,*num); num+; m-;#endif六、实验小结这次实验让我掌握具有SPI总线DS1302、MAX7219芯片的应用及编程,在实验中体会乐趣并掌握新知识是我一直梦寐以求的。我喜欢这样的实验,能用自己的双手做出有成就的东西,每当图形出现,心中就会有丝快乐,神奇的代码与图形的结合,让我更加佩服软件的设计者,虽然我不能达到他们的成就,但我也会凭着自己的兴趣,努力做好自己的每一件事,下次的实验我会继续努力。附录:图1 日期的显示图2 时间的显示

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

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