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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

ds1032时钟.docx

1、ds1032时钟一 STC89C52单片机/摘抄于网络 STC89C52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。 主要特性如下: 增强型8051单片机,6时钟、机器周期和12时钟、机器周期可以任意选择,指令代码完全兼容传统8051单片机。 工作电压:5.5V3.3V 工作频率范围:044MHz。 用户应用程序空间为8K字节 片上集成512字节RAM 通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/

2、O口用时,需加上拉电阻。 ISP(在系统可编程)/IAP(再应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。 具有EEPROM功能 具有看门狗功能 共3个16位定时器/计数器。及定时器T0、T1、T2 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒 通用异步串行口(UART),还可用定时器实现多个UART 工作温度范围:-40+85度(工业级)/075度(商业级) PDIP封装图1-1 引脚图(1) STC89C52单片机资源表一 STC89C52主要功能主

3、要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能(2)复位信号及其产生RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用颇率为12MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。复位电路如图所示图1-2 复位电路(4)时钟电路STC89C52内部有一个用于构成振荡器的高增益反相放大

4、器, 引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.212MHz之间选择,电容值在530pF之间选择,电容值的大小可对频率起微调的作用。图1-3 内部时钟方式电路二MAX232/摘抄于网络芯片是专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。 图2-1 MAX232引脚图引脚介绍: 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12

5、v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道;8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道;TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VC

6、C(+5v)。 主要特点: 1、符合所有的RS-232C技术标准 2、只需要单一 +5V电源供电 3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V- 4、功耗低,典型供电电流5mA 5、内部集成2个RS-232C驱动器 6、内部集成两个RS-232C接收器下图为MX232双串口的连接图,可以分别接单片机的串行通信口或者实验板的其它串行通信接口,保证了能正常的下载调试程序,设计单片机与PC间通信接口电路7、程序下载口芯片及电路:STC89C52单片机支持SPI技术,可以通过3根线进行在线下载。MAX232是下载口电路的核心芯片,它完成计算机与单片机电平一致的转换。

7、其电路如图所示:图2-2 程序下载口电路三时钟电路DS1302/摘抄与网络31 DS1302控制字的介绍表3-1 DS1302控制字的介绍765432101RAM/A4A3A2A1A0RD/ 控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。 位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据: 位5至位1 (A4A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。读数据:读数据时在紧跟8位的控制宇指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据是从最低位到最高位。写数据:控制字总是

8、从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入也是从最低位(0位)开始。 位0(最低有效位):为1表示进行读操作。如为0,表示要进行写操作,控制字后SCLK下降沿读数据SCLK上升沿写数据。32 DS1302的数据输入和输出控制(1)复位以及时钟控制: 所有的数据传输在R5T置一时进行(反复强调),RST输入信号有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终

9、止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc=2. 5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。(2)数据输入: 经过8个时钟周期的控制字节的输入,一个字节的输入将在下8个时钟周期的上升沿完成,数据传输从字节最低位开始。(3)数据输出:经过8个时钟周期的控制读指令的输入,控制指令串行输入后,一个字节的数据将在下个8个时钟周期的下降沿被输出,注意第一位输出是在最后一位控制指令所在脉冲的下降沿被输出,要求RST保持位高电平。33 DS1302单字节读写时序介绍 图3-1 DS

10、1302单字节读写时序介绍DS1302的数据读写是通过I/O串行进行的。当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS 1302是读还是写操作,是对RAM还是对CLOK寄存器操作,以及操作的址。第二个字节就是要读或写的数据了。我们先看单字节写:在进行操作之前先得将CE(也可说是RST)置高电平,然后单片机将控制字的位0放到I/O上,当I/O的数据稳定后,将SCLK置高电平,DS130检测到SCLK的上升沿后就将I/O上的数据读取,然后单片机将SCLK置为低电平,再将控制字的位1放到I/D上,如此反复,将一个字节控制字的8个位传给DS1302。接下来就是传一

11、个字节的数据给DS1302,当传完数据后,单片机将CE置为低电平,操作结束。 单字节读操作的一开始写控制字的过程和上面的单字节写操作是一样,但是单字节读操作在写控制字的最后一个位,SCLK还在高电平时,DS1302就将数据放到I/O上,单片机将SCLK置为低电平后数据锁存,单机机就可以读取I/O上的数据。如此反复,将一个字节的数据读入单片机。读与写操作的不同就在一于,写操作是在SCLK低电平时单片机将数据放到IO上,当SCLK上升沿时,DS1302读取。而读操作是在SCLK高电平时DS1302放数据到IO上,将SCLI置为低电平后,单片机就可从IO上读取数据。34 DS1302操作指令介绍表3

12、-2 DS1302操作指令介绍寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器80H81H0059CH10SECSEC分寄存器82H83H0059010MINMIN时寄存器84H85H0112或002312/010HRHR日寄存器86H87H0128,29,30, 310010 DATEDATE月寄存器88H89H011200010MMONTMONTHH周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910YEARYEAR操作说明:(1)首先要通过8EH将写保护去掉,将日期,时间的初值写时各个寄存器。(2)然后就可以对80H, 82H. 84H, 86H

13、, 88H. 8AH, 8CH进行初值的写入。同时也通过秒寄存器将位7的CH值改成0,这样DS1302就开始走时运了。(3)将写保护寄存器再写为80H,防止误改写寄存器的值。(4)不断读取80H一8CH的值,将它们格式化后显示到1602LCD液晶上四1602液晶/51单片机C语言教程摘抄本实验使用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符库,只有并行接口,无串行接口。41接口信号说明 表4-1 引脚说明编号符号引脚说明编号符号引脚说明1Vss电源地9D2数据口2VDD电源正极10D3数据口3VO液晶显示对比度调节端11D4

14、数据口4RS数据/命令选择端(H/L)12D5数据口5R/读写选择端(H/L)13D6数据口6E使能信号14D7数据口7D0数据口15BLA背光电源正极8DI数据口16BLK背光电源负极4.2主要技术参数表4-2 1602液晶主要技术参数显示容量162个字符芯片工作电压4.55.5V工作电流2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.954.35(WH)mm4.3基本操作时序读状态 输入:RS=L,R/=H,E=H 输出:D0D7=状态字。读数据 输入:RS=H,R/=H,E=H 输出:无。写指令 输入:RS=L,R/=L,:D0D7=指令码,E=高脉冲输出:D0D7=数据。写数

15、据 输入:RS=H,R/=L,:D0D7=数据,E=高脉冲输出:无。4.4状态字说明表4-3 状态字说明ST7D7ST6D6ST5D5ST4D4ST3D3ST2D2ST1D1ST0D0STA0STA6当前地址指针的数值STA7读/写操作使能1禁止;0允许注意:原则上每次对控制器进行读/写操作之前,都必须进行读/写检测,确保STA7为0。实际上,由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不进行读/写检测,或只进行简短的延时即可。 4.5 数据指针设置控制器内部设有一个数据地址指针,可以通过它们访问内部的全部80B的RAM,如表所示表4-4 数据指针设置指令码功能80H+地址码(027

16、H,4067H)设置数据地址指针4.6 其他设置表4-5 其他设置指令码功能01H显示清屏:1.数据指针清0 2.所有显示清002H显示回车:数据指针清04.7 初始化设置(1) 显示模式设置表4-6 显示模式设置指令码功能00111000设置162显示,57点阵,8位数据接口(2) 显示开/关及光标设置表4-7 显示开/关及光标设置指令码功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示000001NSN=1当读或写一个字符后地址指针加1,且光标加1N=0当读或写一个字符后地址指针减1,且光标减1S=1当写一个字符时,整屏显示左移(

17、N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果S=0当写一个字符时,整屏显示不移动00010000光标左移00010100光标右移00011000整屏左移,同时光标跟随移动00011100整屏右移,同时光标跟随移动4.8 写操作时序分析时序图可知操作1602液晶的流程如下:(1) 通过RS确定是写数据还是写命令。写命令包括使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据是指要显示什么内容。(2) 读/写控制端设置为写模式,即低电平。(3) 将数据或命令送达数据线上。(4) 给E一个高脉冲将数据送入液晶控制器,完成写操作。总结:通过以上材

18、料的总结我们便可以做出由DS1302时钟芯片及LCD1602液晶还有STC89C52单片机和MAX232芯片组成的万年历。具体电路连线图如下程序如下:#include#include#define uchar unsigned char/=sbit RS=P23; /片选信号 读写期间必须是高sbit sclk=P24;/时钟信号 sbit IO=P25; /数据信号 双向sbit LCD_EA=P22; /1602使能信号sbit R_W=P21; /1602读写控制信号sbit R_S=P20; /1602数据读写信号/sbit P3_7=P20;sbit date=P00;/=uchar

19、 table=00:00:00;uchar tab14=2000-00-00;uchar week13=Mon;uchar week23=Tue;uchar week33=Wed;uchar week43=Thu;uchar week53=Fri;uchar week63=Sat;uchar week73=Sun;/uchar week2;/=延时程序=void delay( int n ) uchar x,m; for(x=0;xn;x+) for(m=0;mn;m+);/=LCD写控制命令=void read_command(uchar a) R_S=0; R_W=0;/ LCD_EA=0

20、; P0=a; delay(10); LCD_EA=1; delay(10); LCD_EA=0;/=LCD写数据=void read_data(uchar b) R_S=1; R_W=0; P0=b; delay(5); LCD_EA=1; delay(5); LCD_EA=0;/=LCD初始化=void chu_shi_hua() P0=0; LCD_EA=0; read_command(0x38);/功能设置命令。4位总线;双行显示5x7的点阵 字符。 read_command(0x0c);/显示开关控制,开显示、无光标、不闪烁 read_command(0x06);/光标和显示模式设置

21、,光标右移,屏幕上所有文字不移动。 read_command(0x01);/清LCD/ read_command(0x02); delay(20);/=往DS1302中写一字节数据=void write_ds1302(uchar byte) uchar i; sclk=0; delay(1); for(i=0;i=1; /=从ds1302中读一字节数据=uchar read_ds1302(void) uchar i; uchar back_data=0; delay(2); for(i=0;i=1; if(IO=1) back_data|=0x80; sclk=1; delay(1); scl

22、k=0; delay(1); return(back_data);/=向某一地址写一字节数据=void write_byte(uchar adrss,uchar date) RS=0; delay(1 ); sclk=0; delay(1); RS=1; delay(1); write_ds1302(adrss); write_ds1302(date); sclk=0; delay(1); RS=0; delay(1); /=从某一地址读一字节数据=uchar read_byte(uchar adrss) uchar dater; RS=0; /delay(1); _nop_(); sclk=

23、0; /delay(1); _nop_(); RS=1; delay(1); write_ds1302(adrss); dater=read_ds1302(); RS=0; delay(1); _nop_(); sclk=0; RS=0; /delay(1); _nop_(); return(dater);/=ds 1302初始化=void initial_ds1302(void) write_byte(0x8e,0x00);/写保护。写操作时必须0 write_byte(0x80,(00/10)4)|(00%10);/写秒初值 write_byte(0x82,(22/10)4)|(22%10

24、);/写分初值 write_byte(0x84,(7/10)4)|(7%10);/写小时初值 write_byte(0x86,(11/10)4)|(11%10);/写日初值 write_byte(0x88,(7/10)4)|(7%10);/写月初值 write_byte(0x8a,(4/10)4)|(4%10);/写周初值 write_byte(0x8c,(10/10)4)*10)+(read_byte(0x8d)&0x0f);/读年寄存器 tab2=nian/10+0; read_data(tab2); /向1602写年的十位 tab3=nian%10+0; read_data(tab3); /向1602写年的各位 read_data(tab4); yue=(read_byte(0x89)&0x70)4)*10)+(read_byte(0x89)&0x0f);/读月寄存器 tab5=yue/100+0; read_data(tab5); tab6=yue%10+0

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

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