LCD12864液晶电子钟.docx

上传人:b****8 文档编号:10152433 上传时间:2023-02-08 格式:DOCX 页数:24 大小:206.72KB
下载 相关 举报
LCD12864液晶电子钟.docx_第1页
第1页 / 共24页
LCD12864液晶电子钟.docx_第2页
第2页 / 共24页
LCD12864液晶电子钟.docx_第3页
第3页 / 共24页
LCD12864液晶电子钟.docx_第4页
第4页 / 共24页
LCD12864液晶电子钟.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

LCD12864液晶电子钟.docx

《LCD12864液晶电子钟.docx》由会员分享,可在线阅读,更多相关《LCD12864液晶电子钟.docx(24页珍藏版)》请在冰豆网上搜索。

LCD12864液晶电子钟.docx

LCD12864液晶电子钟

 

长沙学院

 

《单片机原理及应用》

课程设计说明书

题目

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程序

第三天——第六天

程序设计

第六天——第八天

程序调试、仿真

第九天——第十天

系统测试并编写设计说明书

教研室意见

 

年月日

系(部)主管领导意见

年月日

 

一、整体方案设计

1、单片机的选择

单片微型计算机主要由微处理器、存储器、I/O接口电路等组成。

鉴于在本学期的学习和实习中主要是以MCS——51系列的单片机为对象,故而本次课程设计选择以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个变量:

S010.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】李华主编.《MCS——51系列单片机实用接口技术》[M].北京航空航天大学出版社1993.8

 

程序清单

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P2^6;

sbiten=P2^7;

sbitwd=P2^0;

sbitbeet=P2^2;

sbitkey1=P1^0;

sbitkey2=P1^1;

sbitkey3=P1^2;

sbitkey4=P1^3;

charhour=23,minute=59,second=58,count=0;

charshi=0,fen=0,miao=0,hm;

intyear=2013;

charmonth=12,day=30,mm=0,cc=7;

uinttemp;

floatf_temp;

ucharcodetable1[]={"数字电子钟"};

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--);

for(y=110;y>0;y--);

}

voidfengmingqi()

{

beet=0;delay

(1);beet=1;delay

(1);

}

voidxieling_shu(ucharaa,ucharbb)

{

if(aa==1){rs=0;}

if(aa==0){rs=1;}

P0=bb;delay

(1);

en=1;delay

(1);

en=0;delay

(1);

}

voidxieludizhi(ucharx,uchary)

{

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;

}

}

voidxiezifuchuan(uchar*dd)

{

while(*dd!

='\0')

{

xieling_shu(0,*dd++);

}

}

voidqingping()

{

xieling_shu(1,0x01);

xieling_shu(1,0x01);

xieling_shu(1,0x01);

delay(20);

}

voidinit_12864()

{

xieling_shu(1,0x30);

xieling_shu(1,0x30);

xieling_shu(1,0x0C);

xieling_shu(1,0x01);

xieling_shu(1,0x06);

}

voidinit_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);

}

voiddisplay()

{

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);

}

voiddisplay1()

{

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);

}

voidxingqi()

{

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;

}

}

voidanjian()

{

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<=-1){miao=59;}}}

while(key3==0);

}

if(mm==2&&key2==0)

{

if(hm==0){delay

(1);if(key2==0){minute++;if(minute>=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<=-1){fen=59;}}}

while(key3==0);

}

if(mm==3&&key2==0)

{

if(hm==0){delay

(1);if(key2==0){hour++;if(hour>=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<=-1){shi=23;}}}

while(key3==0);

}

if(mm==4&&key2==0)

{

delay

(1);if(key2==0){day++;if(day>=31){day=1;}}

while(key2==0);

}

if(mm==4&&key3==0)

{

delay

(1);if(key3==0){day--;if(day<=0){day=31;}}

while(key3==0);

}

if(mm==5&&key2==0)

{

delay

(1);if(key2==0){month++;if(month>=13){month=1;}}

while(key2==0);

}

if(mm==5&&key3==0)

{

delay

(1);if(key3==0){month--;if(month<=0){month=12;}}

while(key3==0);

}

if(mm==6&&key2==0)

{

delay

(1);if(key2==0){year++;}

while(key2==0);

}

if(mm==6&&key3==0)

{

delay

(1);if(key3==0){year--;}

while(key3==0);

}

if(mm==7&&key2==0)

{

delay

(1);if(key2==0){cc++;if(cc>=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);

}

}

voiddsreset(void)

{

uinti;

wd=0;

i=103;

while(i>=0)i--;

wd=1;

i=4;

while(i>0)i--;

}

bittempreadbit(void)

{

uinti;

bitdat;

wd=0;i++;

wd=1;i++;i++;

dat=wd;

i=8;

while(i>0)i--;

return(dat);

}

uchartempreadvoid()

{

uchari,j,dat;

dat=0;

for(i=1;j<=8;i++)

{

j=tempreadbit();

dat=(j<<7)|(dat>>1);

}

return(dat);

}

voidtempwritebyte(uchardat)

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

wd=0;

i++;i++;

wd=1;

i=8;while(i>0)i--;

}

else

{

wd=0;

i=8;while(i>0)i--;

wd=1;

i++;i++;

}

}

}

voidmain()

{

ucharbuff[4];

TMOD=0x01;

EA=1;

ET0=1;

TR0=1;

TH0=50000/256;

TL0=50000%256;

init_12864();

init_zifu();

hm=0;

if(hm==0)display();

elsedisplay1();

anjian();

xingqi();

if(minute==59&&second==59)

{

fengmignqi();

}

if(shi==hour&&fen==minute&&miao>=second&&miao<=second+3)

{

fengmignqi();

}

}

voidtime()interrupt1

{

TH0=-5000/256;

TL0=-5000%256;

count++;

if(count==20)

{

count=0;

second++;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

minute=0;

hour++;

if(hour=24)

{

hour=0;

day++;

cc++;

if(cc===8)cc=1;

if(day==31)

{

day=1;

month++;

if(month==13)

{

month=1;

year++;

}

}

}

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

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

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