版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用课程设计说明书题目LCD12864 液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期 课程设计任务书系(部): 专业: 课题名称LCD12864 液晶显示电子钟设计设计要求设计一种基于 AT89S52 单片机的液晶显示电子时钟,要求如下:(1) 、 能正确显示时间、 日期和星期显示格式为: 时间: XX 小时:XX 分:XX 秒;日期:XX 年:XX 月:XX 日;星期:X。(2) 、时间能够由按键调整,误差小于 1S。(3) 、 闹钟功能: 时间运行到与闹钟设定时间时, 闹钟响 (持续响 3 秒)。(4) 、 报时功能: 时间运行到正点时间时, 闹钟响, 几点钟
2、就响几声 (每声持续响 2 秒,每两声之间时间间隔 1 秒)。液晶显示器第一行显示“数字电子钟” ;第二行显示“当前时间” ;第三行显示日期和星期;第四行显示最近一个闹钟的设定时间。2、要求:完成该系统的硬件和软件的设计,在 Proteus 软件上仿真通过, 并提交一篇课程设计说明书。设计工作量1、汇编或 C51 语言程序设计;2、程序调试;3、在 Proteus 上进行仿真成功,进行实验板下载调试;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。工作计划起止日期工作内容第一天 课题绍,答疑,收集材料,C51介绍第二天设计方案论证,
3、练习编写 C51 程序第三天第六天程序设计第六天第八天程序调试、仿真第九天第十天 系统测试并编写设计说明书教研室意见 年 月 日系(部)主管领导意见 年 月 日目录一、12864液晶的工作原理5二、方案设计52.1 实物硬件设计52.2 系统硬件设计62.2.1 主芯片模块62.2.2 晶振和复位模块62.2.3 按钮模块72.3 系统软件设计72.3.1 主程序设计7三、仿真和分析8四、总结体会9参考文献10一、12864液晶的工作原理 液晶显示屏中的业态光电显示材料,利用液晶的电光效应把电信号转换成数字符、图像等可见信号。如图1-1,液晶正常情况下,其分子排列很有秩序,显得清澈透明,一旦加
4、上直流电场后,分子的排列被打乱,一部分液晶变的不透明,颜色加深因而能显示数字和图像。管脚一共1个CS1左半屏片选端,CS2右半屏片选端;V0液晶显示驱动电压,通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,也叫D/I;R/W读写选择信号,H为读,L为写,。E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0。DB0-DB7数据传输端口。RST复位信号。-VOUT和V0为液晶显示驱动电压。 12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示
5、,也可以显示8×4个(16×16点阵)汉字。 图1-1 12864LCD液晶显示屏二、方案设计 2.1 实物硬件设计 单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS1302时钟控制模块。通过这六个模块的协调工作就可以完成相应的液晶屏控制和显示功能。这六个模块的相互连接如图2-1: 图2-1 硬件组成框图 2.2 系统硬件设计 本硬件电路主要由四大模块组成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块。 2.2.1 主芯片模块 主芯片模块即单片机模块,XTAL1:接外部晶振
6、和微调电容的一端。在片内,它是振荡电路反相放大器的输入端。XTAL2:接外部晶振和微调是容的一端。RST:AT89C51的复位信号输入引脚,高电平有效。当此输入端保持两个机器周期的高电平时,就可以完成复位操作。ALE:允许地址锁存信号端。EA:该引脚为低电平时,则读取外部的程序代码来执行程序。P0、P1、P2、P3:8位并行输入输出口。每个端口都是8位准双向口,共占32只引脚。每一条都能独立地用作输入或输出。每个端口都包括一个锁存器、一个输出驱器和输入缓冲器。作输出时,数据可以锁存;作输入时,数据可以缓冲。图如图31。 图3-1 单片机引脚图 2.2.2 晶振和复位模块 89C51芯片内部有一
7、个高增益反相放大器,用于构成振荡器。如图32,反相放大器的输入端为XTAL1,输出端XTAL2,两个跨接石英晶体及两个电容就可以构成稳定的自激振荡器。XTAL1 是片内振荡器的反相放大器输入端,XTAL2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2 悬空。一个晶体振荡器,接在单片机内部的振荡电路上,两个电容是起振电容,频率越高,应该越小。 图4-1 晶振模块 在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位。复位后P0P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄
8、存器SFR 全部清零。当复位脚由高电平变为低电平时,芯片为ROM 的00H 处开始运行程序。如上图5-1所示复位电路,由于复位时高电平有效,当刚接上电源的瞬间,电容C1两端相当于短路,即相当于给RESET引脚一个高电平,等充电结束时(这个时间很短暂),电容相当于断开,这时已经完成了复位动作。 图5-1 复位模块 2.2.3 按钮模块 本模块采用四个按钮进行控制,通过串行口输入输出连接,当K1按键波动一次后,方可进行年、月、日、星期、时、分的改变,当循环满时,按下K0可实现对闹钟的改变。按键K2、K3分别实现加一减一的操作。 图6-1 按钮模块2.3 系统软件设计 2.3.1 主程序设计 图7-
9、1 主程序流程图 图8-1 LCD显示程序和初始化子程序流程图三、仿真和分析将程序下载到单片机开发板上,LCD12864显示如下图,第一行为汉字“数字电子钟”,第二行为时分秒,第三行为年月日以及星期,第四行为闹钟,通过按键可实现时间的调整,也可实现整点报时和闹钟。符合设计要求。 图9-1 实物仿真图程序:#include<reg52.h>#include<intrins.h>#include<stdlib.h>#define uchar unsigned char#define uint unsigned intsbit rs=P10;/12864引脚定义s
10、bit rw=P11;sbit en=P12;sbit PSB=P13;sbit beep=P34;/蜂鸣器引脚定义sbit k1=P35;/按键定义sbit k2=P36;sbit k3=P37;sbit k0=P00;uint t,k,kk;uchar shi,fen,miao,nian=13,yue,ri,zhou,shi0,fen0,miao0;uchar code dis1=0xca,0xfd,"字电子钟"/显示字组uchar code dis2="00时00分00秒"uchar code dis3="00年00月00日 1"
11、;uchar code dis4="闹钟00时00分00秒"void delayms(uint xms)/延时xms函数uchar i,j;for(i=xms;i>0;i-)for(j=110;j>0;j-);void warn(uchar xn)/“嘟”xn次函数uint nn;for(nn=0;nn<xn;nn+)uint n;for(n=2000;n>0;n-)beep=1;delayms(1);beep=0;delayms(2);for(n=1000;n>0;n-)beep=1;delayms(3);void warn3s()/3s报警
12、函数uint n;for(n=3000;n>0;n-)beep=0;delayms(2);beep=1;delayms(1); void write_com(uchar com)/12864写指令函数rs=0;rw=0;en=0;P2=com;delayms(5);en=1;delayms(5);en=0;void write_data(uchar date)/12864数据指令函数rs=1;rw=0;en=0;P2=date;delayms(5);en=1;delayms(5);en=0;void lcd_pos(uchar X,uchar Y)/12864显示位置函数uchar po
13、s;if(X=0)X=0x80;if(X=1)X=0x90;if(X=2)X=0x88;if(X=3)X=0x98;pos=X+Y;write_com(pos);void write_sfm(int add,uint date)/时钟数值函数uchar shi,ge;shi=date/10;ge=date%10;lcd_pos(1,0+add);write_data(0x30+shi);write_data(0x30+ge);void write_sfm1(int add1,uint date1)/年月日数值函数uchar shi,ge;shi=date1/10;ge=date1%10;lcd
14、_pos(2,0+add1);write_data(0x30+shi);write_data(0x30+ge);void write_sfm2(int add2,uint date2)/闹钟数值函数uchar shi,ge;shi=date2/10;ge=date2%10;lcd_pos(3,0+add2);write_data(0x30+shi);write_data(0x30+ge);void keyscan()/按键扫描函数if(k0=0)/闹钟按键操作delayms(5);if(k0=0)while(!k0);kk+;if(kk=1)TR0=0;write_com(0x0f);lcd_
15、pos(3,2);if(kk=2)lcd_pos(3,4);if(kk=3)lcd_pos(3,6);if(kk=4)kk=0;TR0=1;write_com(0x0c);if(k1=0)/调试按键操作delayms(5);if(k1=0)k+;while(!k1);if(k=1)TR0=0;write_com(0x0f);lcd_pos(1,4);if(k=2)lcd_pos(1,2);if(k=3)lcd_pos(1,0);if(k=4)lcd_pos(2,4);if(k=5)lcd_pos(2,2);if(k=6)lcd_pos(2,0);if(k=7)lcd_pos(2,7);if(k
16、=8)k=0;write_com(0x0c);TR0=1;if(k!=0)if(k2=0)/“+1”按键操作delayms(5);if(k2=0)while(!k2);if(k=1)miao+;if(miao=60)miao=0;write_sfm(4,miao);lcd_pos(1,4);/write_sfm(4,miao);if(k=2)fen+;if(fen=60)fen=0;write_sfm(2,fen);lcd_pos(1,2);/write_sfm(2,fen);if(k=3)shi+;if(shi=24)shi=0;write_sfm(0,shi);lcd_pos(1,0);/
17、write_sfm(0,shi);if(k=4)ri+;if(ri=32)ri=1;write_sfm1(4,ri);lcd_pos(2,4);/write_sfm1(4,ri);if(k=5)yue+;if(yue=13)yue=1;write_sfm1(2,yue);lcd_pos(2,2);/write_sfm1(2,yue);if(k=6)nian+;if(nian=50)nian=0;write_sfm1(0,nian);lcd_pos(2,0);/write_sfm1(0,nian);if(k=7)zhou+;if(zhou=8)zhou=0;write_sfm1(7,zhou);
18、lcd_pos(2,7);/write_sfm1(7,zhou);if(k3=0)/“-1按键操作”delayms(5);if(k3=0)while(!k3);if(k=1)miao-;if(miao=-1)miao=59;write_sfm(4,miao);lcd_pos(1,4);/write_sfm(4,miao);if(k=2)fen-;if(fen=-1)fen=59;write_sfm(2,fen);lcd_pos(1,2);/write_sfm(2,fen);if(k=3)shi-;if(shi=-1)shi=23;write_sfm(0,shi);lcd_pos(1,0);/w
19、rite_sfm(0,shi);if(k=4)ri-;if(ri=-1)ri=31;write_sfm1(4,ri);lcd_pos(2,4);/write_sfm1(4,ri);if(k=5)yue-;if(yue=-1)yue=12;write_sfm1(2,yue);lcd_pos(2,2);/write_sfm1(2,yue);if(k=6)nian-;if(nian=-1)nian=50;write_sfm1(0,nian);lcd_pos(2,0);/write_sfm1(0,nian);if(k=7)zhou-;if(zhou=-1)zhou=7;write_sfm1(7,zho
20、u);lcd_pos(2,7);/write_sfm1(7,zhou);if(k=0)if(k2=0)delayms(5);if(k2=0)while(!k2);if(kk=3)miao0+;if(miao0=60)miao0=0;write_sfm2(6,miao0);lcd_pos(3,6);/write_sfm2(6,miao0);if(kk=2)fen0+;if(fen0=60)fen0=0;write_sfm2(4,fen0);lcd_pos(3,4);/write_sfm2(4,fen0);if(kk=1)shi0+;if(shi0=24)shi0=0;write_sfm2(2,s
21、hi0);lcd_pos(3,2);/write_sfm2(2,shi0);if(k3=0)delayms(5);if(k3=0)while(!k3);if(kk=3)miao0-;if(miao0=-1)miao0=59;write_sfm2(6,miao0);lcd_pos(3,6);/write_sfm2(6,miao0);if(kk=2)fen0-;if(fen0=-1)fen0=59;write_sfm2(4,fen0);lcd_pos(3,4);/write_sfm2(4,fen0);if(kk=1)shi0-;if(shi0=-1)shi0=23;write_sfm2(2,shi
22、0);lcd_pos(3,2);/write_sfm2(2,shi0);void init()/初始化函数(12864初始化,定时器初始化)PSB=1;write_com(0x30);delayms(5);write_com(0x0c);delayms(5);write_com(0x01);delayms(5);TH0=(65535-50000)/256;TL0=(65535-50000)%256;TMOD=0x01;ET0=1;EA=1;TR0=1;void main()/主函数uchar i;delayms(10);init();lcd_pos(0,2);/第一排显示i=0;while(d
23、is1i!='0')write_data(dis1i);i+;lcd_pos(1,0);/第二排显示i=0;while(dis2i!='0')write_data(dis2i);i+;lcd_pos(2,0);/第三行显示i=0;while(dis3i!='0')write_data(dis3i);i+;lcd_pos(3,0);/第四行显示i=0;while(dis4i!='0')write_data(dis4i);i+;while(1)keyscan();if(miao=0&&fen=0&&TR
24、0=1)/整点报时判断warn(shi);if(miao=miao0&&fen=fen0&&shi=shi0&&TR0=1)/闹钟判断warn3s();if(miao=0&&fen=0&&miao=miao0&&fen=fen0&&shi=shi0&&TR0=1)/整点报时、闹钟时冲突操作warn3s();while(1);void timer() interrupt 1/定时器函数TH0=15535/256;TL0=15535%256;t+; /50ms计数一次if
25、(t=20)t=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;zhou+;if(zhou=8)zhou=1;ri+;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)if(ri=32)ri=1;yue+;if(yue=13)yue=1;nian+;if(yue=4|yue=6|yue=9|yue=11)if(ri=31)ri=1;yue+;if(yue=13)yue=1;nian+;if(yue=2)if(nian%4)=0)if(ri=30)ri=1;yue+
26、;if(yue=13)yue=1;nian+;if(nian%4)!=0)if(ri=29)ri=1;yue+;if(yue=13)yue=1;nian+;write_sfm1(0,nian);write_sfm1(2,yue);write_sfm1(7,zhou);write_sfm1(4,ri);write_sfm(0,shi);write_sfm(2,fen);write_sfm(4,miao);四、总结体会 通过这为期两个星期的课程设计,我从中认识到了自己很多方面的不足。在第一个星期的课程设计中,是通过proteus仿真来实现要求中的各种功能。由于自己课余时间没有对单片机相关的知识进行
27、深入了解,所以在开始做设计时,无从下手,不知道该怎么布置仿真图,更不知道怎么通过写程序来实现课题要求。不过有的课题可以参考课本上的程序,例如彩灯中断,就是在课本上流水灯的基础上加入一个中断程序,不过中断程序加在何处自己还是有一点疑惑,通过翻阅课本上有关中断方面的知识后,了解了中断系统的结构及工作原理,再加入了中断程序后,程序还是有一点小问题,在请教了同学之后,找到了问题所在,修改程序以后实现了要求。而串转并,在以前的实验中做过类似的,所以整体比较顺利。利用彩灯计数一开始不太明白这个要求的意思,请教了同学才明白要求的意思。根据二进制的计算转化成彩灯的亮灭,虽然程序很短,但我心里还是有很大的成就感。在做方波的输出时,在写程序之前参考了一下同学的程序,搞懂了原理,才完成了设计。在这之后,有关于LCD的设计,在这之前,还没有接触过LCD,所以上网查了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业内部实验室环境监测的必要性分析
- 商业决策支持系统的嵌入式技术解析
- 2025中国联通楚雄州分公司运营公司招聘26人高频重点提升(共500题)附带答案详解
- 2025中国移动通信集团浙江限公司校园招聘1130人高频重点提升(共500题)附带答案详解
- 2025中国石油辽阳石化分公司高校毕业生招聘93人(辽宁)高频重点提升(共500题)附带答案详解
- 2025中国电建集团昆明勘测设计研究院限公司招聘100人高频重点提升(共500题)附带答案详解
- 板坯连铸机行业相关投资计划提议范本
- 2025中国烟草郑州烟草研究院招聘4人高频重点提升(共500题)附带答案详解
- 2025中国建筑一局(集团)限公司轨道交通项目部总工程师招聘1人高频重点提升(共500题)附带答案详解
- 2025中国交通建设集团限公司招聘200人高频重点提升(共500题)附带答案详解
- 建筑起重司索信号工共40页PPT课件
- 江苏省无锡市2022年苏教版四年级上册期末测试数学试卷【含答案】
- 粮食储备库扩建工程防水施工方案
- 罗西尼亚那第二号,Rossiniana No.2;朱利亚尼,Mauro Giuliani(古典吉他谱)
- 经颅多普勒超声(TCD)
- 高压蒸汽灭菌效果监测记录簿表(完整版)
- 作文考试专用稿纸 (A3完美打印版)
- 电厂一次调频试验方案
- 装修公司验收单
- 染色体标本的制作及组型观察
- 2003年高考全国卷.理科数学试题及答案
评论
0/150
提交评论