当前位置:文档之家› 基于单片机的电子时钟设计报告(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.0KM2 BIT P1.1KM3 BIT P1.2RS EQU P2.0RW EQU P2.1E EQU P2.2IN_0 EQU P0SECL EQU 40H ;秒低位SECH EQU 41H ;秒高位MH1 EQU 42H ;冒号MINL EQU 43H ;分低位MINH EQU 44H ;分高位MH2 EQU 45H ;冒号HOURL EQU 46H ;时低位HOURH EQU 47H ;时高位ORG 0000HAJMP MAINORG 000BHAJMP INTT_0MAIN: MOV R2,#20ACALL INIT_LCD ;初始化液晶MOV R5,#00HMOV IN_0,#84H ;写入显示起始地址(第一行第五个位置)ACALL ENABLEMOV TH0,#3CH ;50MSMOV TL0,#0B0HMOV TMOD,#01HACALL SJCZSETB EASETB ET0SETB TR0LCALL A1START1: LCALL WDATA1LCALL WDATA2AJMP START1;*******控制键*******A1: LCALL WDATA2LCALL WDATA1JNB KM1,S1JNB KM2,S2JNB KM3,S3AJMP A1;*****调整小时*****S1: LCALL DELAYLJB KM1,A1MOV A,HOURHCJNE A,#02H,ST1MOV A,HOURLCJNE A,#03H,ST2MOV HOURH,#00HMOV HOURL,#00HAJMP J1ST1: MOV A,HOURLCJNE A,#09H,ST2INC HOURHMOV HOURL,#00HAJMP J1ST2: INC HOURLAJMP J1J1: JB KM1,S1LCALL WDATA1AJMP J1;*****调整分钟*****S2: LCALL DELAYLJB KM2,A1MOV A,MINHCJNE A,#05H,ST3MOV A,MINLCJNE A,#09H,ST4MOV MINH,#00HMOV MINL,#00HAJMP J2ST3: MOV A,MINLCJNE A,#09H,ST4INC MINHMOV MINL,#00HAJMP J2ST4: INC MINLAJMP J2J2: JB KM2,S2LCALL WDATA1AJMP J2;*****调整秒*****S3: LCALL DELAYLJB KM3,A1MOV A,SECHCJNE A,#05H,ST5MOV A,SECLCJNE A,#09H,ST6MOV SECH,#00HMOV SECL,#00HAJMP J3ST5: MOV A,SECLCJNE A,#09H,ST6INC SECHMOV SECL,#00HAJMP J3ST6: INC SECLAJMP J3J3: JB KM3,S3LCALL WDATA1AJMP J3;****设定显示初值***SJCZ: MOV 40H,#0 ;显示初值是23:59:00 MOV 41H,#0MOV 42H,#10MOV 43H,#9MOV 44H,#5MOV 45H,#10MOV 46H,#3MOV 47H,#2RETINTT_0: PUSH PSWPUSH ACC ;T0定时器中断MOV TL0,#0B0H ;送定时初值MOV TH0,#3CHDJNZ R2,TTMOV R2,#20INC SECL ;秒记数,到60S就清0MOV A,SECLCJNE A,#0AH,TTINC SECHMOV SECL,#00HMOV A,SECHCJNE A,#06H,TTMOV SECH,#00HINC MINL ;分记数,到60分请0MOV A,MINLCJNE A,#0AH,TTMOV MINL,#00HINC MINHMOV A,MINHCJNE A,#06H,TTMOV MINH,#00HINC HOURL ;时记数,到24时清0MOV A,HOURLCJNE A,#04H,TT2MOV A,HOURHCJNE A,#02H,TT1MOV HOURL,#00HMOV HOURH,#00HAJMP TTTT2: CJNE A,#0AH,TTMOV HOURL ,#00HINC HOURHAJMP TTTT1: CJNE A,#02H,TTMOV HOURL,#00HMOV HOURH,#00HAJMP TTTT: POP ACCPOP PSWRETI;****液晶初始化****INIT_LCD:ACALL DELAYL ;延时,等待LCD完成电源的启动MOV IN_0,#01H ;清屏并光标复位ACALL ENABLEMOV IN_0,#38H ;设置显示模式:8位2行5x7点阵ACALL ENABLEMOV IN_0,#0CH ;显示器开、光标关、光标不闪烁ACALL ENABLEMOV IN_0,#06H ;文字不动,光标自动右移ACALL ENABLEMOV IN_0,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLERET;****写数据程序****WDATA1: MOV IN_0,#84H ;写入显示起始地址(第一行第五个位置) ACALL ENABLEMOV R1,#08HMOV R0,#47HWDATA_1: MOV A,@R0MOV DPTR,#TABLEMOVC A,@A+DPTRMOV IN_0,A ;写入数据SETB RSCLR RWCLR EACALL CHECKBUSYSETB E ; 忙检测DEC R0DJNZ R1,WDATA_1MOV R1,#08HRETWDATA2: MOV IN_0,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLEMOV R1,#10HMOV R0,#00HMOV DPTR,#TABWDATA_2: MOV A,R0MOV DPTR,#TABMOVC A,@A+DPTRMOV IN_0,A ;写入数据SETB RSCLR RWCLR EACALL CHECKBUSYSETB E ;忙检测INC R0DJNZ R1,WDATA_2MOV R1,#08HRET;****显示符号表****TABLE: DB 30H,31H,32H,33H,34H,35H ;0 1 2 3 4 5DB 36H,37H,38H,39H,3AH,80H,2EH ;6 7 8 9 : 空格 .TAB: DB " MADE IN CHINA";******写指令****ENABLE: CLR RS ;写入控制命令的子程序CLR RWCLR EACALL CHECKBUSYSETB ERETCHECKBUSY:MOV IN_0,#0FFH ;判断液晶显示器是否忙的子程序CLR RSSETB RWCLR ENOPSETB EJB P0.7,CHECKBUSY ;如果P0.7为高电平表示忙就循环等待RETDELAYL: MOV R7,#100 ;延时程序D1: MOV R6,#200DJNZ R6,$DJNZ R7,D1RETEND。

相关主题