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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字时钟 单片机课程设计桂电.docx

1、数字时钟 单片机课程设计桂电单片机原理课程设计报告题 目: 电子日历时钟院 系: 计算机科学与工程学院专 业: 计算机科学与技术指导教师: 俸 皓 2014年5月3号目 录1课程设计的内容与要求 12 数字时钟的基本原理 13 开发环境及芯片绍 34 总体设计 45 Proteus 仿真结果 86 课程设计心得体会 97 参考文献 108 附录 11摘 要随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断的走向深入,由于它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点,加上单片机具有集成度高、处理功能强、可靠性高、性能稳定等优点,在工业控制、智能仪器仪表、办

2、公自动化、家用电器等诸多领域得到广泛的普及和应用。 本文基于51单片机的数字钟是实现时间和日期的显示的计时装置。从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89s51、时钟电路DS1302、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。数字钟的精度、稳定度远远超过老式机械钟。与传统机械钟相比,它具有走时准确、显示直观无机械传动装置等优点。它以其小巧,价格低廉,走时精度高,使用方便,便于集成化而受到了人们的欢迎并很快走进了千家万户。此次课程设计,数字钟具有显示时间、日期和闹铃功能,并对其可以进行设置,能对闰年进行判别。关键字:数

3、字电子钟 单片机一 :课程设计的内容与要求 1 课程设计内容本次课程设计要求设计一个电子日历时钟系统,主要功能为实时时间和日期的显示和调节控制,以AT89S51单片机为核心芯片,通过DS1302时钟芯片的功能扩展,在共阴极LED数码管上或LM1602液晶显示屏上显示出来。该系统应包含以下几个方面的内容设计单片机最小系统(包括复位按钮、晶振电路等); DS1302时钟芯片的控制设计。 时间调节按键的电路设计。 绘制实现本设计内容的硬件电路(原理图),系统的组成框图。 相应的控制状态表; 编写本课程设计内容的软件设计(包含程序流程图和对程序注释)。 硬件实验部分可选用实验箱测试或Proteus仿真

4、软件实现。2 课程设计要求1.八位数码管动态显示;2.实现年、月、日、时、分、秒3.能交替显示时间和日期或自定义选择显示4.时间和日期都可以设定和调整5.实现闹铃设置和闹铃功能6闪烁显示所选择所要调整的位7具备闰年的判别。8.设置时间和日期时,动态扫描不受到影响。 9.只采用3个独立按键实现所有功能二:数字钟的基本原理本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。本系统采用单片机AT89C51作为本设计的核心元件,利用7段共阳LED作为显示器件。接入阳LED显示器,可显示年,月,日,时,分钟,秒,计时方式是24小时制

5、,P0口接数码管的段码位接口,P2看接数码管的位码接口,KEY1(位选按键)接P2.5口,KEY2(调整按键加键)接到P2.6口,KEY3(调整按键减键)接P2.7口。秒信号提供采用对定时器工作方式1,在计数溢出时计时20ms,再对其累加50次达到1s的时间,并以此作为秒信号提供。单片机外围接有定时嘀嘀系统,定时时间到,扬声器发出嘀嘀声,提示预先设定时间电器的起停时间到,从而控制电器的起停。电路由下列部分组成:时钟电路、复位电路、控制电路、LED显示,闹铃电路,芯片选用AT89C51单片机。 软件设计闰年算法流程图如图4:图4闰年算法流程图能被4整除的且不能被100整除的年份为闰年。或则能被4

6、整除能被100整除且能被400整除的年份为闰年。 三:开发环境及芯片介绍1. keil软件介绍Keil uVision2是德国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,Keil C51生成的目标代码效率非常高,使用传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,

7、 使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keil c51来开发您的单片机应用程序 。2. Proteus软件介绍Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真

8、单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,

9、它也支持IAR、Keil和MPLAB等多种编译器。3.芯片AT89C51介绍AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。AT89C51是一个低电压,高性能CMOS型8位单片机,片内含4KB的可反复擦写的Flash只读程序存储器(ROM)和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存

10、储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。四 :总体设计1总体设计思想 正常情况下运行主程序,定时读取时钟芯片的实时时间,先读年、月、日,再读时、分、秒; 时间调节可用1按键依次切换选择年、月、日、时、分、秒,相应位闪烁,另1按键每次加1 调节当前的时间设置。 按键控制建议采用外部中断执行中断服务子程序,设置相应的时间调节子程序。2. 调时间按键设计采用51单片机系列AT89S51.对时钟进行控制,单片机只需要和适当的软件及外部设备相结合,便可成为一

