基于单片机的电子时钟设计报告(LCD显示)

基于单片机的电子时钟设计报告(LCD显示)
基于单片机的电子时钟设计报告(LCD显示)

单片机原理及应用课程设计任务书

题目:电子时钟(LCD显示)

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

使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。

用3个功能键操作来设置当前时间。功能键K1~K4功能下。

K1—设置小时。

K2—设置分钟。

K3—设置秒。

程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。

2、工作原理

本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。

3、参考电路

硬件设计电路图如下图所示:

硬件电路原理图

单片机原理及应用课程设计任务书

题目:电子时钟(LCD显示)

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

使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。

用3个功能键操作来设置当前时间。功能键K1~K4功能下。

K1—设置小时。

K2—设置分钟。

K3—设置秒。

程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,

然后开始计时。

2、工作原理

本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。

3、参考电路

硬件设计电路图如下图所示:

硬件电路原理图

基于AT89C51单片机的电子时钟设计报告

一、设计要求与目的

1)设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间。

2)、使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。3)、用3个功能键操作来设置当前时间。

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

二、本设计原理

本设计以AT89C51单片机为核心,通过时钟程序的编写,并在LCD显示器上显示出来。该编程的核心在于定时器中断及循环往复判断是否有按键操作,并对每个按键的操作在LCD显示器上作出相应的反应。由于LCD显示器每八位对应一个字符,故把秒、分、时的个位和十位分开表示。

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

三、硬件设计原理(电路)

硬件电路原理图四、软件设计(流程图)

五、仿真结果与结论

5 .仿真结果与结论

初始运行显示效果如下:

用按键调节时分秒从而设置时间:

结论:采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。根据仿真结果可知该编程及硬件电路符合要求。

附录

程序设计如下:

KM1 BIT P1.0

KM2 BIT P1.1

KM3 BIT P1.2

RS EQU P2.0

RW EQU P2.1

E EQU P2.2

IN_0 EQU P0

SECL EQU 40H ;秒低位

SECH EQU 41H ;秒高位

MH1 EQU 42H ;冒号

MINL EQU 43H ;分低位

MINH EQU 44H ;分高位

MH2 EQU 45H ;冒号

HOURL EQU 46H ;时低位

HOURH EQU 47H ;时高位

ORG 0000H

AJMP MAIN

ORG 000BH

AJMP INTT_0

MAIN: MOV R2,#20

ACALL INIT_LCD ;初始化液晶

MOV R5,#00H

MOV IN_0,#84H ;写入显示起始地址(第一行第五个位置)

ACALL ENABLE

MOV TH0,#3CH ;50MS

MOV TL0,#0B0H

MOV TMOD,#01H

ACALL SJCZ

SETB EA

SETB ET0

SETB TR0

LCALL A1

START1: LCALL WDATA1

LCALL WDATA2

AJMP START1

;*******控制键*******

A1: LCALL WDATA2

LCALL WDATA1

JNB KM1,S1

JNB KM2,S2

JNB KM3,S3

AJMP A1

;*****调整小时*****

S1: LCALL DELAYL

JB KM1,A1

MOV A,HOURH

CJNE A,#02H,ST1

MOV A,HOURL

CJNE A,#03H,ST2

MOV HOURH,#00H

MOV HOURL,#00H

AJMP J1

ST1: MOV A,HOURL

CJNE A,#09H,ST2

INC HOURH

MOV HOURL,#00H

AJMP J1

ST2: INC HOURL

AJMP J1

J1: JB KM1,S1

LCALL WDATA1

AJMP J1

;*****调整分钟*****

S2: LCALL DELAYL

JB KM2,A1

MOV A,MINH

CJNE A,#05H,ST3

MOV A,MINL

CJNE A,#09H,ST4

MOV MINH,#00H

MOV MINL,#00H

AJMP J2

ST3: MOV A,MINL

CJNE A,#09H,ST4

INC MINH

MOV MINL,#00H

AJMP J2

ST4: INC MINL

AJMP J2

J2: JB KM2,S2

LCALL WDATA1

AJMP J2

;*****调整秒*****

S3: LCALL DELAYL

JB KM3,A1

MOV A,SECH

CJNE A,#05H,ST5

