顯示效果:全屏幕顯示0---9 :該程序試驗通過
現(xiàn)在:我?guī)ьI(lǐng)大家從字符型1602液晶入手, 一步一步的來掌握液晶的編程
SMC1602接口程序(MCS51模擬口線方式)
以上為運行的照片,實際是動態(tài)的, 從0--9
;********************************************************************************
;1602液晶全屏幕顯示0-9 *
;********************************************************************************
;* 日期: 2007-3-25 *
;* 版本: 3.0 *
;* 作者: 深圳學林電子有限公司 專業(yè)8051單片機教程站 *
;* 郵箱: sxj1974@163.com *
;* 網(wǎng)站: http://www.51c51.com http://www.8951.com 更多例程請登陸網(wǎng)站 *
;********************************************************************************
;* 硬件:此程序在本公司xlisp系列單片機實驗儀運行通過 *
;********************************************************************************
;* 【版權(quán)】 Copyright(C)深圳學林電子有限公司 www.51c51.com All Rights Reserved *
;* 【聲明】 此程序僅用于學習與參考,引用請注明版權(quán)和作者信息! *
;********************************************************************************
RSPIN EQU P2.0
RWPIN EQU P2.1
EPIN EQU P2.2
XPOS EQU 20H ;列方向地址指針(用于LCDPOS子程序)
YPOS EQU 21H ;行方向地址指針(用于LCDPOS子程序)
ORG 0000H
JMP START
START: MOV SP,#60H
CLR EPIN
MAIN:
MOV R7,#'0' ;測試主程序
MN_PA: ;整屏循環(huán)顯示"0"到"9"及空格
CALL LCDRESET
MOV A,R7
CALL LCDFILL
CALL DELAY400MS
INC R7
MOV A,R7
CJNE A,#'9'+1,MN_PA
MOV A,#' '
CALL LCDFILL
CALL DELAY400MS
JMP MAIN
LCDFILL:
MOV B,A
MOV YPOS,#0
LFL_PB: MOV XPOS,#0 ;整屏顯示A中所代表字符
LFL_PA: MOV A,B
CALL LCDWRITE
INC XPOS
MOV A,XPOS
CJNE A,#20,LFL_PA
INC YPOS
MOV A,YPOS
CJNE A,#4,LFL_PB
RET
LCDPOS: ;設(shè)置第(XPOS,YPOS)個字符的DDRAM地址
PUSH ACC
CLR C ;X位置范圍(0到19)
MOV A,XPOS
SUBB A,#20
JC LPS_LBX
MOV XPOS,#0
LPS_LBX:ANL YPOS,#03H ;Y位置范圍(0到3)
MOV A,YPOS ;(XPOS,YPOS)對應DDRAM地址
CJNE A,#00,LPS_LA1
MOV A,XPOS ;(第一行)X: 第0----19個字符
JMP LPS_LAX ; DDRAM: 0----13H
LPS_LA1:CJNE A,#01,LPS_LA2
MOV A,XPOS ;(第二行)X: 第0----19個字符
ADD A,#40H ; DDRAM: 40----53H
JMP LPS_LAX ;
LPS_LA2:CJNE A,#02,LPS_LAY
MOV A,XPOS ;(第三行)X: 第0----19個字符
ADD A,#14H ; DDRAM: 14----27H
JMP LPS_LAX
LPS_LAY:MOV A,XPOS ;(第四行)X: 第0----19個字符
ADD A,#54H ; DDRAM: 54----67H
LPS_LAX:ORL A,#80H ;設(shè)置DDRAM地址
CALL LCDWC
POP ACC
RET
LCDWRITE: ;定位寫字符子程序
CALL LCDPOS ;定位顯示地址
CALL LCDWD ;寫字符
RET
LCDRESET: ;初始化程序
CALL DELAY5MS ;延時15MS
CALL DELAY5MS
CALL DELAY5MS
MOV A,#38H ;顯示模式設(shè)置(不檢測忙信號)
CALL LCDWCN ;共三次
CALL DELAY5MS
MOV A,#38H
CALL LCDWCN
CALL DELAY5MS
MOV A,#38H
CALL LCDWCN
MOV A,#38H ;顯示模式設(shè)置(以后均檢測忙信號)
CALL LCDWC
MOV A,#08H ;顯示關(guān)閉
CALL LCDWC
MOV A,#01H ;顯示清屏
CALL LCDWC
MOV A,#06H ;顯示光標移動設(shè)置
CALL LCDWC
MOV A,#0CH ;顯示開及光標設(shè)置
CALL LCDWC
RET
LCDWC: ;送控制字子程序(檢測忙信號)
CALL WAITIDLE
LCDWCN: ;送控制字子程序(不檢測忙信號)
CLR RSPIN ;RS=0 RW=0 E=高脈沖
CLR RWPIN
MOV P0,A
SETB EPIN
NOP
CLR EPIN
RET
LCDWD: ;寫字符子程序
CALL WAITIDLE
SETB RSPIN ;RS=1 RW=0 E=高脈沖
CLR RWPIN
MOV P0,A
SETB EPIN
NOP
CLR EPIN
RET
WAITIDLE:
PUSH ACC ;正常讀寫操作之前必須檢測LCD控制器狀態(tài)
MOV P0,#0FFH
CLR RSPIN ;RS=0 RW=1 E=高電平
SETB RWPIN
SETB EPIN
WTD_PA: NOP ;DB7: 0 LCD控制器空閑
JB P0.7,WTD_PA ; 1 LCD控制器忙
CLR EPIN
POP ACC
RET
DELAY5MS:
MOV R1,#25 ;延時子程序(5MS)
DL5_PA: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL5_PA
RET
DELAY400MS:
MOV R0,#20 ;延時子程序(400MS)
DL4_PA: MOV R1,#100
DL4_PB: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL4_PB
DJNZ R0,DL4_PA
RET
END
評論