




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计—带有LCD的定时闹钟页脚轻工业学院软件学院单片机与接口技术课程设计总结报告设计题目:带有LCD的定时闹钟学生:系别:专业:班级:学号:指导教师:2011年12月16日单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第1页。轻工业学院课程设计任务书题目带有LCD的定时闹钟专业、班级学号主要容:设使用89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。基本要求:.字符型LCD(16*2)显示器.显示格式“时时分分”。.由LED闪动来做秒计数表示。.一旦时间到侧发动声响,同时继电器启动,可以扩充控制家电开启和关闭。.程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“0000”,按下操作键K1-k4动作如下:K1—设置现在的时间。K2—显示闹钟设置的时间。K3—设置闹铃的时间。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第2页。K4—闹铃ON/OFF的状态设置,设置ON时连续三次发出“哗单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第2页。K1—时的调整。K2—分的调整。K3—设置完成。OFF发出“哗”K4---闹铃时间到时,发出一阵声响,按下本键可以停止声响。除了显示当前时间的功能外,还可以扩充如下功能;.增加秒表计数。.闹铃时间到侧产生音乐声。.增加减计数功能。.增加多组计数的功能。参考文献郭天祥51单片机C语言教程-入门。余发山单片机原理及应用技术。中国矿业大学。涂世亮,友德。单片微机控制技术。清华大学。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第3页。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第3页。以单片机为核心的数字时钟是很有社会意义和社会价值的。钟表原先的报时功能已经原不能满足人们日益增长的要求,现代的电子时钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等功能。1.1本LCD电子闹钟的特点和功能介绍数字钟介绍时钟是将小时、分钟、秒钟显示于人的肉眼的计时装置。而单片机模块中最常见的正是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。而LCD电子定时闹钟是以单片机为基础的数字电路实现对时、分、秒的数字显示的数字计时装置,它的计时周期为24小时,另外应有校时功能和一些显示日期、闹钟等附加功能。一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,“星期”计数器、校时电路、报时电路和振荡器组成。目前电子钟广泛用于各种私人和公众场合,成为我们生活、工作和学习中不可缺少的好帮手。2总体方案设计2.1总体设计方案单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第4页。本LCD定时闹钟,是以单片机及外围接口电路为核心硬件,辅以其他外围硬件电路,用汇编语言设计的程序来实现的。根据C51单片机的外围接口特点扩展相应的硬件电路,然后根据单片机的指令设计出数字钟相应的软件,再利用软件执行一定的程序来实现数字钟的功能。由于采用集成芯片性的单片机来制作电子钟,这样设计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也十分简单。本设计是利用AT89C51单片机为主控芯片,由LCD单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第4页。AT89C51震荡电路调时电路喇叭LCD片选代码AT89C51震荡电路调时电路喇叭LCDAT89C51震荡电路调时电路喇叭LCD片选代码AT89C51震荡电路调时电路喇叭LCD片选代码3.1主控芯片AT89C51的设计在本LCD电子闹钟设计中就是采用利用我们熟悉的AT89C51单片机为主控芯片。AT89C51单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片程序存储器的容量为4KB,片数据存储器为128个字节。89C51单片机有4个8位的并行I/O口:P0口,P1口,P2口和P3口。各个接口均由接口锁存器,输出驱动器,和输入缓冲器组成。P1口是唯一的单功能口,仅能用作通用的数据输入/输出口。P3口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0是串行输入口线,P3.1口是串行输出口线。在需要外部程序存储器和数据存储器扩展时,P0可作为分时复用的低8位地址/数据总线,P2口可作为高8位的地址总线。P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号.3.2时钟电路部分设计单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第5页。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第5页。图3.2含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。本LCD电子闹钟设计是采用部时钟方式,用一个12MHz晶振和两个30Pf瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容起微调作用.其电路图见图3.2。之所以采用高性能的振荡电路,因为:1.单片机电子钟的计时脉冲基准是由外部晶振的频率经过12分频后提供,采用部的定时/计数器来实现计时功能。所以,外接晶振频率精确度直接影响电子钟计时的准确性。2.单片机电子钟利用部定时/计数器溢出产生中断(12M晶振一般为50ms)再乘以相应的倍率来实现秒、分、时的转换。大家都知道从定时/计数器产生中断请求到响应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。3.3LCD显示电路部分为了获得更好的效果本设计并没有采用常见的LED,而是采用了型号为1602的LCD。LCD有LED数码显示更好的更的直观效果,也更加经久耐用。液晶显示模块体积小功耗低、显示容丰富,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件之一了。本LCD是2行16列液晶可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚).该模块也可只用D4-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。引脚说明,见表3.1。VDD:电源正极,4.5-5.5V,通常使用5V电压;单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第6页。RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0-D7:8位数据总线,三态双向。如果MCU的I/O口资源紧的话,该模块也可以只使用4位数据线D4-D7接口传送数据。本充电器就是采用4位数据传送方式;BLA:LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;BLK:LED背光地端。[12]表3.1LCD显示屏引脚说明编号符号引脚说明编号符号引脚说明1VCC电源地9D2双向数据口2VDD电源正极10D3双向数据口3VL对比度调节11D4双向数据口4RS数据/命令选择12D5双向数据口5R/W读/写选择13D6双向数据口6E模块使能端14D7双向数据口7D0双向数据口15BLK背光源地8D1双向数据口16BLA背光源正极4软件设计4.1软件设计概述这里用汇编的单片机程序构成了本LCD电子闹钟的软件系统。该程序实现时间及定时(时间以0点0分0秒为基准计算,闹铃定时以0时0分为基准计算)的显示,有外中断0和五个开关实现校时,闹钟功能。其中程序的晶振频率为12MHz,最小计时单位为1/20秒。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第7页。主芯片p0.1-p0.7输出数据到LCD数据总线,p3.0-2.2输出LCD控制信号,P2.1输出声音信号,.P1.0-P1.单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第7页。4.2主函数的设计本LCD电子闹钟的的主程序流程图如图4.1所示:CPU系统初始化定时器0初始化CPU系统初始化定时器0初始化定时器1初始化串口初始化显示待机指示符设定闹铃时间判设置闹铃时间否?显示刷新启动走时有关变量初始化刷新显示判断日期是否变化化否?秒指示判断时间是否变化闹铃判是否到闹铃时间?延时YYYY4.3.1程序初始化在系统开始上电时,需要.首先初始化液晶:voidTimeInit(){ write_(0x01); //初始化1602液晶 write_(0x80); //设置现实初始坐标 for(num=0;num<9;num++) //显示年月日 { write_date(table[num]);单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第8页。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第8页。 } write_(0x80+0x40+6); //写出时间显示部分的两个冒号 write_date(':'); delay(5); write_(0x80+0x40+9); write_date(':'); delay(5); write_sfm(4,shi); //分别送去液晶显示 write_(0x80+0x40+4); write_sfm(7,fen); write_(0x80+0x40+7); write_sfm(10,miao); write_(0x80+0x40+10)4.3.2闹钟的实现闹钟功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别与相应处理。闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。当时十位、时个位、分十位、分个位中任一位发生改变(进位)时,就必须进行闹铃判别。程序设计思想如图4.3。[8]时十位、个位,分十位、个位改变了时十位、个位,分十位、个位改变了设置闹铃标志是否设置了闹铃清除闹铃标志判当前时间是设定时间中断返回中断返回YNY闹铃判别处理4.3.3显示程序单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第9页。单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第9页。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表4.1是TC1602EL液晶模块的部显示地址。[15]表4.1部显示地址12345678910111213141516000102030405060708090A0B0C0D0E0F404142434445464748494A4B4C4D4E4F硬件原理图程序:#include<reg52.h>#include"24C08.h"#defineuintunsignedint#defineucharunsignedcharucharcodetable[]="NOWTIME:";ucharcodetable1[]="SETNOWTIME:";ucharcodetable2[]="SETALARMTIME:";ucharcodealarm[]="ALARMTIME:";ucharcodealarmoff[]="ALARMTIME:OFF";单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第10页。sbitlcden=P3^2;sbitlcdrs=P3^0;sbitlcdrw=P3^1;sbitK1=P1^0;sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitbeep=P2^1;ucharflag,num,count,k1num,k2num,k3num,k4num;charmiao,shi,fen,ashi,afen;//延时函数voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}//蜂鸣器子程序voiddi(){ beep=0; delay(100); beep=1;}//写命令函数voidwrite_(uchar){ lcdrs=0; lcdrw=0; lcden=0; P0=; delay(5); lcden=1; delay(5); lcden=0; }//写数据函数voidwrite_date(uchardate){ lcdrs=1; lcdrw=0; lcden=0; P0=date;单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第11页。 lcden=1; delay(5); lcden=0;}//写时间函数voidwrite_sfm(ucharadd,uchardate){ ucharshi,ge; shi=date/10; ge=date%10; write_(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);}//显示时间初始化voidTimeInit(){ write_(0x01); write_(0x80); for(num=0;num<9;num++) { write_date(table[num]); delay(5); } write_(0x80+0x40+6); write_date(':'); delay(5); write_(0x80+0x40+9); write_date(':'); delay(5); write_sfm(4,shi); write_(0x80+0x40+4); write_sfm(7,fen); write_(0x80+0x40+7); write_sfm(10,miao); write_(0x80+0x40+10);}//设置当前时间voidSetNowTime(){ if(K1==0) { delay(5);单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第12页。 { while(!K1); di(); shi++; if(shi==24) shi=0; write_sfm(4,shi); write_(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_(0x80+0x40+7); write_add(2,fen); } } if(K3==0) { delay(5); if(K3==0) { while(!K3); di(); k1num=0; TR0=1; TimeInit(); } } }//设置闹钟时间voidSetAlarmTime(){ flag=0;单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第13页。 { delay(5); if(K1==0) { while(!K1); di(); ashi++; if(ashi==24) ashi=0; write_sfm(4,ashi); write_(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_(0x80+0x40+7); write_add(5,afen); } } if(K3==0) { delay(5); if(K3==0) { while(!K3); di(); k3num=0; EA=1; flag=1; TimeInit(); } } }单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第14页。voidDisplayAlarmTime(){ write_(0x01); write_(0x80); for(num=0;num<11;num++) { write_date(alarm[num]); delay(5); } write_(0x80+0x40+6); write_date(':'); delay(5); write_sfm(4,ashi); write_(0x80+0x40+4); write_sfm(7,afen); write_(0x80+0x40+7);}//键盘扫描函数voidkeyscan(){ if(K1==0) { delay(5); if(K1==0) { TR0=0; while(!K1); di(); k1num++; } } if(k1num!=0) { write_(0x80); for(num=0;num<13;num++) { write_date(table1[num]); delay(5); } SetNowTime(); } else {单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第15页。 { delay(5); if(K2==0) { while(!K2); di(); k2num++; } } 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_(0x01); } } if(k3num==1) { EA=0; write_(0x80); for(num=0;num<15;num++) { write_date(table2[num]); delay(5); }单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第16页。 write_date(':'); delay(5); write_sfm(4,ashi); write_(0x80+0x40+4); write_sfm(7,afen); write_(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) { beep=~beep; delay(500);单片机课程设计—单片机课程设计—带有LCD的定时闹钟全文共20页,当前为第17页。 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_(0x38); //设置16X2显示,5X7点阵,8位数据接口 write_(0x0c); //设置开显示,不显示光标 write_(0x06); //写一个字符后地址指针加1 write_(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(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软件工程师职业考题及答案
- 2025年市场调查与分析考试题及答案
- 2025年投资项目评估与管理考试题及答案
- 2025年工业机器人应用技术职业资格考试卷及答案
- 2025年高校计算机基础课程试题及答案
- 2025年地质灾害防治与管理考试试卷及答案
- 2025年法律职业资格考试试题及答案
- 2025年互联网工程师考试试题及答案
- 2025年环境心理学领域职业资格认证考试试卷及答案
- 2025年急救与应急救护专业考试题及答案
- 郑丽玲《彩墨游戏》说课x 课件
- 重点中成药品种含濒危野生动物药材调查表
- 2016年社区获得性肺炎(CAP)指南解读与抗生素应用
- 预应力混凝土连续梁张拉记录
- GB/T 41028-2021航空航天流体系统液压软管、管道和接头组件的脉冲试验要求
- 化工环境保护与及安全技术概论考试题及答案
- 领退转款账户确认书
- 精益生产精管理培训课件
- 钳工技能-刮削与研磨课件
- 浙大中控DCS系统AdvanTrol-Pro软件培训-编程综合编程案例课件
- 2021版《安全生产法》培训课件
评论
0/150
提交评论