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

更新时间:2023-09-15 08:41:02 阅读量: 资格考试认证 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

题目:电子时钟(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分别控制时、分、秒的调整,时间按递增的方式调整,每点一次按钮则相应的时间个位加以,且时间调整不干扰其他为调整时间的显示。 三、硬件设计原理(电路)

硬件电路原理图

四、软件设计(流程图)

LCD显示 设置T0为方式1 设中断次数为20 清计时单元 开中断 启动T0 调用显示子程序 按键程序 调用按键显示子程序 时钟主程序流程

保护现场 (46H)+1 (46H) N 设置计数初值(46H)=4? N (47H)=2? 1S到? (40H)+1 (40H) N (40H)=10? 0 (46H) (0) (47H) 0 (40H) (46H)+1 (46H) (41H)+1 (41H) N (41H)=5? 0 (41H) 恢复现场 (43H)+1 (43H) N (43H)=10? 返回 (46H)=10? 0 (43H) 0 (46H) (44H)+1 (44H) N (44H)=5? (47)+1 (47) 0 (44H) 中断服务流程图

五、仿真结果与结论

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 MOV TL0,#0B0H MOV TMOD,#01H ACALL SJCZ SETB EA SETB ET0 SETB TR0 LCALL A1 START1: LCALL WDATA1 LCALL WDATA2 AJMP START1

;*******控制键******* ;秒低位 ;秒高位 ;冒号 ;分低位 ;分高位 ;冒号 ;时低位 ;时高位 ;初始化液晶 ;写入显示起始地址(第一行第五个位置) ;50MS

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 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 MOV TL0,#0B0H MOV TH0,#3CH DJNZ R2,TT MOV R2,#20

INC SECL MOV A,SECL CJNE A,#0AH,TT

INC SECH MOV SECL,#00H MOV A,SECH

;显示初值是 23:59:00 ;T0定时器中断 ;送定时初值 ;秒记数,到60S就清0

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 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 MOV IN_0,#01H ACALL ENABLE

MOV IN_0,#38H 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 ;时记数,到24时清0 ;延时,等待LCD完成电源的启动 ;清屏并光标复位 ;设置显示模式:8位2行5x7点阵

;显示器开、光标关、光标不闪烁 ;文字不动,光标自动右移 ;写入显示起始地址(第二行第一个位置) ;写入显示起始地址(第一行第五个位置)

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 \ 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

;延时程序

本文来源:https://www.bwwdw.com/article/zivh.html

Top