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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于单片机的万年历制作文档格式.docx

1、二、 DS1302简介1、总体概述图一:DS1302外部引脚DS1302是一种高性能、低功耗的实时时钟芯片,附加有31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可以采用突发方式,一次传送多个字节的时钟信号或RAM数据。实时时钟可以提供秒、分、时、日、星期、月和年,一个月小于31日时可以自动调整,包括闰年,有效值2100年。可以采用12h或24h方式计时,采用双电源供电,可设置备用电源充电方式,同时提供了对后备电源进行涓流充电的能力。7个附加字节的暂存储器,包括移位寄存器、控制逻辑、振荡器、实时时钟和RAM。芯片为8引脚小型DIP封装,引脚排列如图一所示,引脚功能见表一。引脚号名

2、称功能1Vcc1备份电源输入2X132.768Hz晶振输入3X232.768Hz晶振输出4GND地5RST控制移位寄存器/复位6I/O数据输入/输出7SCLK串行时钟8Vcc2主电源输入表一:DS1302引脚功能说明2、DS1302的控制字和读写时序说明 在变成过程中要注意DS1302的读写时序。DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要了解DS1302的控制字。DS1302的控制字见表二:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0RAMA4A3A2A1A0RDCKWR表二:DS1302的控制字

3、控制字的作用是设定DS1302的工作方式、传输字节等。每次数据的传输都是由控制字开始。控制字各位的含义和作用如下:1、 BIT7:控制字的最高位有效,必须是逻辑1,如果它为0,则不能把数据写入到DS1302中;2、 BIT6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;3、 BIT5至BIT1(A4A0):用A4A0表示,定义片内寄存器和RAM地址。定义如下:当BIT6位=0时,定义时钟和其他寄存器的地址。A4A0=06,顺序为妙、分、时、日、月、星期、年的寄存器。当A4A0=7,为芯片写保护寄存器地址。当A4A0=8.为慢速充电参数选择寄存器。当A4A0=31,为时钟多字节方式

4、选择寄存器。当BIT6=1时,定义RAM的地址,A4!A0=030,对应各子地址的RAM,地址31对应的是RAM多字节方式选择寄存器。4、 BIT0(最低有效位):如果为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。图二:DS1302数据读写时序三、 DS1302在单片机系统中应用的实现DS1302与单片机的链接仅需要3条线,即SCLK、I/O、RST。V

5、CC2在单电源与电池供电的系统中提供地电源并能提供低功率的电池备份。VCC2在双电源系统中提供电源,在这种运行方式下VCC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由两者中的较大者供电。当VCC2大于VCC1+0.2V时,VC2给DS1302供电。当VCC2小于在单片机系统中使用VCC1的时候,DS1302由VCC1供电。在本系统中,以ATmega为主器件,DS1302为从器件,RST接在主器件的PC4/TD0上,此引脚为高位的时候,选中该芯片,对其进行操作。串行数据线I/O与串行时钟线SCLK分别接在PC3/TMS和PC2/TCK上,所有的单片机地址、命令

6、、及数据均通过这两条线传输。在系统中,主器件在总线上产生时钟脉冲,寻址信号,数据信号,而从器件则相应接收数据,送出数据。对DS1302的每一次读写都需要16个时钟脉冲,前8个脉冲输入操作地址和读写命令。1、 硬件设计此系统中的主要器件为单片机ATmega16和DS1302,系统的逻辑图如下:图三:系统的逻辑框图其接口电路如图四所示。图四:接口电路2、 程序设计单片机控制DS1302时钟芯片的程序,主要包括两个方面的关键内容,一个是单片机对DS1302寄存器的地址定义和控制字的写入,二是数据的读取。单片机控制的DS1320时钟实时时间控制楼成图如下:为了节约成本,使用了实验室的开发板进行连接,只

7、是外接了一个1602小液晶。电路图在整体框架图中可以看见。四、 总结串行时钟芯片DS1302连线简单、体积小、价格低,再为控制其系统中应用有着突出的优点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果分析及对异常数据出现的原因的查找具有重要意义。附录一:主程序#include delay.hstdio.h/*/ DS1302 Real Time Clock functions#asm .equ _ds1302_port=0x15 ;PORTC .equ _ds1302_io=3 .equ _ds13

