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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

毕业设计单片机定时闹钟.docx

1、毕业设计单片机定时闹钟提供全套毕业论文,各专业都有电气工程及其自控化专业单片机原理及其应用课程设计报告 姓名: 学号: 专业班级: 题目: 定时闹钟 电气与电子工程学院二一四年XX月XX日目录一、设计目的 1二、设计任务和要求 1三、设计原理分析 2四、硬件资源及其分配 2五、硬件图 6六、程序框图 7七、程序 9八、调试运行19九、仿真截图 20十、设计心得体会21一、设计本定时闹钟的目的以单片机为核心的数字时钟是很有社会意义和社会价值的。钟表原先的报时功能已经原不能满足人们日益增长的要求,现代的电子时钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备

2、、甚至各种定时电气的自动启用等功能。二、设计任务和基本要求:1、任务:使用89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。2、设计要求:(1)显示程序格式为“时时:分分”(2)由LED闪动来做秒计数表示 (3)一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开关(4)程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00”,3、按下操作键K1-k4动作如下:(1) K1设置现在的时间。(2) K2显示闹钟设置的时间。(3)K3设置闹铃的时间。(4)K4闹铃ON/OFF的状态设置,设置O

3、N时连续三次发出“哗”的一声,off置为哗的一声。4、设置当前时间或闹铃时间如下:(1) K1时的调整。(2) K2分的调整。(3) K3设置完成。(4) K4-闹铃时间到时,发出一阵声响,按下本键可以停止声响。三、设计原理分析1、数字钟介绍时钟是将小时、分钟、秒钟显示于人的肉眼的计时装置。而单片机模块中最常见的正是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。而LCD电子定时闹钟是以单片机为基础的数字电路实现对时、分、秒的数字显示的数字计时装置,它的计时周期为24小时,另外应有校时

4、功能和一些显示日期、闹钟等附加功能。一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,“星期”计数器、校时电路、报时电路和振荡器组成。目前电子钟广泛用于各种私人和公众场合,成为我们生活、工作和学习中不可缺少的好帮手。2、总体方案设计本LCD定时闹钟,是以单片机及外围接口电路为核心硬件,辅以其他外围硬件电路,用汇编语言设计的程序来实现的。根据C51单片机的外围接口特点扩展相应的硬件电路,然后根据单片机的指令设计出数字钟相应的软件,再利用软件执行一定的程序来实现数字钟的功能。由于采用集成芯片性的单片机来制作电子钟,这样设计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也十分简

5、单。本设计是利用AT89C51单片机为主控芯片,由LCD、晶振、电阻、电容、发光二极管、开关、喇叭等元件组成硬件电路,通过编写软件程序来实现和控制的数字定时闹钟四、硬件资源及其分配1、主控芯片AT89C51的设计在本LCD电子闹钟设计中就是采用利用我们熟悉的AT89C51单片机为主控芯片。AT89C51单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片内程序存储器的容量为4KB,片内数据存储器为128个字节。89C51单片机有4个8位的并行I/O口:P0口,P1口,P2口和P3口。各个接口均由接口锁存器,输出驱动

6、器,和输入缓冲器组成。P1口是唯一的单功能口,仅能用作通用的数据输入/输出口。P3口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0是串行输入口线,P3.1口是串行输出口线。在需要外部程序存储器和数据存储器扩展时,P0可作为分时复用的低8位地址/数据总线,P2口可作为高8位的地址总线。P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号.2、时钟电路部分设计AT89C51系列的单片机的时钟方式分为内部方式和外部方式。内部方式就是在单片机的XTAL1和XTAL2的两引脚外接晶振,就够成了自激振荡器在单片机内部产生时钟脉冲信号。外部

7、时钟方式是把外部已经有的时钟信号引入到单片机内部。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。本LCD电子闹钟设计是采用内部时钟方式,用一个12MHz晶振和两个30Pf瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容起微调作用.其电路图见图。之所以采用高性能的振荡电路,因为:(1)单片机电子钟的计时脉冲基准是由外部晶振的频率经过12分频后提供,采用内部的定时/计数器来实现计时

