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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

课程设计基于单片机和ds1302的时钟设计大学论文.docx

1、课程设计基于单片机和ds1302的时钟设计大学论文微机与单片机综合课程设计说明书课题名称: 基于单片机和DS1302的时钟设计 学 号: 班 级: 13级过程自动化3班 姓 名: 成 绩: 指导教师: 课题工作时间: 2016-1-4 至 2016-1-15 武汉工程大学电气信息学院一、课程设计任务和基本要求: (一) 设计任务利用单片机和DS1302时钟芯片设计一个简易时钟,完成对时钟芯片的读写编程,将读到的时间在数码管显示出来。(二) 基本要求通过本系统的设计,了解DS1302时钟芯片和数码管显示的工作原理并掌握其编程方法;进一步熟悉单片机系统设计方法二、指定参考书:1. 徐爱钧,徐阳 编

2、著。单片机原理与应用基于Proteus虚拟仿真技术(第2版),机械工业出版社。2014年7月 2. 赵广元 编著。proteus辅助的单片机原理实践基础设计、课程设计、毕业设计,北京航空航天大学出版社。2013年9月答辩记录:答辩意见及答辩成绩答辩教师(签字): 20 年 月 日 目录1.系统分析 1.1 ds1302芯片.6 1.1.1 引脚图及寄存器.6 1.1.2 读写时序说明.8 1.1.3 内部电路图.9 1.2 数码管显示原理.102.程序设计 2.1 总体设计.11 2.2 分块程序设计.12 2.2.1 ds1302初始化模块.13 2.2.2 数码管显示模块.16 2.2.3

3、 主函数模块. 17 3.proteus仿真 3.1 电路图的搭建.18 3.1.1元件库的选择.18 3.1.2 元件的布局.19 3.2 仿真运行.21 3.2.1 keil软件的使用.21 3.2.2 proteus运行效果图.23 4.总结.24 参考资料.24附录一 源程序清单.25附录二 电路原理图.30 1.系统分析1.1 DS1302时钟芯片DS1302时钟芯片, 该芯片是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日

4、、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达4.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。 DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 1.1.1 引脚图及寄存器 内部电路: 各引脚的功能为:Vcc1:主电源;Vcc2:备份电源。当 Vcc2Vcc1+0.2V 时, 由 Vcc2向 DS1302供电,当 Vcc20; i- ) /循环8次移位 SCLK = 0; temp = dat; DIO = (

5、bit)(temp&0x01); /每次传输低字节 dat = 1; /右移一位 SCLK = 1; 分析: 针对本课题的要求,写字节函数的作用是对1302进行初始化。2) 读字节函数: 将ds1302 I/O口的数据传给ACC寄存器的最高位,利用循环语句移位,依次将8位传递到ACC寄存器,此函数返回值ACC。 / DS1302读字节函数uchar DS1302ReadByte() uchar i,dat1,dat2; CE = 1; for (i=8; i0; i-) ACC_7 = DIO; SCLK = 1; ACC = 1; SCLK = 0; CE=0; dat1=ACC; dat2

6、=dat1/16; /数据进制转换,十六进制转换成十进制 dat1=dat1%16; dat1=dat2*10+dat1; return dat1; 分析: 读字节函数是将ds1302芯片中的时钟信号传给单片机的主要部分。3) 地址和数据发送函数: 先写地址addr,再给数据。先将要读出的时间信号的地址告诉ds1302,单片机再将数据传到I/O口。 / 地址、数据发送函数 void DS1302WriteCmd (uchar addr,uchar dat) DS1302WriteByte(addr); /发送地址 DS1302WriteByte(dat); /发送数据 分析:此函数可以在本程序

7、中实现对ds1302芯片的初始化。4) 数据读取函数: 先写地址,再返回数据。 / 数据读取函数 uchar DS1302ReadCmd (uchar addr) /数据读取子程序 DS1302WriteByte(addr); /发送地址 return (DS1302ReadByte(); /接收数据 5) 初始化时间: 先禁止写保护,再初始化时间,最后开启写保护。 / DS1302初始化函数void DS1302Init(void) /初始化DS1302 DS1302WriteCmd (0x8E,0x00); /禁止写保护 DS1302WriteCmd (0x80,0x00); /秒位初始化

8、 DS1302WriteCmd (0x82,0x00); /分钟初始化 DS1302WriteCmd (0x84,0x20); /小时初始化 DS1302WriteCmd (0x86,0x01); /日初始化 DS1302WriteCmd (0x88,0x01); /月初始化 DS1302WriteCmd (0x8c,0x12); /年初始化 DS1302WriteCmd (0x8E,0x80); /允许写保护分析:此函数的初始化值可由使用者自己设定。 2.2.2 数码管显示模块。 此函数作用是将单片机中ACC寄存器中时间数据值显示到七段数码管中。其中,P3端口接受位选信号,P2端口接受段选信

9、号。/ 数码管显示函数void LEDDisplay() uchar i; DisplayBuf7 = TimeBuf2%10; DisplayBuf6 = TimeBuf2/10; DisplayBuf4 = TimeBuf1%10; DisplayBuf3 = TimeBuf1/10; DisplayBuf1 = TimeBuf0%10; DisplayBuf0 = TimeBuf0/10; for(i = 0 ; i 8; i+) /数码管动态显示 P3 = Segi; P2 = tableDisplayBufi; delay(1); /延时1ms让数码管正常显示出来 2.2.3 主函数

