LCD1602液晶显示秒表程序.txt一个人 一盒烟 一台电脑过一天一个人 一瓶酒 一盘蚕豆过一宿。永远扛不住女人的小脾气,女人 永远抵不住男人的花言巧语。
1.LCD1602驱动程序的编程
要想让LCD1602显示出我们需要的内容,就的严格按照LCD1602的工作时序来进行编程。驱动LCD1602显示程序主要有几个子程序组成:
1.1 初始化子程序
;*****************************************************************
;LCD 初始化子程序
;8位数据传送方式,双行显示,字形5*7点阵。
;开显示,不显示光标。
;*****************************************************************
; INIT_LCD:
ACALL DELAY5MS ;延时15MS,等待LCD电源稳定
ACALL DELAY5MS
ACALL DELAY5MS
MOV A,#38H ;双行显示,字形5*7点阵,8位数据转移。
ACALL WCOM_NC ;不检测忙信号
ACALL DELAY5MS
MOV A,#38H ACALL WCOM_NC ACALL DELAY5MS
MOV A,#38H ACALL WCOM_NC ACALL DELAY5MS
MOV A,#38H ACALL WCOM ACALL DELAY5MS
MOV A,#0CH
;双行显示,字形5*7点阵,8位数据转移。
;检测忙信号
;开显示,不显示光标,光标不闪烁。
ACALL WCOM
ACALL DELAY5MS
MOV A,#06H ;移动光标(光标加1)
ACALL WCOM
ACALL DELAY5MS
MOV A,#01H ;清除 LCD 显示屏
ACALL WCOM
ACALL DELAY5MS
RET
完全可以根据自己实际的使用情况来对LCD1602进行初始化操作。
例如:
选择单行显示时,选择下列操作指令。
MOV A,#30H ;单行显示,字形5*7点阵,8位数据转移。
ACALL WCOM ;检测忙信号
LCD控制器的指令有许多,详细内容请参阅在《电子制作》发表的相关文章。
1.2 忙检测子程序
对LCD1602的指令寄存器和数据寄存器进行读写操作时,需要先检查LCD内部的忙碌标记BUSY FLAG(简称BF),通过读取BF(DB7)来加以判断。
;*************************************************************
; 忙检测子程序
;正常读写操作之前必须检测LCD控制器状态。
;BF (P0.7) =1时,忙,不能接收MCU送来的指令和数据。
;BF (P0.7) =0时,闲,能够接收MCU送来的指令和数据。
;读数据时三个控制引脚的逻辑:
;RS=L,RW=H,E=H。
;输出:D0-D7=数据
;*************************************************************
CHECKBUSY:
PUSH ACC
MOV P0,#0FFH CLR LCD_EN
NOP
NOP
SETB LCD_RW
CLR LCD_RS
SETB LCD_EN
BUSYLOOP:
NOP
JB P0.7,BUSYLOOP
;置P0口为输入状态
CLR LCD_EN
POP ACC
RET
1.3 写指令子程序
将控制指令写入LCD的指令寄存器中。
;***********************************************************
;写控制指令子程序
;写控制指令到LCD
;传入参数: ACC(要写入的指令)
;写指令时三个控制引脚的逻辑:
;RS=L,RW=L,E=高脉冲。
;输出:D0-D7=指令码 。
;**********************************************************
WCOM:
ACALL CHECKBUSY ; 忙检测
WCOM_NC:
MOV P0,A CLR LCD_EN
NOP
NOP
CLR LCD_RS
CLR LCD_RW
SETB LCD_EN
ACALL DEL_250
CLR LCD_EN
RET
;写入指令
1.4 写数据子程序
将需要显示的数据写入LCD数据寄存器中。
;**********************************************************
;写数据子程序
;写显示数据到LCD
;传入参数: ACC(要写入的数据)
;写数据时三个控制引脚的逻辑:
;RS=H,RW=L,E=高脉冲。
;输出:D0-D7=数据码 。
;**********************************************************
WDATA:
ACALL CHECKBUSY ; 忙检测
MOV P0,A ;写入数据
CLR LCD_EN
NOP
NOP
SETB LCD_RS
CLR LCD_RW
SETB LCD_EN
ACALL DEL_250
CLR LCD_EN
RET
DEL_250:
MOV R7,#125 DJNZ R7,$
RET
;延时250微秒
2.计时程序的编程
;*******************************************
;定时器0计时中断服务子程序
;使用定时器0,方式1计时。
;10ms中断一次
;*******************************************
T0_INT:
PUSH ACC
MOV TL0,#TLOW ;送定时初值
MOV TH0,#THIGH
INC SEC0 ;10MS 计数值加1
MOV A,SEC0
CJNE A,#100,TT
MOV SEC0,#0
INC SEC ;秒加1
MOV A,SEC
CJNE A,#60,TT
INC MIN MOV SEC,#0
MOV A,MIN
CJNE A,#60,TT
INC HOUR MOV MIN,#0
MOV A,HOUR
CJNE A,#24,TT
MOV SEC0,#0
;分加1
;时加1
MOV SEC,#0 ;10毫秒、秒、分、时单元清零
MOV MIN,#0
MOV HOUR,#0
TT: POP RETI
ACC
因篇幅问题不能全部显示,请点此查看更多更全内容