基于单片机的电子时钟设计报告(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