?? wl009.asm
字號:
;********************************************************************************
;* 標(biāo)題: ME300系列單片機(jī)開發(fā)系統(tǒng)演示程序 - 1602LCD顯示演示程序 *
;* 硬件: ME300A+,ME300B *
;* 文件: wl009.asm *
;* 日期: 2005-1-20 *
;* 版本: 1.0 *
;* 作者: 偉納電子 - Freeman *
;* 郵箱: freeman@willar.com *
;* 網(wǎng)站: http://www.willar.com *
;********************************************************************************
;* 描述: *
;* 1602字符型LCD顯示演示程序 *
;* 在第一行顯示 welcome *
;* 在第二行顯示 www.willar.com *
;********************************************************************************
;* 跳線設(shè)置: *
;* ME300A+ JP1 全部短接,JP2短接1-2端 *
;* ME300B JP1 短接,JP2短接1-2端 *
;* *
;********************************************************************************
;* 【版權(quán)】 Copyright(C)偉納電子 www.willar.com All Rights Reserved *
;* 【聲明】 此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
;********************************************************************************
; 端口定義
RS EQU P2.0
RW EQU P2.1
EP EQU P2.2
ORG 0000H
LJMP MAIN
MAIN:
LCALL LCD_INIT ; 初始化LCD
MOV A,#15
LCALL DELAY_MS ;
MAIN_LOOP:
; 在第一行顯示字符串"welcome!"
MOV A,#4
LCALL SET_LCD_POS ; 設(shè)置LCD光標(biāo)到第一行的第5個字符
MOV DPTR,#TAB_WELCOME ; "welcome!"字串表格地址
LCALL DISPLAY_STRING ; 顯示字符串
; 在第二行顯示字符串"www.willar.com"
MOV A,#41H ;
LCALL SET_LCD_POS ; 設(shè)置LCD光標(biāo)到第二行第二個字符
MOV DPTR,#TAB_WILLAR
LCALL DISPLAY_STRING
; 閃爍顯示內(nèi)容
MOV A,#200 ;
LCALL DELAY_MS ;
LCALL LCD_TURN_OFF
MOV A,#200 ;
LCALL DELAY_MS ;
LCALL LCD_TURN_ON
MOV A,#200 ;
LCALL DELAY_MS ;
LCALL LCD_TURN_OFF
MOV A,#200 ;
LCALL DELAY_MS ;
LCALL LCD_TURN_ON
MOV A,#200 ;
LCALL DELAY_MS ;
;清屏
LCALL LCD_CLEAR
MOV A,#1
LCALL DELAY_MS
; 重新顯示
JMP MAIN_LOOP
;顯示字符串函數(shù)
;傳入?yún)?shù):DPTR(字符串表格地址)
;返回值:無
DISPLAY_STRING:
CLR A
MOVC A,@A+DPTR ;
JZ END_DISPLAY_STRING ; 如果遇到00H表示表格結(jié)束
LCALL LCD_WRITE_DATA ; 寫數(shù)據(jù)到LCD
INC DPTR ; 指向表格的下一字符
MOV A, #200 ;
LCALL DELAY_MS ;
SJMP DISPLAY_STRING ; 循環(huán)直到字符串結(jié)束
END_DISPLAY_STRING:
RET
; 初始化LCD
LCD_INIT:
; 設(shè)置顯示格式---
MOV A,#38H ; 38H --- 16*2行顯示,5*7點陣,8位數(shù)據(jù)接口
LCALL LCD_WRITE_COMMAND
MOV A,#1
LCALL DELAY_MS
;開顯示
LCALL LCD_TURN_ON
;讀寫后指針加1
MOV A,#06H ; 06H --- 讀寫后指針加1
LCALL LCD_WRITE_COMMAND
MOV A,#1
LCALL DELAY_MS
; 清除LCD屏幕
LCALL LCD_CLEAR
RET
;開顯示
LCD_TURN_ON:
MOV A,#0CH ; 0CH --- 開顯示,無光標(biāo)
LCALL LCD_WRITE_COMMAND
MOV A,#1
LCALL DELAY_MS
RET
; 關(guān)顯示
LCD_TURN_OFF:
MOV A,#08H ; 08H --- 關(guān)顯示
LCALL LCD_WRITE_COMMAND
MOV A,#1
LCALL DELAY_MS
RET
; 清除LCD屏幕
LCD_CLEAR:
MOV A,#01H ; 01H清屏指令
LCALL LCD_WRITE_COMMAND
MOV A,#1
LCALL DELAY_MS
RET
;設(shè)置LCD當(dāng)前光標(biāo)的位置
SET_LCD_POS:
ORL A,#80H ;
LCALL LCD_WRITE_COMMAND
RET
; 寫入控制指令到LCD
; 傳入?yún)?shù): ACC(要寫入的命令)
; 返回值: 無
LCD_WRITE_COMMAND:
LCALL CHECK_LCD_BUSY
CLR RS
CLR RW
CLR EP
NOP
NOP
MOV P0,A ; 寫入數(shù)據(jù)到LCD端口
NOP
NOP
NOP
NOP
SETB EP
NOP
NOP
NOP
NOP
CLR EP
RET
; 寫入顯示數(shù)據(jù)到LCD
; 傳入?yún)?shù): ACC(要寫入的數(shù)據(jù))
; 返回值: 無
LCD_WRITE_DATA:
LCALL CHECK_LCD_BUSY
SETB RS
CLR RW
CLR EP
NOP
NOP
MOV P0,A ; 寫入數(shù)據(jù)到LCD端口
NOP
NOP
NOP
NOP
SETB EP
NOP
NOP
NOP
NOP
CLR EP
RET
CHECK_LCD_BUSY:
CLR RS
SETB RW
SETB EP
NOP
NOP
NOP
NOP
MOV C,P0.7 ; 讀取忙碌位
NOP
NOP
CLR EP
NOP
NOP
JC CHECK_LCD_BUSY ; 等待LCD空閑(P0.7=0)
RET
; 延時子程序
; 傳入?yún)?shù): ACC(延時時間,單位毫秒)
; 返回值: 無
DELAY_MS:
MOV R7,A
DELAY_LOOP1:
MOV R6,#0E8H
DELAY_LOOP2:
NOP
NOP
DJNZ R6,DELAY_LOOP2
DJNZ R7,DELAY_LOOP1
RET
TAB_WILLAR:
DB "www.willar.com"
DB 00 ; 字符結(jié)束標(biāo)志
TAB_WELCOME:
DB "welcome!"
DB 00 ; 字符結(jié)束標(biāo)志
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -