标题:
LCD1602 时钟显示 汇编语言编程带proteus仿真
[打印本页]
作者:
51黑ff
时间:
2016-9-27 18:27
标题:
LCD1602 时钟显示 汇编语言编程带proteus仿真
一个用51单片机做的LCD1602 时钟显示 下面是仿真原理图,采用汇编语言来编程.
0.png
(24.58 KB, 下载次数: 58)
下载附件
2016-9-27 18:24 上传
0.png
(64.67 KB, 下载次数: 60)
下载附件
2016-9-27 18:26 上传
时钟程序的所有资料打包下载:
数字时钟.rar
(248.57 KB, 下载次数: 22)
2016-9-27 18:27 上传
点击文件名下载附件
下载积分: 黑币 -5
源程序:
;/********************************************************************************
; LCD1602 时钟显示Cekong time测控何小双
;********************************************************************************/
RS EQU P2.0; //控制端接口
R_W EQU P2.1
E EQU P2.2
DB0_DB7 EQU P0
;***********定义时、分、秒及50ms单元*******
DI_DA DATA 20H
SEC DATA 21H
MIN DATA 22H
HOUR DATA 23H
;************程序开始***********************
ORG 000H
LJMP MAIN
ORG 000BH //定时器TO的中断入口地址
LJMP CLOCK
ORG 0030H
MAIN:MOV TMOD,#01H //工作方式1.16位定时计数
MOV TL0,#0B0H //设置初值
MOV TH0,#03CH
SETB ET0 //允许T0中断
SETB TR0 //启动T0
MOV DI_DA,#00H
SETB EA //总中断开放
MOV SP,#60H //设置堆栈指针
LCALL INITIAL //初始化
LCALL CLS //清屏
;*************显示Cekong time**************
MOV A,#10000000B
LCALL WRITE_COM
MOV DPTR,#LINE0
LCALL DISP
;***********************************************
MOV A,#11000000B
LCALL WRITE_COM
MOV DPTR,#LINE1
LCALL DISP
;***********************************************
MOV A,#11001100B
LCALL WRITE_COM
MOV DPTR,#LINE1
LCALL DISP
;****************计时开始***********************
BEGIN:MOV P1,#7FH
MOV A,P1
CJNE A,#7FH,NEXT //首先对两个规定的操作数进行比较,然后根据比较的结果来决定是否转移--若两个操作数相等,程序按顺序往下执行NEXT;
; SETB P1.7
ACALL CONV //计时转换
ACALL DIS //显示出时间
AJMP BEGIN
NEXT: ACALL KEY
AJMP BEGIN
;****************扫描按键***********************
KEY: ACALL DEL10MS //软件滤波 delay后检测
JB P1.4,HOUR_KEY //1.4和1.5硬件设计
MIN_ADJ:CLR C
MOV A,MIN
INC A
DA A
CJNE A,#60H,X1
CLR A
X1: MOV MIN,A
ACALL DIS
ACALL DEL200MS
MOV P1,#7FH
JNB P1.4,MIN_ADJ
HOUR_KEY:JB P1.5,X2
HOUR_ADJ:CLR C
MOV A,HOUR
INC A
DA A
CJNE A,#24H,X3
CLR A
X3: MOV HOUR,A
ACALL DIS
ACALL DEL200MS
X2: MOV P1,#7FH
JNB P1.5,HOUR_ADJ
// SETB P1.7
RET
;**********************计时转换*************************
CONV: MOV A,DI_DA
CJNE A,#14H,DONE
MOV DI_DA,#00H
MOV A,SEC
ADD A,#01H
DA A
MOV SEC,A
CJNE A,#60H,DONE
MOV SEC,#00H
MOV A,MIN
ADD A,#01H
DA A
MOV MIN,A
CJNE A,#60H,DONE
MOV MIN,#00H
MOV A,HOUR
ADD A,#01H
DA A
MOV HOUR,A
CJNE A,#24H,DONE
MOV HOUR,#00H
DONE: RET
;******************显示时间****************************
DIS: MOV A,#11000100B
//MOV A,#00111000B 当为这个值是能在lcd显示跳秒,但就是不知道上面的值在protues中怎么就不能正常显示,而实际中能显示
LCALL WRITE_COM
MOV A,HOUR
SWAP A ///累加器内高低半字节交换
ANL A,#0FH
ADD A,#30H
LCALL WRITE_DATA
MOV A,HOUR
ANL A,#0FH
ADD A,#30H
LCALL WRITE_DATA
MOV A,#3AH
LCALL WRITE_DATA
;********************************************
MOV A,MIN
SWAP A
ANL A,#0FH
ADD A,#30H
LCALL WRITE_DATA
MOV A,MIN
ANL A,#0FH
ADD A,#30H
LCALL WRITE_DATA
MOV A,#3AH
LCALL WRITE_DATA //分
;******************************************
MOV A,SEC
SWAP A
ANL A,#0FH
ADD A,#30H
LCALL WRITE_DATA
MOV A,SEC
ANL A,#0FH
ADD A,#30H
LCALL WRITE_DATA
RET //秒
;*****************50ms定时中断服务子程序***************
CLOCK: MOV TL0,#0B0H
MOV TH0,#3CH
INC DI_DA //增加1
RETI
;*****************显示字符串到LCD子程序****************
DISP: PUSH ACC
DISP_LOOP:CLR A
MOVC A,@A+DPTR
JZ END_DISP
LCALL WRITE_DATA
INC DPTR
SJMP DISP_LOOP
END_DISP: POP ACC
RET
;***************************************************************
; LCD1602初始化设定子程序
;***************************************************************
INITIAL: MOV A,#00111000B //显示模式设置
LCALL WRITE_COM
MOV A,#00001100B //开显示及光标显示
LCALL WRITE_COM
MOV A,#00000110B
LCALL WRITE_COM
RET
;*****************清除LCD1602子程序**********************
CLS: MOV A,#00000001B
LCALL WRITE_COM
RET
;*****************写指令程序*********************************
WRITE_COM: LCALL CHECK_BUSY
CLR E
CLR RS
CLR R_W // RS与RW低电平
SETB E //E引脚来脉冲 从而实现写指令
MOV DB0_DB7,A
CLR E
RET
;****************写数据到LCD子程序******************
WRITE_DATA: LCALL CHECk_BUSY
CLR E
SETB RS
CLR R_W
SETB E
MOV DB0_DB7,A
CLR E
RET
;***************查询忙碌标志信号子程序**********
CHECK_BUSY: PUSH ACC //压进去
BUSY_LOOP: CLR E
SETB R_W
CLR RS
SETB E
MOV A,DB0_DB7
CLR E
JB ACC.7,BUSY_LOOP //直接寻址位为1则转移
POP ACC //推出来
LCALL DEL
RET //DB7=1则忙反之不忙则可以接收数据与命令
;*******************************************************************************延时2.5ms子程序********************
DEL: MOV R6,#5
TX0: MOV R7,#248
DJNZ R7,[ DISCUZ_CODE_2 ]nbsp; //248*2us*5
DJNZ R6,TX0
RET
;*****************延时10ms子程序*********************
DEL10MS: MOV R5,#10H
TX1: MOV R4,#0FFH
DJNZ R4,$
DJNZ R5,TX1
RET
;*****************延时200ms子程序********************
DEL200MS: MOV R3,#14H //20*10ms
TX2: ACALL DEL10MS
DJNZ R3,TX2
RET
;*****************字符串*****************************
LINE0: DB "**CeKong2 Time**",00H //第一行
LINE1: DB " ",00H //第二行标记
END
复制代码
作者:
songxia8013
时间:
2017-12-18 17:38
坑人的程序,不好用!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1