8、功能。所以,外接晶振频率精确度直接影响电子钟计时的准确性。(2)单片机电子钟利用内部定时/计数器溢出产生中断(12M晶振一般为50ms)再乘以相应的倍率来实现秒、分、时的转换。大家都知道从定时/计数器产生中断请求到响应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。3、LCD显示电路部分为了获得更好的效果本设计并没有采用常见的LED,而是采用了型号为1602的 LCD。LCD有LED数码显示更好的更的直观效果,也更加经久耐用。液晶显示模块体积小功耗低、显示内容丰富,现在字符型液晶显示模块已经

9、是单片机应用设计中最常用的信息显示器件之一了。本LCD是2行16列液晶可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚). 该模块也可只用D4-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。引脚说明VDD:电源正极,4.55.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为05V。接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度或者直接串接一个电阻到地;RS:MCU写

10、入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4D7接口传送数据。本充电器就是采用4位数据传送方式;BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;BLK: LED背光地端。LCD显示屏引脚说明编号符号引脚说明编号符号引脚说明1VCC电源地9D2双

11、向数据口2VDD电源正极10D3双向数据口3VL对比度调节11D4双向数据口4RS数据/命令选择12D5双向数据口5R/W读/写选择13D6双向数据口6E模块使能端14D7双向数据口7D0双向数据口15BLK背光源地8D1双向数据口16BLA背光源正极五、硬件图六、程序框图1、本LCD电子闹钟的的主程序流程图如图所示:程序设计思想如图2、显示程序显示程序包括时钟显示和定时显示程序。具体程序见附录。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表6.1是TC1602EL

12、液晶模块的内部显示地址。内部显示地址12345678910111213141516000102030405060708090A0B0C0D0E0F404142434445464748494A4B4C4D4E4F七、程序1、程序初始化在系统开始上电时,需要.首先初始化液晶:voidTimeInit() write_com(0x01); /初始化1602液晶 write_com(0x80); /设置现实初始坐标 for(num=0;num9;num+) /显示年月日 write_date(tablenum); delay(5); write_com(0x80+0x40+6); /写出时间显示部分的

13、两个冒号 write_date(:); delay(5); write_com(0x80+0x40+9); write_date(:); delay(5); write_sfm(4,shi); /分别送去液晶显示 write_com(0x80+0x40+4); write_sfm(7,fen); write_com(0x80+0x40+7); write_sfm(10,miao); write_com(0x80+0x40+10)2、主程序:#include #include 24C08.h#define uint unsigned int#define uchar unsigned charu

14、char code table=NOW TIME:;uchar code table1=SET NOW TIME:;uchar code table2=SET ALARM TIME:;uchar code alarm=ALARM TIME:;uchar code alarmoff=ALARM TIME: OFF;uchar code alarmon=ALARM TIME: ON;sbitlcden=P32;sbitlcdrs=P30;sbitlcdrw=P31;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit beep=P21;uchar

15、 flag,num,count,k1num,k2num,k3num,k4num;charmiao,shi,fen,ashi,afen;/延时函数void delay(uint z) uintx,y; for(x=z;x0;x-) for(y=110;y0;y-);/蜂鸣器子程序void di() beep=0; delay(100); beep=1;/写命令函数voidwrite_com(uchar com) lcdrs=0; lcdrw=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; /写数据函数voidwrite_date

