完整版电子时钟LCD显示.docx

上传人:b****5 文档编号:11659212 上传时间:2023-03-29 格式:DOCX 页数:15 大小:19.56KB
下载 相关 举报
完整版电子时钟LCD显示.docx_第1页
第1页 / 共15页
完整版电子时钟LCD显示.docx_第2页
第2页 / 共15页
完整版电子时钟LCD显示.docx_第3页
第3页 / 共15页
完整版电子时钟LCD显示.docx_第4页
第4页 / 共15页
完整版电子时钟LCD显示.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

完整版电子时钟LCD显示.docx

《完整版电子时钟LCD显示.docx》由会员分享,可在线阅读,更多相关《完整版电子时钟LCD显示.docx(15页珍藏版)》请在冰豆网上搜索。

完整版电子时钟LCD显示.docx

完整版电子时钟LCD显示

 

电气工程及自动化专业

 

单片机原理及应用课程设计报告

 

姓名:

XXXXXX

学号:

XXXXXXX

专业班级:

XXXXXX

题目:

电子时钟(LCD显示)

 

电气与电子工程学院

二〇一四年十二月三十日

 

 

2

2

2

3

4

5

7

13

13

14

 

1

 

一、设计目的

1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显

示当前的时间。

2、使用字符型LCD显示器显示当前时间。

显示格式为“时时:

分:

秒秒”。

3、用4个功能键操作来设置当前时间。

4、熟悉掌握proteus编成软件以及keil软件的使用

二、设计任务与要求

本设计以AT89C51单片机为核心,通过时钟程序的编写,并在LCD显示器上显示出来。

该编程的核心在于定时器中断及循环往复判断是否有按键操作,并对每个按键的操作在LCD显示器上作出相应的反应。

由于LCD显示器每八位对应一个字符,故把秒、分、时的个位和十位分开表示。

该课题中有四个控制开关KM1、KM2、KM3、KM4分别控制时、分、秒、确定的调整,时间按递增的方式调整,每点一次按钮则相应的时间个位加以,且时间调整不干扰其他为调整时间的显示。

三、设计原理分析

1、按照系统的设计功能要求,本时钟系统的设计必须采用单片

机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟的调整及显示。

 

时钟电路

 

数据显示

 

控按键调时

 

图一系统总原理图

 

2

 

2、软件主要完成功能

 

(1)显示时间程序

用软件调节时间,通过程序的调节,最后用LED现实时钟

(2)调节时间程序

按键调节时间,能实现时、分的调节

 

3、软件设计主要流程

 

时间控制程序

时间控制程序,用中断准确的控制时间,采用60进制,60秒为一分钟,60分钟为一个小时,全天设置为24小时。

四、硬件资源及原理图

AT89C51芯片

AT89C51是美国ATMEL公司生产的8位FlashROM单片机。

其最突出的优点是片内ROM为FlashROM,可擦写1000次以上,应用并不复杂的通用ROM写入器就能方便的擦写,读取也很方便,价格低廉,具有片程序ROM二级保密系统。

因此可灵活应用于各种控制领域。

AT89C51包含以下一些功能部件:

1.一个8位CPU;

2.一个片内振荡器和时钟电路;

3.4KBFlashROM;

4.128B内RAM;

5.可寻址64KB的外ROM和外RAM控制电路;

6.两个16位定时/计数器;

7.21个特殊功能寄存器;

8.4个8位并行I/O口;

9.一个可编程全双工串行口;

10.5个中断源,可设置成2个优先级。

AT89C51单片机一般采用双列直插DIP封装,共40个引脚,图2-1为其引脚排列图。

40个引脚大致可分为4类:

电源、时钟、控制各I/O引脚

 

3

 

五、硬件图

 

4

 

六、程序框图

 

LCD显示

 

设置T0为方式1

 

设中断次数为20

 

清计时单元

 

开中断

 

启动T0

 

调用显示子程序

 

按键程序

 

调用按键显示子程序

 

时钟主程序流程

 

5

 

保护现场

 

设置计数初值

 

1S到?

 

(40H)+1(40H)

 

N

(40H)=10?

 

1(40H)

 

(41H)+1(41H)

N

 

(41H)=5?

 

1(41H)

 

(43H)+1(43H)

 

N

(43H)=10?

 

1(43H)

 

(44H)+1(44H)

 

N

(44H)=5?

 

0(44H)

 

(46H)+1(46H)

N

(46H)=4?

 

N

(47H)=2?

 

0

(46H)

(0)

(47H)

(46H)+1

(46H)

 

恢复现场

 

返回

 

(46H)=10?

 

0(46H)

 

(47)+1(47)

 

中断服务流程图

 

6

 

七、程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineDelayNOP(){_nop_();_nop_();_nop_();_nop_();}

sbitK1=P0^0;

sbitK2=P0^1;

sbitK3=P0^2;

sbitK4=P0^3;

sbitSPK=P3^0;

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