MOV A,SECL

CJNE A,#09H,ST6

MOV SECH,#00H

MOV SECL,#00H

AJMP J3

ST5: MOV A,SECL

CJNE A,#09H,ST6

INC SECH

MOV SECL,#00H

AJMP J3

ST6: INC SECL

AJMP J3

J3: JB KM3,S3

LCALL WDATA1

AJMP J3

;****设定显示初值***

SJCZ: MOV 40H,#0 ;显示初值是23:59:00 MOV 41H,#0

MOV 42H,#10

MOV 43H,#9

MOV 44H,#5

MOV 45H,#10

MOV 46H,#3

MOV 47H,#2

RET

INTT_0: PUSH PSW

PUSH ACC ;T0定时器中断

MOV TL0,#0B0H ;送定时初值

MOV TH0,#3CH

DJNZ R2,TT

MOV R2,#20

INC SECL ;秒记数,到60S就清0

MOV A,SECL

CJNE A,#0AH,TT

INC SECH

MOV SECL,#00H

MOV A,SECH

CJNE A,#06H,TT

MOV SECH,#00H

INC MINL ;分记数,到60分请0

MOV A,MINL

CJNE A,#0AH,TT

MOV MINL,#00H

INC MINH

MOV A,MINH

CJNE A,#06H,TT

MOV MINH,#00H

INC HOURL ;时记数,到24时清0

MOV A,HOURL

CJNE A,#04H,TT2

MOV A,HOURH

CJNE A,#02H,TT1

MOV HOURL,#00H

MOV HOURH,#00H

AJMP TT

TT2: CJNE A,#0AH,TT

MOV HOURL ,#00H

INC HOURH

AJMP TT

TT1: CJNE A,#02H,TT

MOV HOURL,#00H

MOV HOURH,#00H

AJMP TT

TT: POP ACC

POP PSW

RETI

;****液晶初始化****

INIT_LCD:ACALL DELAYL ;延时,等待LCD完成电源的启动

MOV IN_0,#01H ;清屏并光标复位

ACALL ENABLE

MOV IN_0,#38H ;设置显示模式:8位2行5x7点阵

ACALL ENABLE

MOV IN_0,#0CH ;显示器开、光标关、光标不闪烁

ACALL ENABLE

MOV IN_0,#06H ;文字不动,光标自动右移

ACALL ENABLE

MOV IN_0,#0C0H ;写入显示起始地址(第二行第一个位置)

ACALL ENABLE

RET

;****写数据程序****

WDATA1: MOV IN_0,#84H ;写入显示起始地址(第一行第五个位置) ACALL ENABLE

MOV R1,#08H

MOV R0,#47H

WDATA_1: MOV A,@R0

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV IN_0,A ;写入数据

SETB RS

CLR RW

CLR E

ACALL CHECKBUSY

SETB E ; 忙检测

DEC R0

DJNZ R1,WDATA_1

MOV R1,#08H

RET

WDATA2: MOV IN_0,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLE

MOV R1,#10H

MOV R0,#00H

MOV DPTR,#TAB

WDATA_2: MOV A,R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV IN_0,A ;写入数据

SETB RS

CLR RW

CLR E

ACALL CHECKBUSY

SETB E ;忙检测

INC R0

DJNZ R1,WDATA_2

MOV R1,#08H

RET

;****显示符号表****

TABLE: DB 30H,31H,32H,33H,34H,35H ;0 1 2 3 4 5

DB 36H,37H,38H,39H,3AH,80H,2EH ;6 7 8 9 : 空格 .

TAB: DB " MADE IN CHINA"

;******写指令****

ENABLE: CLR RS ;写入控制命令的子程序

CLR RW

CLR E

ACALL CHECKBUSY

SETB E

RET

CHECKBUSY:MOV IN_0,#0FFH ;判断液晶显示器是否忙的子程序CLR RS

SETB RW

CLR E

NOP

SETB E

JB P0.7,CHECKBUSY ;如果P0.7为高电平表示忙就循环等待

RET

DELAYL: MOV R7,#100 ;延时程序

D1: MOV R6,#200

DJNZ R6,$

DJNZ R7,D1

RET

END

相关主题
相关文档
最新文档