11、个单片机控制系统。(1开机时,获取系统当前时间开始计时;(2P2.7控制调整键,每按一次对应位减1; (3P2.6控制位选键,每按一次对应位加1; (4P2.5控制切换键,每按一次在时间、日期、闹钟间切换; 3.具体的设计模块3.1主控制模块AT89S51系列单片机中有PDIP,PLCC,TQFP多种封装形式。本设计采用的是PDIP封装40管脚的单片机3.2 复位电路模块复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路

12、才能实现。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开 关或电源插头分-合过程中引起的抖动而影响复位。3.3 晶振电路模块晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。3.4 DS1302时钟模块X1 和X2 是振荡源,外接32.768kHz 晶振。RST 是复位/片选线,通过把RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多

13、字节数据的传送手段。数据输入输出(I/O)在控制指令字输入后的下一个SCLK 时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0 开始。同样,在紧跟8 位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302 的数据,读出数据时从低位0 位到高位7。3.5 按键调节电路模块本设计总的用了三个按扭开关作为键盘,其中两个是调整时间增加、减少的键,第三个是切换年、月、日及时、分、秒的显示状态并在所切换的显示状态下配合加减两个键调整时间。 3.6 闹钟模块 当到达时间时,喇叭得电发出嘀嘀声,扬声器发出嘀嘀声,且扬声器两端同时变为高电平。3.7显示模块LCM1602采用标准的16脚接口,

14、其中: 第1脚:VSS为地电源 第2脚:VDD接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RSRW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可读忙信号,当RS为高电平RW为低电平时可以写入数据.第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:D0D7为8位双向数据线。 第

15、1516脚:空脚。4 总设计原理图五:Proteus 仿真结果1 仿真步骤第一步:用keil软件对程序进行编译,编译通过后,会自动生成HEX文件。第二步:在Proteus的元件库中找到AT89C51以及相应的元件,按照硬件设计中的说明把各部件连接起来组成一个定时闹钟的硬件系统。第三步:把在keil环境调试下生成的.HEX文件装入到AT89C51里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。第四步:验证系统能否实现所要求的功能,并检验错误。2 仿真结果当点击key1时,会有光标在各个选项间跳转,出现一闪一闪的光标,按下key2和key3即可进行加和减的相当调节,使用非

16、常方便快捷。六:课程设计心得体会经过几个周的努力,自己设计的电子时钟终于成功运行了,虽然还有些功能不够完善,界面和操作也不是很人性化,但还是很开心。虽然在做课程设计以前已经系统的把单片机课本认真的学习了一下,但是在刚开始时还是有点一头雾水,不知道该从哪里下手。令人庆幸的是经过几周的学习,虽然过程很艰辛,问了很多朋友,但是总算实现了定时闹钟的功能,所有的努力都很值得。这几周的大部分时间都在研究程序怎么处理,在这个过程中加深了我对编程语言的应用,而且也更加了解到软硬件配套的重要性。单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环

17、节,是对我们实际工作能力的具体训练和考察过程,为自己今后从事与单片机控制系统有关的工作打下了基础。通过此次课程设计,使我更进一步地熟悉了芯片的结构,掌握了芯片工作原理和其具体的使用方法。通过编写程序,让我感觉到C语言便捷和强大。此次电路以AT89S51为核心控制部件,以数码管为显示模块,以石英晶振为计时部件。在Protues仿真中,没有得到解决的是闹铃的问题。除此之外,能完成实训要求的基本和发挥部分的功能,用3个按键实现了设计要求的几乎所有功能。经过本次课程设计,使我明白了一个道理,在做设计软件程序时,要有一个清晰的思路和一个完整的软件流程图。模块化的设计思想在程序设计中的作用是十分大的,它可

18、以为你提供一个比较清晰的思路,并且很容易找到头绪,不至于在设想一个程序时感觉到无从下手。要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。刚开始我在编写程序时,很不习惯于写注释,感觉很麻烦,而且没用,但是在修改的过程中我就遇到了较大的麻烦,以至于不得不重新的作了注释,以增加程序的易读性,从而使修改过程变得容易一些。 总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写设计报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,看到自己几周的小成果,感觉一切的辛苦和艰难

19、都是值得的。七:参考文献1马淑华.单片机原理与接口技术.:北京邮电大学出版社,2007.2阎石.数字电子技术基础:高等教育出版社,19893余发山.单片机原理及应用技术: 中国矿业大学出版社. 20034楼然苗.51系列单片机设计实例: 北京航空航天出版社,20045黄仁欣.单片机原理及应用技术: 清华大学出版社, 20056何立民. 单片机高级教程北京:北京航空航天大学出版社,2001八:附录#include#define uint unsigned int#define uchar unsigned charuchar a,sec,hour,min,day,moon,year,week,f

20、lag,key1n,ZJL;#define yh 0x80 #define er 0x80+0x40 sbit rs=P35;sbit en=P37;sbit rw=P36; sbit IO=P22;sbit SCLK=P21;sbit RST=P20;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit key1=P25; /设置键sbit key2=P26; /加键sbit key3=P27; /减键uchar code tab1=20 - - ; uchar code tab2= : : ;void delay(uint xms)/延时函数,有参函数 uint x,y;

21、for(x=xms;x0;x-) for(y=110;y0;y-);write_1602com(uchar com)/液晶写入指令函数 rs=0; rw=0; P1=com; delay(1); en=1; delay(1); en=0;write_1602dat(uchar dat)/液晶写入数据函数 rs=1; rw=0; P1=dat; delay(1); en=1; delay(1); en=0; lcd_init() /晶初始化函数 write_1602com(0x38); write_1602com(0x0c); write_1602com(0x06); write_1602com

22、(0x01); write_1602com(yh+1); for(a=0;a14;a+) write_1602dat(tab1a); write_1602com(er+2); for(a=0;a0;a-) IO=ACC0; SCLK=0; SCLK=1; ACC=ACC1; uchar read_byte() /读 RST=1; for(a=8;a0;a-) ACC7=IO; SCLK=1; SCLK=0; ACC=ACC1; return (ACC);void write_1302(uchar add,uchar dat) /向1302芯片写函数 RST=0; SCLK=0; RST=1;

23、write_byte(add); write_byte(dat); SCLK=1; RST=0;uchar read_1302(uchar add) /从1302读数据函数 uchar ZJL; RST=0; SCLK=0; RST=1; write_byte(add); ZJL=read_byte(); SCLK=1; RST=0; return(ZJL);uchar BCD_Decimal(uchar bcd) /BCD码转十进制函数 uchar Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);/-void ds13

24、02_init() /初始化RST=0;SCLK=0;write_1302(0x8e,0x00); write_1302(0x8e,0x80); void write_sfm(uchar add,uchar dat) / /向LCD写时分秒 uchar gw,sw; gw=dat%10; sw=dat/10; write_1602com(er+add); write_1602dat(0x30+sw); write_1602dat(0x30+gw); void write_nyr(uchar add,uchar dat) / /向LCD写年月日 uchar gw,sw; gw=dat%10; s

25、w=dat/10; write_1602com(yh+add); write_1602dat(0x30+sw); write_1602dat(0x30+gw); void write_week(uchar week)/写星期函数 write_1602com(yh+0x0c); switch(week) case 1:write_1602dat(M); write_1602dat(O); write_1602dat(N); break; case 2:write_1602dat(T); write_1602dat(U); write_1602dat(E); break; case 3:write

26、_1602dat(W); write_1602dat(E); write_1602dat(D); break; case 4:write_1602dat(T); write_1602dat(H); write_1602dat(U); break; case 5:write_1602dat(F); write_1602dat(R); write_1602dat(I); break; case 6:write_1602dat(S); write_1602dat(T); write_1602dat(A); break; case 7:write_1602dat(S); write_1602dat(U

27、); write_1602dat(N); break;void keyscan() /键盘扫描函数 if(key1=0)/ delay(9); if(key1=0) delay(20); while(!key1); key1n+; if(key1n=9) key1n=1; switch(key1n) /key1选取功能键 case 1: TR0=0; write_1602com(er+0x09); write_1602com(0x0f); ZJL=(sec)/10*16+(sec)%10; write_1302(0x8e,0x00); write_1302(0x80,0x80|ZJL); wr

28、ite_1302(0x8e,0x80); break; case 2: write_1602com(er+6); write_1602com(0x0f); break; case 3: write_1602com(er+3); write_1602com(0x0f); break; case 4: write_1602com(yh+0x0e); break; case 5: write_1602com(yh+0x0a); break; case 6: write_1602com(yh+0x07); break; case 7: write_1602com(yh+0x04); break; case 8: write_1602com(0x0c); TR0=1; ZJL=(sec)/10*16+(sec)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|ZJL); write_1302(0x8e,0x80); break; if(key1n!=0)/ if(key2=0) delay(10); if(key2=0) delay(20); while(!key2); /key2加1 功能键 switch(key1n) case 1:sec+; if(sec=60) sec=0; write_sfm(0x08,sec); ZJL=(se

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

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