ucharcodeStr1[]="CurrentTime";//一下两个字符串的串

长均为16

ucharcodeStr2[]="SetNewTime...";

ucharHMS_String[]="00:

00:

00";//带显示的时间串

bitSettime=0;//是否修改时间

bitChange_H_or_M=1;//1表示修改时.0表示修改分ucharMilliSecond,Hour=0,Minute=0,Second=0;

//延时函数

voidDelayMS(uintx)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//LCD忙状态检测

 

bitLCD_Busy_Check()

{

 

7

 

bitresult;

RS=0;RW=1;E=1;DelayNOP();result=(bit)(P0&0x80);E=0;

returnresult;

}

//写LCD命令

voidLCD_Write_Command(ucharcmd)

{

while(LCD_Busy_Check());//判断LCD是否忙碌

RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;DelayNOP();

E=1;DelayNOP();E=0;

}

 

//设置LCD显示位置

voidLCD_Set_Pos(ucharpos)

{

LCD_Write_Command(pos|0x80);

}

//写LCD数据

voidLCD_Write_Data(uchardat)

{

while(LCD_Busy_Check());//判断LCD是否忙碌

RS=1;RW=0;E=0;

P0=dat;DelayNOP();

E=1;DelayNOP();E=0;

}

//LCD初始化

voidLCD_Initialize()

{

LCD_Write_Command(0x38);DelayMS

(1);

LCD_Write_Command(0x0c);DelayMS

(1);

 

8

 

LCD_Write_Command(0x06);DelayMS

(1);

LCD_Write_Command(0x01);DelayMS

(1);

}

//显示函数,在LCD指定的行上显示字符串

voidDisplay_String(uchar*str,ucharLineNo)

{

uchark;

LCD_Set_Pos(LineNo);

for(k=0;k<16;k++)LCD_Write_Data(str[k]);

}

//蜂鸣函数

voidBeep()

{

uchari,j=70;

for(i=0;i<200;i++)

{

while(--j);SPK=~SPK;

}

DelayMS(300);SPK=0;

}

//时分秒显示

voidDisplay_HMS(ucharh,m,s)

{

if(Settime)HMS_String[3]='>';//

显示修改标志

elseHMS_String[3]='';

//

不显示修改标志

HMS_String[4]=h/10+'0';

//

HMS_String[5]=h%10+'0';

HMS_String[7]=m/10+'0';

//

HMS_String[8]=m%10+'0';

HMS_String[10]=s/10+'0';

//

HMS_String[11]=s%10+'0';

 

9

 

Display_String(HMS_String,0x40);

}

//设置时间

voidChange_Time()

{

Settime=0;

if(K1==0||K2==0||K3==0)//按下k1k2k3中的任何一个键即进

入修改状态

{

TR0=0;

Display_String(Str2,0x00);//第一行提示修改时间

Settime=1;

}

while(Settime)

{

if(K1==0)//确定调整小时还是分钟

{

Beep();

while(K1==0)

Change_H_or_M=!

Change_H_or_M;

}

elseif(K2==0)//增加

{

Beep();

while(K2==0);

if(Change_H_or_M==1)

{if(++Hour==24)Hour=0;}

else

{if(++Minute==60)Minute=0;}

}

elseif(K3==0)//减少

 

10

 

{

Beep();

while(K3==0);

if(Change_H_or_M==1)

{if(--Hour==0xff)Hour=23;}

else

{if(--Minute==0xff)Minute=59;}

}

elseif(K4==0)//确定

{

Beep();

while(K4==0);

Display_String(Str1,0x00);//第一行还原显示str1

Settime=0;

TR0=1;

}

Display_HMS(Hour,Minute,Second);

}//外层While在这里结束

}

//定时器0中断

voidTime0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//重新装入50MS定时

if(++MilliSecond==20)//50*20=1s

{

MilliSecond=0;

if(++Second==60)

{

Second=0;

if(++Minute==60)

 

11

 

{

Minute=0;

if(++Hour==24)

{

Hour=0;Minute=0;Second=0;

}

}

}

}

}

//主函数

voidmain()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

IE=0x82;

SPK=0;

LCD_Initialize();

Display_String(Str1,0x00);//第一行显示

TR0=1;

P1=0xFF;

while

(1)

{

Display_HMS(Hour,Minute,Second);//第二行显示时分秒

DelayMS(500);

Change_Time();//显示过程中允许修

改时间

}

}

 

12

 

八、调试运行

1、按硬件原理图接线用4个功能键操作来设置当前时间。

功能键K1~

K4功能如下。

K1—进入设置现在的时间。

K2—设置小时。

K3—设置分钟。

K4—确认完成设置。

程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:

00:

00”,然后开始计时

九、仿真截图

结论:

采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。

根据仿真结果可知该编程及硬件电路符合要求:

 

13

 

十、设计心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要

的。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。

同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

 

14

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

当前位置:首页 > 小学教育 > 其它课程

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

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