欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于单片机的电子闹钟的设计.docx

    • 资源ID:12971091       资源大小:1.22MB        全文页数:34页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的电子闹钟的设计.docx

    1、基于单片机的电子闹钟的设计课程设计报告课程名称: 单片机课程设计 题 目: 多功能电子表 学 院: 环境与化学工程 系:过程装备与测控工程 专 业: 测控技术与仪器 班 级: 学 号: 学生姓名: 起讫日期: 2 指导教师: 摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种。本设计以AT89C52芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的闹钟,它由5V直流电源供电。在硬件方面,除了CPU外,使用1602液晶显示时钟的时间,并通过所写程序控制在某个时间点蜂鸣器的响应,即完成

    2、闹钟的功能,该闹钟设有4个独立按键,时间调整按键、闹钟调整按键和两个时间加减按键。软件方面采用C语言编程。整个闹钟系统能完成时间的显示、调时和定时闹钟的功能。选用单片机最小系统应用程序,添加比较程序、时间调整程序及蜂鸣程序,通过时间比较程序触发蜂鸣,实现闹钟功能,完成设计所需求的软件环境。介绍并使用KEIL单片机模拟调试软件,测试程序的可行性并用Proteus进行仿真。关键词:AT89C52单片机 定时器 中断 闹钟 一、设计任务、要求1.1、设计任务:利用单片机、4个独立按键、1602液晶显示器、无源蜂鸣器实现具有日期、时间、闹钟功能的多功能电子表。1.2、设计要求:1、准确计时,以数字形式

    3、显示年月、日、时、分、秒。2、小时以24小时计时形式,分秒计时为60进位,日期平年和闰年将自行更换。 3、采用4个独立按键对电子表进行控制,可进行闹钟设定、控制及时间日期的设定。4、闹钟功能,可任意设定闹钟时间,一旦走时到该时间,能以声的形式告警提示。5、复位电路采用按键复位电路。二、方案总体设计本次设计闹钟,使用了STC89C52单片机芯片控制电路,单片机控制电路简单,电路简明易懂,使用键盘键上的按键来调整电子表的月、日、时、分和闹钟的设定,用蜂鸣器来进行定时提醒,编程采用KEIL C,编程简单便捷且调试方便,这样通过四个模块:按键、芯片、蜂鸣器、1602液晶显示器即可满足设计要求。2.1、

    4、显示模块液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。2.2、实时时间计算模块AT89S52单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,使用12MHz的晶振就能实现高精度的计时,因此可以利用此功能实现计时。2.3、按键控制模块本设计用到的键盘有4个独立按键,分别为时间调整按键、闹钟调整按键和两个时间加减按键。以此控制时间的调整和闹钟时间的调整。

    5、2.4、声音报警模块此模块采用无源蜂鸣器实现,通过编写相应的程序,当满足要求时,给蜂鸣器提供不同频率的方波,使其发出不同频率的声音,把不同频率的声音按一定的时序输出,从而发出音乐。2.5、总体设计:总体框架如图2-1所示:图2-1 总体硬件框架图总体构思如图2-2所示:图2-2 总体构思框架图三、硬件设计3.1、单片机最小系统3.1.1、时钟信号的产生89C52芯片内部有一个高增益法相放大器,用于构成振荡器。反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自己振荡器,电路如图3-1所示。图3-1 晶振电路3.1.2、复位电路复位操作有上电自动复位和

    6、按键手动复位两种方式,本设计采用按键电平复位,结构如图3-2所示。图3-2 复位电路3.2、液晶显示模块3.2.1、1602液晶引脚图及连线电路图3-3 1602液晶显示器3.2.2、一般1602字符型液晶显示器实物图字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图3-4图3-4 1602液晶显示器实物图3.3、矩阵键盘本设计采用4个独立按键控制,按键的接口、序号及接线图如下图所示:图3-5 独立按键连线电路图

    7、3.4、蜂鸣器电路本课程设计使用的蜂鸣器是有源蜂鸣器,通过对给蜂鸣器一定频率的方波,驱动蜂鸣器蜂鸣器发出相应频率的声音,其中方波可对端口进行连续取反实现,取反频率由定时器控制,驱动电路如下图所示:图3-6 蜂鸣器连线电路图3.5、电源指示灯部分电源指示灯部分包括一个开关,发光二级管和限流电阻。当电源接通时发光二级管点亮,表明电路已上电。电源指示灯原理图如图3-7所示:图3-7 电源指示灯原理图3.6、STC89C52芯片STC89C52是一个低功耗,高性能CMOS8位单片机,片内含具有如下特点:40个引脚(引脚图如图1-1所示),4kBytesFlash片内程序存储器,128bytes的随机存

    8、取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDTC)电路,片内时钟振荡器。此外,STC89C52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。单片机引脚图如图3-8所示:图3-8 单片机引脚图3.7、整体电路原理图整体电路原理图如图3-9所

    9、示:图3-9 总体电路原理图3.8、Lockmaster硬件电路图3-10 硬件电路正面视图图3-11 硬件电路背面视图四、程序流程图程序主要流程如图4-1所示,时间、日期、闹钟设置部分流程如图4-2所示。图4-1 程序流程图图4-2 程序流程图时间、日期设置部分图4-3 程序流程图闹钟设置部分5、系统仿真与调试5.1、Proteus仿真原理图Proteus软件是英国electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试

    10、到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。它是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。以下是用Proteus仿真调试图:图5-1 日期时间显示图5-2 闹钟设置5.2、实物图图5-5 实物正面视图5.3、使用说明按键序号及对应具体功能为:按键1:时间与日期调整进入与退出键按键2:加一调整功能键按键3:减一调整功能键按键4:闹钟调整进入与退出键六、设计总结及心得体会单片机是我所学专业的主要课程之一,因此我认为单片机课程设计是十分必要而且十分重要的。尽管刚刚拿到课程设计题目时有点迷惘,不知道如何着手,但通过上网和图书

    11、馆查阅相关资料,自己认真钻研以及虚心询问同学,终于解决了一个又一个的困难和障碍,成功完成了任务。通过本次的单片机课程设计,不仅大大地丰富了我的理论知识,而且在实践过程中更令我学会了坚持、耐心和努力。此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览而过,不求甚解。在边学习边动手的过程中,我对电子时钟的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机汇编语言的认识。除此之外,由于是第一次做单片机,因此

    12、在此次课程设计的过程中,无论是电路绘制还是汇编语言编写都难免遇到了不少困难和障碍,例如汇编语言编写出错、电路元件无从入手等。在面对困难和障碍时,我庆幸自己没有退缩和逃避,而是通过各种方法,迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高。本次课程设计尽管时间不长,但从中所获,将令我受益终生附录:#inclu

    13、de#define uchar unsigned char#define uint unsigned intuchar code table= 2014-01-06 MON;uchar code table1= 01:00:00;uchar code table273= MON,TUE,WED,THU,FRI,SAT,SUN; /定义二维字符数组sbit RW=P26; sbit EN=P25; / 1602液晶使能端sbit RS=P27; / 1602液晶命令/数据端 sbit key1=P10; / 声明s1按键sbit key2=P11; / 声明s2按键sbit key3=P12;

    14、/ 声明s3按键sbit key4=P13; / 声明s4按键sbit beep=P37;uint a,s,spak,i,flag; / 声明蜂鸣器uchar num1,yue,ri,keynum1,week; /定义时分秒变量char shi=01,fen,miao,shi1,fen1,miao1;uint nian=2014; /定义年变量void delay(uint z) uint i,j; for(i=z;i0;i-) /定义带参数延时函数 for(j=100;j0;j-);void write_com(uchar com) /1602液晶写指令函数 RW=0; RS=0; P0=c

    15、om; delay(5); EN=1; delay(5); EN=0;void write_date(uchar date) /1602液晶写数据函数 RW=0; RS=1; P0=date; delay(5); EN=1; delay(5); EN=0; void write_addate1(uchar add,uint date) /定义显示年的函数 uint qian; uchar bai,shi,ge; qian=date/1000; bai=date%1000/100; shi=date%1000%100/10; ge=date%10; write_com(add+0x80); wr

    16、ite_date(0x30+qian); write_date(0x30+bai); write_date(0x30+shi); write_date(0x30+ge);void write_addate3(uchar add3,uint date3) /定义显示年的函数 uint qian; uchar bai,shi,ge; qian=date3/1000; bai=date3%1000/100; shi=date3%1000%100/10; ge=date3%10; write_com(add3+0x80); write_date(0x30+qian); write_date(0x30+

    17、bai); write_date(0x30+shi); write_date(0x30+ge);void write_addate2(uchar add,uchar date) /定义显示月、日、时、分、秒函数 uchar shi,ge; shi=date/10; ge=date%10; write_com(add+0x80); write_date(0x30+shi); write_date(0x30+ge);void write_rq(uchar i) /定义显示星期的函数 uchar x; for(x=0;x3;x+) write_date(table2ix); delay(5); vo

    18、id init () /定义初始化函数 beep=0; flag=1; yue=01; ri=06; TMOD=0x01; / 定时器0工作方式为16位 TH0=(65536-50000)/256; / 装初值 TL0=(65536-50000)%256; EA=1; / 开总中断 ET0=1; / 开定时器0中断 write_com(0x38); / 设置16*2显示,5*7点阵,8位数据口 write_com(0x06); / 写一个字符后地址指针加1 write_com(0x0c); / 设置开显示,不显示光标 write_com(0x01); / 显示清0,数据清0 write_com

    19、(0x80); / 使指针指向第1行第1列void keyscan() / 定义按键函数 uchar keynum; if(key1=0) /s1按键被按下 delay(3); /去抖延时 if(key1=0) /确认s1按键被按下,进入调时间模式 keynum+; while(!key1); /松手检测 if(keynum=1) /s1按下一次 TR0=0; /关闭定时器0 write_com(0x81); /指针指向第1行2列 write_com(0x0f); /开启光标显示,光标闪烁 if(keynum=2) write_com(0x86); /光标跳到月份 if(keynum=3) w

    20、rite_com(0x89); /光标跳到日 if(keynum=4) write_com(0x8c); /光标跳到星期 if(keynum=5) write_com(0x80+0x40+4); /光标跳到时 if(keynum=6) write_com(0x80+0x40+7); /光标跳到分 if(keynum=7) write_com(0x80+0x40+10); /光标跳到秒 if(keynum=8) keynum=0; /退出调时间模式 TR0=1; /开启定时器0 write_com(0x0c); /关闭光标显示 if(keynum) /当进入调时间模式时 if(key2=0) /

    21、s2按键按下 delay(5); /去抖延时 if(key2=0) if(keynum=1) nian+; /s2每按下一次年份加1 if(nian=10000) / 加满清0 nian=0; write_addate1(1,nian); / 显示年份 write_com(0x81); /写完数据指针指向年份原来位置 if(keynum=2) yue+; /s2每按下一次月份加1 if(yue=13) yue=0; /加满清0 write_addate2(6,yue); /显示月份 write_com(0x86); /写完数据指针指向月份原来位置 if(keynum=3) ri+; if(yu

    22、e=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) /1,3,5,7,8,10,12月有31天 if(ri=32) /加满还原 ri=1; if(yue=4|yue=6|yue=9|yue=11) /4,6,9,11月有30天 if(ri=31) ri=1; if(yue=2&(nian%4=0&nian%100!=0)|nian%400=0) /闰年2月有30天 if(ri=30) ri=1; if(yue=2&(nian%4!=0)|(nian%100=0&nian%400!=0) /非闰年2月有31天 if(ri=29) ri=1; write_adda

    23、te2(9,ri); /显示日 write_com(0x89); /写完数据指针指向日原来位置 if(keynum=4) week+; /s2每按下一次星期加1 if(week=7) /加满还原 week=0; write_rq(week); /显示星期 write_com(0x8c); /写完数据指针指向星期原来位置 if(keynum=5) shi+; /s2每按下一次时加1 if(shi=24) shi=0; /加满还原 write_addate2(0x44,shi); /显示时 write_com(0xc4); /写完数据指针指向时原来位置 if(keynum=6) fen+; /s2

    24、每按下一次分加1 if(fen=60) fen=0; /加满还原 write_addate2(0x47,fen); /显示分 write_com(0xc7); /写完数据指针指向分原来位置 if(keynum=7) miao+; /s2每按下一次秒加1 if(miao=60) miao=0; /加满还原 write_addate2(0x4a,miao); /显示秒 write_com(0xca); /写完数据指针指向秒原来位置 while(!key2); /松手检测 if(key3=0) delay(5); if(key3=0) /s3按下时减1 if(keynum=1) nian-; if(

    25、nian=-1) nian=9999; write_addate1(1,nian); write_com(0x81); if(keynum=2) yue-; if(yue=-1) yue=12; write_addate2(6,yue); write_com(0x86); if(keynum=3) ri-; if(ri=0) if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) ri=31; if(yue=4|yue=6|yue=9|yue=11) ri=30; if(yue=2&(nian%4=0&nian%100!=0)|nian%400=0) ri=2


    注意事项

    本文(基于单片机的电子闹钟的设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开