




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
长 沙 学 院单片机原理及应用课程设计说明书题目 LCD12864液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期 单片机原理及应用课程设计任务书 系(部): 专业: 课题名称LCD12864液晶显示电子钟设计设计内容及要求1、课题内容:设计一种基于AT89S52 单片机的液晶显示电子时钟,要求如下:(1)、能正确显示时间、日期和星期显示格式为:时间:XX 小时:XX 分:XX 秒;日期:XX 年:XX 月:XX 日;星期:X。(2)、时间能够由按键调整,误差小于1S。(3)、闹钟功能:时间运行到与闹钟设定时间时,闹钟响(持续响3秒)。(4)、报时功能:时间运行到正点时间时,闹钟响,几点钟就响几声(每声持续响2 秒,每两声之间时间间隔1 秒)。液晶显示器第一行显示“数字电子钟”;第二行显示“当前时间”;第三行显示日期和星期;第四行显示最近一个闹钟的设定时间。2、要求:完成该系统的硬件和软件的设计,在Proteus 软件上仿真通过,并提交一篇课程设计说明书。设计工作量1、汇编或C51 语言程序设计;2、程序调试;3、在Proteus 上进行仿真成功,进行实验板下载调试;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。进度安排起止日期设计内容(或预期目标)备注第一天 课题介绍,答疑,收集材料,C51介绍 第二天设计方案论证,练习编写C51程序 第三天第六天程序设计 第六天第八天程序调试、仿真 第九天第十天系统测试并编写设计说明书教研室意见 年 月 日系(部)主管领导意见 年 月 日 目 录一、整体方案设计51、单片机的选择52、单片机结构5二、前期准备6三、程序设计81、键盘约定82、界面显示93、全局变量的定义94、系统时钟95、闹钟控制时间的设定9四、总结与体会10参考文献11一、整体方案设计1、单片机的选择单片微型计算机主要由微处理器、存储器、I/O接口电路等组成。鉴于在本学期的学习和实习中主要是以MCS51系列的单片机为对象,故而本次课程设计选择以AT89C51为主的单片机。2、单片机结构单片机主要包括中央处理器、程序存储器、数据存储器、定时/计数器、并行接口、串行接口和中断系统等几大处理单元和地址总线、数据总线、控制总线等三大总线。芯片内部包括下列硬件资源:(1) 、8位CPU。(2) 、4KB的片内程序存储器ROM、可寻址64KB程序存储器和64KB外部数据存储器。(3) 、128B内部RAM.(4) 、21个SFR.(5) 、4个8位并行I/O口。(6) 、一个全双工的异步串行口。(7) 、两个16位定时/计数器。(8) 、5个中断源,两个优先级。如下图1是51单片机的简化结构框图 图1二、前期准备为了更好的完成课程设计,设计之初我们并没有直接进行设计课题的设计,而是对单片机的各种功能先做了一定的了解和系统仿真,为课题研究打下基础。系统仿真主要包括三大部分,第一部分是对串行输出、按键计数、输出方波、彩灯花样的仿真,第二部分是对LCD1206显示和12864显示的仿真,第三部分是对点阵显示的仿真。第一部分的准备比较简单,基于单片机实验已经做过类似的实验,仿真做的比较成功。如下图图2所示是输出周期为20ms的方波波形。 图2第二部分的准备相对复杂些,主要是了解LCD1602和12864的显示功能。仿真显示的内容采用了有个人特色的姓名、学号、班级等信息的显示。如下图3所示利用LCD1602显示了姓名拼音、班级和学号;图4(a)、(b)所示利用12864显示了姓名、学号、班级,并且用按键切换的方式分页显示了我比较喜欢的一首柳宗元的古诗江雪。 图3(a) (b) 图4(a)、(b)第三部分的准备相对第二部分又稍显简单,主要还是对点阵显示的了解和掌握。如下图5(a)、(b)、(c)所示,利用点阵显示了我的姓名。 (a)(b) (c) 图5(a)、(b)、(c)三、程序设计做好了前期准备,接下来就是针对12864液晶电子钟显示的程序编写。考虑到之前的实习焊接了单片机最小系统和按键模块,正好在此次设计中可以用到,故而此次设计跟之前的仿真跟有所不同,针对实物来编写和设计程序。整个系统需要一个系统时钟,作为控制器的时钟标准。控制输出的时间设定、系统时钟的校准、控制输出准许与否等,都需要输入设备,这里以四个独立式按键为输入设备。1、键盘约定按键0为时间调整键,按键1为闹钟时间调整键,按键2为数字加键,按键3为数字减键。2、界面显示(1)、走时:系统在没有操作之前为走时状态,显示界面样式为00。(2)、设置系统时间:功能键为按键0,显示界面样式为00时00分00秒、00年00月00日、00。 最后显示的是星期。(3) 、控制输出的设定:功能键为按键1,显示界面为00时00分00秒。当闹铃时间设定好了之后,最后再按一下直至数字稳定不闪烁即设置成功。当闹铃时间到时,蜂鸣器会发出声音。3、全局变量的定义走时系统需要使用5个变量:S01 0.1秒计数单元y3 秒计数单元y2 分计数单元y1 小时计数单元4、系统时钟在时间控制系统中,系统时钟完成两件事,一是“走时”,提供标准时钟;二是为显示界面提供闪烁的秒信号。这个程序可以通过Timer_A中断来实现。所使用的变量单元在主程序中有定义,为全局变量。5、闹钟控制时间的设定在系统中设置闹铃时间,每当走时时间与设置的闹铃控制时间相同且允许闹铃时,则输出到蜂鸣器。程序编译成功后下载到芯片,实物显示如下图6(a)、(b)所示。 图6 (a) (b) 四、总结与体会在此次课程设计中,收获自然是不必多说,我觉得最主要的是在其中应用知识的过程体会、新知识的了解和自身理论知识的不足的感悟。 在设计过程中,我觉得巩固最深的就是中断,让我对中断的理解层次提高了。中断技术是计算机的一个很重要的技术,在自动检测、实时控制、应急处理等方面都要用到。某一中断源申请中断有效时,系统硬件叫自动置位TCON或者SCON中的有关相应标志位。在编程时要注意其标志位的变化的影响。在之前我一直认为中断是系统硬件内部才能够实现。但是此次实践改变了我的错误认知,外部中端可借用定时器溢出中断扩展也可以采用查询法扩展,还可采用8259等多功能芯片扩展外部中断源。 这时我就想到了一句古话“温故而知新”和一个成语“坐井观天”。复习也是学习新知识的一个主要环节,没有对旧知识的复习,新学的知识就会缺少源头,导致我们没办法对所学新知识的理解的和掌握。我想在复习中也能深化自己对知识的理解。在温故的基础上通过领会贯通,通过举一反三,通过比照分析,通过联想分析,就会有新的发现,新的领悟,新的启示,从而进入新的境界,掌握新的知识。而且我们都知道知识只有真正的理解了,真正的弄懂了,运用到实践中去了,证实了,才算是学会了,掌握了,这时才可以说你已经把这门知识学到手了。这正是课程设计的目的之一。我想我在某些学习方面不是个主动的人,但是,经过此次课程设计,我觉得我必须去主动地去探求,而不是被动地接受。在学习之上加上我自己的思考,加上我自己的判断,加上我自己的总结。阅历和经历决定了一个人的视野,一个人要想开阔视野必须要走出去实践,拓宽眼界,发挥想象思维,认识世界。受此影响,我想我以后的视野一定能够拓宽很多。参考文献【1】曾屹.刘辉主编. 单片机原理与应用M. 中南大学出版社. 2012年第2版【2】臧春华.邵杰.魏小龙主编. 综合电子系统设计与实践.M.北京航空航天大学出 版社2009.11【3】李华主编.MCS51系列单片机实用接口技术M.北京航空航天大学出版社 1993.8程序清单#include#include#define uchar unsigned char#define uint unsigned intsbit rs=P26;sbit en=P27;sbit wd=P20;sbit beet=P22;sbit key1=P10;sbit key2=P11;sbit key3=P12;sbit key4=P13;char hour=23,minute=59,second=58,count=0;char shi=0,fen=0,miao=0,hm;int year=2013;char month=12,day=30,mm=0,cc=7;uint temp;float f_temp;uchar code table1=数字电子钟;void delay(uint z) uint x,y; for(x=z;x0;x-); for(y=110;y0;y-);void fengmingqi() beet=0;delay(1);beet=1;delay(1);void xieling_shu(uchar aa,uchar bb) if(aa=1)rs=0; if(aa=0)rs=1; P0=bb;delay(1); en=1;delay(1); en=0;delay(1);void xieludizhi(uchar x,uchar y) switch(x) case1: xieling_shu(1,0x80+y);return; case2: xieling_shu(1,0x90+y);return; case3: xieling_shu(1,0x88+y);return; case4: xieling_shu(1,0x98+y);return; void xiezifuchuan(uchar*dd) while(*dd!=0) xieling_shu(0,*dd+); void qingping() xieling_shu(1,0x01); xieling_shu(1,0x01); xieling_shu(1,0x01); delay(20);void init_12864() xieling_shu(1,0x30); xieling_shu(1,0x30); xieling_shu(1,0x0C); xieling_shu(1,0x01); xieling_shu(1,0x06);void init_zifu() xieludizhi(1,0);xiezifuchuan(数字电子钟);delay(1); xieludizhi(2,0);xiezifuchuan(时 分 秒);delay(1); xieludizhi(3,0);xiezifuchuan(年 月 日 星期);delay(1); xieludizhi(4,0);xiezifuchuan(闹钟 时 分 秒);delay(1);void display() xieludizhi (3,0); xieling_shu(0,0x30+hour/10); xieling_shu(0,0x30+hour%10); xieludizhi(0,:); xieling_shu(0,0x30+minute/10); xieling_shu(0,0x30+minute%10); xieludizhi(0,:); xieling_shu(0,0x30+second/10); xieling_shu(0,0x30+second%10); xieludizhi(2,0); xieling_shu(0,0x30+year/1000); xieling_shu(0,0x30+year%1000/100); xieling_shu(0,0x30+year%100/10); xieling_shu(0,0x30+year%10); xieludizhi(2,3); xieling_shu(00,0x30+month/10); xieling_shu(00,0x30+month%10); xieludizhi(2,5); xieling_shu(00,0x30+day/10); xieling_shu(00,0x30+day%10);void display1() xieludizhi (3,0); xieling_shu(0,0x30+shi/10); xieling_shu(0,0x30+shi%10); xieling_shu(0,:); xieling_shu(0,0x30+fen/10); xieling_shu(0,0x30+fen%10); xieling_shu(0,:); xieling_shu(0,0x30+miao/10); xieling_shu(0,0x30+miao%10);void xingqi() switch(cc) case1: xieludizhi(3,7);xiezifuchuan(01);return; case2: xieludizhi(3,7);xiezifuchuan(02);return; case3: xieludizhi(3,7);xiezifuchuan(03);return; case4: xieludizhi(3,7);xiezifuchuan(04);return; case5: xieludizhi(3,7);xiezifuchuan(05);return; case6: xieludizhi(3,7);xiezifuchuan(06);return; case7: xieludizhi(3,7);xiezifuchuan(07);return; void anjian() if(key4=0)delay(1);hm=-hm;while(key4=0); if(key1=0) delay(1);mm+; if(hm!=0)if(mm=4)mm=0; if(mm=1)xieludizhi(3,3);xieling_shu(0,0x5f); if(mm=2)TR0=1;xieludizhi(3,2);xieling_shu(0,0x5f); if(mm=3)xieludizhi(3,0);xieling_shu(0,0x5f); if(mm=4)xieludizhi(2,5);xieling_shu(0,0x5f); if(mm=5)xieludizhi(2,3);xieling_shu(0,0x5f); if(mm=6)xieludizhi(2,1);xieling_shu(0,0x5f); if(mm=7)xieludizhi(3,7);xieling_shu(0,0x5f); if(mm=8)xieludizhi(2,7);xieling_shu(0,0x02); if(mm=9)xieludizhi(2,7);xieling_shu(0,0x02);mm=0; while(key1=0); if(mm=1&key2=0) if(hm=0)TR0=0;delay(1);if(key2=0)second+;if(second=60)second=0; if(hm!=0)delay(1);if(key2=0)miao+;if(miao=60)miao=0; while(key2=0); if(mm=1&key3=0) if(hm=0)TR0=0;delay(1);if(key3=0)second-;if(second=-1)second=59; if(hm!=0)delay(1);if(key3=0)miao-;if(miao=60)minute=0; if(hm!=0)delay(1);if(key2=0)fen+;if(fen=60)fen=0; while(key2=0); if(mm=2&key3=0) if(hm=0)delay(1);if(key3=0)minute-;if(minute=-1)minute=59; if(hm!=0)delay(1);if(key3=0)fen-;if(fen=24)hour=0; if(hm!=0)delay(1);if(key2=0)shi+;if(shi=24)shi=0; while(key2=0); if(mm=3&key3=0) if(hm=0)delay(1);if(key3=0)hour-;if(hour=-1)hour=23; if(hm!=0)delay(1);if(key3=0)shi-;if(shi=31)day=1; while(key2=0); if(mm=4&key3=0) delay(1);if(key3=0)day-;if(day=13)month=1; while(key2=0); if(mm=5&key3=0) delay(1);if(key3=0)month-;if(month=8)cc=1; while(key2=0); if(mm=7&key3=0) delay(1);if(key3=0)cc-;if(cc=0)cc=7; while(key3=0); void dsreset(void) uint i; wd=0; i=103; while(i=0)i-; wd=1; i=4; while(i0)i-;bit tempreadbit(void) uint i; bit dat; wd=0;i+; wd=1;i+;i+; dat=wd; i=8; while(i0)i-; return(dat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课堂纪律管理提升策略计划
- 2024年北京市杂技学校招聘笔试真题
- 职业生涯发展对财务的影响计划
- 保安工作全面提升计划
- 开展社团比赛与评比活动方案计划
- 2025届甘肃省嘉峪关市名校数学七下期末监测试题含解析
- 内蒙古鄂尔多斯市名校2025届数学八下期末学业水平测试试题含解析
- 数据处理工具及技巧试题及答案
- 面对面解读网络管理员考试试题及答案
- 2025届湖北省黄冈浠水县联考七下数学期末综合测试模拟试题含解析
- 2025年下半年扬州现代农业生态环境投资发展集团公开招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025年中考第一次模拟考试卷:生物(成都卷)解析版
- 2025年山东济南先行投资集团有限责任公司招聘笔试参考题库附带答案详解
- 理发店签入股合同协议
- 从实践中学习医疗人文关怀的案例分享
- 2025年上半年重庆合川区招考事业单位工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 电气设备在智能电网虚拟电厂中的应用考核试卷
- 法学博士申请个人自述范文
- 首付协议签合同
- 银行消保岗笔试题及答案
- 2024-2025学年陕旅版(三起)小学英语四年级下册(全册)知识点归纳
评论
0/150
提交评论