16、(uchar date) lcdrs=1; lcdrw=0; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0;/写时间函数voidwrite_sfm(ucharadd,uchar date) ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);/显示时间初始化voidTimeInit() write_com(0x01); write_com(0x80); for(num=0;

17、num9;num+) write_date(tablenum); delay(5); write_com(0x80+0x40+6); write_date(:); delay(5); write_com(0x80+0x40+9); write_date(:); delay(5); write_sfm(4,shi); write_com(0x80+0x40+4); write_sfm(7,fen); write_com(0x80+0x40+7); write_sfm(10,miao); write_com(0x80+0x40+10);/设置当前时间voidSetNowTime() if(K1=0

18、) delay(5); if(K1=0) while(!K1); di(); shi+; if(shi=24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); write_add(3,shi); if(K2=0) delay(5); if(K2=0) while(!K2); di(); fen+; if(fen=60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); write_add(2,fen); if(K3=0) delay(5); if(K3=0) while(!K3); di(); k

19、1num=0; TR0=1; TimeInit(); /设置闹钟时间voidSetAlarmTime() flag=0; if(K1=0) delay(5); if(K1=0) while(!K1); di(); ashi+; if(ashi=24) ashi=0; write_sfm(4,ashi); write_com(0x80+0x40+4); write_add(4,ashi); if(K2=0) delay(5); if(K2=0) while(!K2); di(); afen+; if(afen=60) afen=0; write_sfm(7,afen); write_com(0x

20、80+0x40+7); write_add(5,afen); if(K3=0) delay(5); if(K3=0) while(!K3); di(); k3num=0; EA=1; flag=1; TimeInit(); /显示闹钟函数voidDisplayAlarmTime() write_com(0x01); write_com(0x80); for(num=0;num11;num+) write_date(alarmnum); delay(5); write_com(0x80+0x40+6); write_date(:); delay(5); write_sfm(4,ashi); wr

21、ite_com(0x80+0x40+4); write_sfm(7,afen); write_com(0x80+0x40+7);/键盘扫描函数voidkeyscan() if(K1=0) delay(5); if(K1=0) TR0=0; while(!K1); di(); k1num+; if(k1num!=0) write_com(0x80); for(num=0;num13;num+) write_date(table1num); delay(5); SetNowTime(); else if(K2=0) delay(5); if(K2=0) while(!K2); di(); k2nu

22、m+; if(k2num=1) EA=0; DisplayAlarmTime(); k2num=2; if(k2num=3) k2num=0; EA=1; TimeInit(); else if(K3=0) delay(5); if(K3=0) while(!K3); di(); k3num+; write_com(0x01); if(k3num=1) EA=0; write_com(0x80); for(num=0;num15;num+) write_date(table2num); delay(5); write_com(0x80+0x40+6); write_date(:); delay

23、(5); write_sfm(4,ashi); write_com(0x80+0x40+4); write_sfm(7,afen); write_com(0x80+0x40+7); SetAlarmTime(); else if(K4=0) delay(5); if(K4=0) while(!K4); di(); k4num+; if(k4num=1) di(); k4num=2; flag=0; if(k4num=3) k4num=0; di(); delay(500); di(); delay(500); di(); flag=1; if(flag=1&shi=ashi&fen=afen)

24、 beep=beep; delay(500); if(K4=0&flag=1) delay(5); if(K4=0&flag=1) while(!K4); di(); flag=0; k4num=0; /lcd1602初始化voidinit() lcden=0; shi=0; fen=0; miao=0; ashi=0; afen=0; count=0; k1num=0; init_24c08(); write_com(0x38); /设置16X2显示,5X7点阵,8位数据接口 write_com(0x0c); /设置开显示,不显示光标 write_com(0x06); /写一个字符后地址指针

25、加1 write_com(0x01); /显示清0,数据指针清0 miao=read_add(1); /首次上电从AT24C08中读取出存储的数据 fen=read_add(2); shi=read_add(3); ashi=read_add(4); afen=read_add(5); TimeInit(); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;/主函数void main() init(); write_com(0x80); while(1) keyscan(); /中断服务子程序void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; shi+; if(shi=24) shi=0; write_sfm(4,shi); write_add(3,shi); write_sfm(7,fen); write_add(2,fen); write_sfm(10,miao); w

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

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