10、模块。 TimBuf数组变量存储从ds1302中读取的数据。 / 主函数void main() DS1302Init(); while(1) TimeBuf2=DS1302ReadCmd(0x81); /0x81,0x83,0x85分别为秒,分,时读地址位 TimeBuf1=DS1302ReadCmd(0x83); TimeBuf0=DS1302ReadCmd(0x85);/ TimeBuf2=DS1302ReadCmd(0x87); /0x87,0x89,0x8b分别为年,月,日读地址位/ TimeBuf1=DS1302ReadCmd(0x89);/ TimeBuf0=DS1302ReadC

11、md(0x8d); LEDDisplay(); 3 Proteus仿真 3.1电路图搭建 3.1.1元件库的选择 由图上的操作后元件库如下: 3.1.2元件的布局: ds1302与C51的连接: 注:DIO接单片机P1.0口 SCLK接单片机P1.1口 RST接单片机P1.2口 数码管与C51的连接: 位选接P3口,段选接P2口。 注:当proteus 原理图十分复杂且连线操作困难时,可以用Lab命令标记,这样可以减少连线的数量从而使原理图更简洁直观。具体操作如下: 第一步 “Lab”键 第二步: 点击需要标号的引脚,改成对应的编号 注意: 相连的引脚标号一定要一致,否则会导致错连进而影响电路

12、图的正确性。3.2 仿真运行: 3.2.1 keil软件的使用 本课设借助keil编译环境实现软件驱动:先建工程再建文件 3.2.2 proteus仿真效果4 总结 本次单片机机课程设计的选题不仅仅完成了对C51编程、protues软件的学习,同时对于单片机硬件的了解掌握更加完善,在硬件电路搭配过程中更是提高了动手能力以及加深模拟电路理论知识的理解。在完成本次课程设计的过程中,开拓了视野,获得了到以前上课所不能学到的知识和经验,会为以后的课程学习带来很大的帮助。 参考书 1. 徐爱钧,徐阳 编著。单片机原理与应用基于Proteus虚拟仿真技术(第2版),机械工业出版社。2014年7月 2. 赵

13、广元 编著。proteus辅助的单片机原理实践基础设计、课程设计、毕业设计,北京航空航天大学出版社。2013年9月附录一:完整的源程序代码 #include#define uchar unsigned char#define uint unsigned intUchar code table=0x3F,0X30,0X5b,0X4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/共阴数码管0-9,灭,-编码uchar code Seg=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87;/位选编码uchar data Display

14、Buf=0,0,11,0,0,11,0,0;/时分秒显示缓冲区uchar data TimeBuf=0,0,0;/时分秒值sbit ACC_7 = ACC7; /位寻址寄存器定义sbit SCLK = P11; / DS1302时钟信号 7脚sbit DIO= P10; / DS1302数据信号 6脚sbit CE = P12; / DS1302片选 5脚/ 延时函数void delay(uint i) uint j; for(i; i 0; i-) for(j = 110; j 0; j-);/ DS1302写字节函数void DS1302WriteByte(uchar dat) uchar

15、 i = 0,temp = 0; CE = 0; /CE引脚为低,数据传送中止 SCLK = 0; /清零时钟总线 CE = 1; /CE引脚为高,逻辑控制有效 for (i=8; i0; i- ) /循环8次移位 SCLK = 0; temp = dat; DIO = (bit)(temp&0x01); /每次传输低字节 dat = 1; /右移一位 SCLK = 1; / DS1302读字节函数uchar DS1302ReadByte() uchar i,dat1,dat2; CE = 1; for (i=8; i0; i-) ACC_7 = DIO; SCLK = 1; ACC = 1;

16、 SCLK = 0; CE=0; dat1=ACC; dat2=dat1/16; /数据进制转换,十六进制转换成十进制 dat1=dat1%16; dat1=dat2*10+dat1; return dat1; / 地址、数据发送函数void DS1302WriteCmd (uchar addr,uchar dat) DS1302WriteByte(addr); /发送地址 DS1302WriteByte(dat); /发送数据/ 数据读取函数uchar DS1302ReadCmd (uchar addr) /数据读取子程序 DS1302WriteByte(addr); /发送地址 retur

17、n (DS1302ReadByte(); /接收数据/ DS1302初始化函数void DS1302Init(void) /初始化DS1302 DS1302WriteCmd (0x8E,0x00); /禁止写保护 DS1302WriteCmd (0x80,0x00); /秒位初始化 DS1302WriteCmd (0x82,0x00); /分钟初始化 DS1302WriteCmd (0x84,0x20); /小时初始化 DS1302WriteCmd (0x86,0x01); /日初始化 DS1302WriteCmd (0x88,0x01); /月初始化 DS1302WriteCmd (0x8c

18、,0x12); /年初始化 DS1302WriteCmd (0x8E,0x80); /允许写保护/ 数码管显示函数void LEDDisplay() uchar i; DisplayBuf7 = TimeBuf2%10; DisplayBuf6 = TimeBuf2/10; DisplayBuf4 = TimeBuf1%10; DisplayBuf3 = TimeBuf1/10; DisplayBuf1 = TimeBuf0%10; DisplayBuf0 = TimeBuf0/10; for(i = 0 ; i 8; i+) /数码管动态显示 P3 = Segi; P2 = tableDisplayBufi; delay(1); /延时1ms让数码管正常显示出来 / 主函数void main() DS1302Init(); while(1) TimeBuf2=DS1302ReadCmd(0x81); /0x81,0x83,0x85分别为秒,分,时读地址位 TimeBuf1=DS1302ReadCmd(0x83); TimeBu

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

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