求一个为 51 单片机编写的 LCD 1602电子时钟的设计

最重要的——把这个设计需要的程序写出来。汇编语言(基础不好请加一些重要注释)

设计任务:
  以at89c51单片机控制的时钟,在 LCD 显示器上显示当前的时间。
基本要求:
  1.使用文字型 LCD 显示器显示当前时间。
  2.显示格式为“时时:分分:秒秒”。
  3.用4个功能键操作来设置当前时间。各个功能键的功能如下:
    K1:进入设置现在的时间。
    K2:设置小时。
    K3:设置分钟。
    K4:确认完成设置。
  4. 程序执行后工作指示灯 LED 闪烁,表示程序开始执行,LCD 显示“00:00:00”,然后开始计时。
最好附有流程图。。。

//按你的仿真图编写的
RS BIT P2.0 //重命名IO口
RW BIT P2.1
E BIT P2.2
BF BIT P3.7 //D0~D7接在P3口
K1 BIT P1.0
K2 BIT P1.1
K3 BIT P1.2
K4 BIT P1.3
NOP
MOV TMOD ,#11H //设定时器0和1工作在定时方式一
MOV IE,#8AH
SETB TR0
AJMP L0
JS: MOV TH0,#0BH //定时器中断0
MOV TL0,#0DCH
INC R7 //R7为秒的个位
CJNE R7,#160,JW
INC R6 //R6为秒的十位
CPL P2.4 //LED每过10秒状态变一下
AJMP L1
JW: RETI
INC R7 //定时器中断1
CJNE R7,#2,JW
MOV R7,#0
INC @R0
CJNE R5,#3AH,L3 //R5为分的个位
MOV R5,#48
INC R4
L3: CJNE R4,#36H,L6 //R4为分的十位
MOV R4,#48
L6: CJNE R3,#24,JW //R3为小时
MOV R3,#0
RETI
L1: MOV R7,#0
CJNE R6,#36H,JW
MOV R6,#48
INC R5
CJNE R5,#3AH,JW
MOV R5,#48
INC R4
CJNE R4,#36H,JW
MOV R4,#48
INC R3
CJNE R3,#24,JW
MOV R3,#0
RETI
L0: MOV R6,#48 //初始化程序
MOV R5,#48
MOV R4,#48
MOV R3,#12
CLR K2
CLR K3
CLR K4
ACALL CSH
L2: MOV R2,#87H //1602显示时间
ACALL ML
MOV B,#10
MOV A,R3
DIV AB
ADD A,#48
XCH A,R2
ACALL SJ
XCH A,B
ADD A,#48
XCH A,R2
ACALL SJ
MOV R2,#':'
ACALL SJ
MOV R2,4
ACALL SJ
MOV R2,5
ACALL SJ
MOV R2,#':'
ACALL SJ
MOV R2,6
ACALL SJ
MOV B,#16
MOV A,R7
DIV AB
ADD A,#30H
XCH A,R2
ACALL SJ
JNB K1,SS //检测K1
AJMP L2
SS: CLR TR0 //K1:进入设置现在的时间
SETB K2
SETB K3
SETB K4
JNB K3,F
JNB K2,S
JNB K4,W
CLR TR1
MOV TH1,#0
MOV TL1,#0
MOV R7,#0
MOV R6,#48
CLR K1
AJMP L2
S: MOV R0,#3 //K2:设置小时。
SETB TR1
AJMP L2
F: MOV R0,#5 //K3:设置分钟。
SETB TR1
AJMP L2
W: SETB TR0 //K4:确认完成设置
SETB K1
CLR K2
CLR K3
CLR K4
AJMP L2
T: MOV R1,#1 //延时
DJNZ R1,$
RET
ZT: CLR RS //查状态
SETB RW
L9: ACALL T
SETB E
ACALL T
MOV C,BF
CLR E
JC L9
CLR RW
RET
ML: ACALL ZT //传命令
SETB E
MOV P3,R2
ACALL T
CLR E
RET
SJ: ACALL ZT //传数据
SETB RS
SETB E
MOV P3,R2
ACALL T
CLR E
RET
CSH:MOV R2,#38H //初始化1602
ACALL ML
MOV R2,#0CH
ACALL ML
MOV R2,#06H
ACALL ML
MOV R2,#81H
ACALL ML
MOV R2,#'T'
ACALL SJ
MOV R2,#'i'
ACALL SJ
MOV R2,#'m'
ACALL SJ
MOV R2,#'e'
ACALL SJ
MOV R2,#':'
ACALL SJ
RET
END
温馨提示:答案为网友推荐,仅供参考
第2个回答  2012-06-13
我只才c语言的
第3个回答  2012-06-12
我在学习板上调的,没有流程图啊。