8、02_sclk=2 .equ _ds1302_rst=4#endasmds1302.h.equ _lcd_port=0x18 ; PORTb数据寄存器地址/* 液晶与单片机的端口连接 1 GND- 9 GND 2 +5V- 10 VCC 3 VLC- LCD HEADER Vo 4 RS - 1 PB0 (M16) 5 RD - 2 PB1 (M16) 6 EN - 3 PB2 (M16) 11 D4 - 5 PB4 (M16) 12 D5 - 6 PB5 (M16) 13 D6 - 7 PB6 (M16) 14 D7 - 8 PB7 (M16) */lcd.hunsigned char h,

9、m,s,r,y,n; unsigned char time10;char lcd_buffer50;bit runnian =0;int n_temp;unsigned char key_stime_counter,time_counter;bit time_1s_ok; / 时间计数单元, bit time_display;bit key_stime_ok,baoshi = 0;unsigned char change=0; int add=2000;/ Timer 0 比较匹配中断服务,2ms定时ASinterrupt TIM0_COMP void timer0_comp_isr(void

10、) / LED扫描显示 if (+key_stime_counter =5) key_stime_counter = 0; key_stime_ok = 1; / 10ms到 if (+time_counter = 30) time_counter = 0; time_1s_ok = time_1s_ok; / 0.1s到 #define key_input PINA.3 / 按键输入口#define key_state_0 0#define key_state_1 1#define key_state_2 2 unsigned char read_keyb3(void) static uns

11、igned char key_state = 0; unsigned char key_press, key_return = 0; key_press = key_input; / 读按键I/O电平 switch (key_state) case key_state_0: / 按键初始态 if (!key_press) key_state = key_state_1; / 键被按下,状态转换到键确认态 break; case key_state_1: / 按键确认态key_press) key_return = 1; / 按键仍按下,按键确认输出为1 (1) key_state = key_

12、state_2; / 状态转换到键释放态 else key_state = key_state_0; / 按键已抬起,转换到按键初始态 case key_state_2: if (key_press) key_state = key_state_0; /按键已释放,转换到按键初始态 return key_return; #define keyb1_input PINA.1 / 按键输入口unsigned char read_keyb1(void) key_press = keyb1_input;#define keyb2_input PINA.2 / 按键输入口unsigned char re

13、ad_keyb2(void) key_press = keyb2_input;#define keyb4_input PINA.4 / 按键输入口unsigned char read_keyb4(void) key_press = keyb4_input;void main(void) PORTA = 0xFF; / 显示控制I/O端口初始化 DDRA = 0x00; PORTD = 0x00; DDRD = 0xff; PORTB = 0x00; DDRB = 0xFF; PORTC = 0x10; DDRC = 0x1c; / T/C0 初始化 TCCR0 = 0x0B; / 内部时钟,6

14、4分频(4M/64=62.5KHz),CTC模式 TCNT0 = 0x00; OCR0 = 0x7C; / OCR0 = 0x7C(124),(124+1)/62.5=2ms TIMSK = 0x02; / 允许T/C0比较匹配中断 / OCR0 = 0x7C(124),(124+1)/62.5=2ms rtc_init(0,0,0); /ds1302初始化 rtc_set_date(31,12,9); rtc_set_time(23,59,55); lcd_init(16); / initialize the LCD for 2 lines & 16 columns lcd_clear();

15、 / clere the LCD #asm(sei) / 开放全局中断 while (1) if (!time_display) / 0.1秒到 rtc_get_date(&time3,&time4,&time5); r=time3;y=time4;n=time5; rtc_get_time(&time0,&time1,&time2); h=time0;m=time1;s=time2; if (time1 = 0& time2=0)baoshi =1; lcd_gotoxy(0,0); sprintf(lcd_buffer,%4d/%2d/%2d,n+add,y,r);/%X以16进制输出 l

16、cd_puts(lcd_buffer);/如果不是以16进制,则show ASC-II on 1602 else%2d:%2d ,h,m,s); if (baoshi) /蜂鸣器响 baoshi =0; TCCR1A = 0x40; TCCR1B = 0x09; OCR1A = 500; delay_ms(100); OCR1A = 0; delay_ms(10); if(change&!time_display) switch(change) case 1 :lcd_gotoxy(0,0); /%2d/%2d,y,r);/如果不是以16进制,则show ASC-II on 1602 while(time_1s_ok); break; case 2 : lcd_gotoxy(0,0);%4d/ /%2d,n+add,r); case 3 :%4d/%2d/ ,n+add,y); if(change & time_display) switch(change) case 1 : :,m,s); case 2 :,h,s); lcd_puts(l

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

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