導航:首頁 > 編程語言 > lcd1602顯示匯編程序

lcd1602顯示匯編程序

發布時間:2023-05-29 11:22:38

Ⅰ 51單片機編寫lcd1602顯示程序,第一行顯示自己的姓名,第二行顯示學號

1、首先我們打開Keil μVision編譯器,新建一個工程,然後保存在硬碟上的位置,然後選擇Atmel-AT89C51單片機為模型,並啟動器添加STARTUP.A51文件,然後在當前目錄下新建一個C文件,並將其添加入工作路徑。

Ⅱ lcd1602程序流程應該怎麼描述

LCD1602是一種常見攜腔的字元型液晶顯示屏,通常與單片機一起使用。蘆隱襪下面是LCD1602程序流程的一般描述:

Ⅲ 51單片機+ADC0809+LCD1602用匯編語言編程

你把這兩個程序合起來改下就差不多咯!時間忙 只能把自己以前學的子程序給你咯
; :1602顯示
LCD_RS EQU P2.0
LCD_RW EQU P2.1
LCD_EN EQU P2.2
LCD_DATA EQU P0

;*******************************************************************
ORG 0000H
AJMP MAIN
ORG 0030H
;*******************************************************************
MAIN:
MOV SP,#60H
ACALL LCD_INIT ;LCD初始化
MAIN1:
ACALL CLR_LCD ;清LCD
MOV A,#90H ;在第一行第17列的位置
ACALL LCD_CMD
MOV DPTR,#LINE1 ;第一行字元串的起始地址送入DPTR。
ACALL WRITE
MOV A,#0D0H ;在第二行第17列的位置
ACALL LCD_CMD
MOV DPTR,#LINE2 ;第二行字元串的起始地址送入DPTR。
ACALL WRITE

MOV R3,#10H ;向左移動16格
LOOPA:
MOV A,#18H ;字元同時左移一格
ACALL LCD_CMD
MOV R5,#03H ;延時375MS
ACALL DELAY125MS
DJNZ R3,LOOPA

ACALL DELAY4 ;延時1.6s
ACALL DELAY4
MOV R4,#02H ;設置閃爍次數
ACALL FLASH ;開始閃爍
AJMP MAIN1

LINE1:
DB "YALONG:",00H
LINE2:
DB "welcome you!",00H

;***************************************************************
;LCD初始化設定子程序
;***************************************************************
LCD_INIT:
ACALL DELAY5MS ;延時15MS
ACALL DELAY5MS ;等待LCD電源穩定
ACALL DELAY5MS

MOV A,#38H ;16*2顯示,5*7點陣,8位數據
ACALL LCD_CMD_NC ;不進行LCD忙檢測
ACALL DELAY5MS

MOV A,#38H ;16*2顯示,5*7點陣,8位數據
ACALL LCD_CMD_NC ;不進行LCD忙檢測
ACALL DELAY5MS

MOV A,#38H ;16*2顯示,5*7點陣,8位數據
ACALL LCD_CMD_NC ;不進行LCD忙檢測
ACALL DELAY5MS

MOV A,#08H ;顯示關
ACALL LCD_CMD ;進行LCD忙檢測

MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;進行LCD忙檢測

MOV A,#0CH ;顯示開,關游標
ACALL LCD_CMD ;進行LCD忙檢測

RET
;***************************************************************
;清LCD子程序
;***************************************************************
CLR_LCD:
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;進行LCD忙檢測
RET

;***************************************************************
;寫指令數據到LCD
;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
;***************************************************************
LCD_CMD:
CALL CHECKBUSY
LCD_CMD_NC:
CLR LCD_RS
CLR LCD_RW
MOV LCD_DATA,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;寫顯示數據到LCD
;RS=H,RW=L,D0-D7=數據,E=高脈沖
;***************************************************************
LCD_WDATA:
ACALL CHECKBUSY
SETB LCD_RS
CLR LCD_RW
MOV LCD_DATA,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;檢測LCD控制器忙狀態
;讀數據
;RS=L,RW=H,E=H,輸出:D0-D7=數據
;LCD_DATA.7=1,LCD忙,等待。LCD_DATA.7=0,LCD閑,可以進行讀寫操作。
;***************************************************************
CHECKBUSY:
PUSH ACC
MOV LCD_DATA,#0FFH
CLR LCD_RS
SETB LCD_RW
SETB LCD_EN
BUSYLOOP:
NOP
JB LCD_DATA.7,BUSYLOOP
CLR LCD_EN
POP ACC
RET
;***************************************************************
; 發送字元串子程序
;***************************************************************
WRITE:
PUSH ACC
WRITE1:
CLR A
MOVC A,@A+DPTR
JZ WRITE2
INC DPTR
ACALL LCD_WDATA
JMP WRITE1
WRITE2:
POP ACC
RET
;***************************************************************
;閃爍子程序
;***************************************************************
FLASH:
MOV A,#08H ;關閉顯示
ACALL LCD_CMD
ACALL DELAY4
MOV A,#0CH ;開顯示,關閉游標
ACALL LCD_CMD
ACALL DELAY4
DJNZ R4,FLASH
RET
;***************************************************************
;延時5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOV R6,#10
DL1:
MOV R7,#249
DL2:
DJNZ R7,DL2
DJNZ R6,DL1
RET
;***************************************************************
;延時125MS子程序
;字元串移動時使用
;***************************************************************
DELAY125MS:
DL3:
MOV R6,#250
DL4:
MOV R7,#249
DL5:
DJNZ R7,DL5
DJNZ R6,DL4
DJNZ R5,DL3
RET
;***************************************************************
;延時800MS子程序
;閃爍時使用
;***************************************************************
DELAY4:
MOV R5,#40
DL6:
MOV R6,#100
DL7:
MOV R7,#100
DL8:
DJNZ R7,DL8
DJNZ R6,DL7
DJNZ R5,DL6
RET
;***************************************************************
ENd
; ADC0809子程序
; 引腳定義
ADC_EOC EQU P2.0
ADC_CS EQU P2.1
ADC_RD EQU P2.2
ADC_WR EQU P2.3

ADC_DATA EQU P0

ORG 0000H
AJMP MAIN

ORG 0030H
MAIN:
SETB ADC_EOC
SETB ADC_WR
SETB ADC_RD
SETB ADC_CS

CLR ADC_CS ;START and ALE is H
CLR ADC_WR
NOP
NOP
NOP
SETB ADC_WR
SETB ADC_CS
NOP
JB ADC_EOC,$ ; JNB ADC_EOC,$
CLR ADC_CS
CLR ADC_RD
MOV ADC_DATA,#0FFH
MOV A,ADC_DATA
SETB ADC_RD
SETB ADC_CS

CJNE A,#00H,BELL
INC A

BELL:
MOV R5,A
BELL1: ACALL DELAY
DJNZ R5,BELL1
CPL P2.7
AJMP MAIN

DELAY:
MOV R7,#02H
D1:
MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,D1
RET

END

Ⅳ 單片機LCD1602液晶顯示的匯編程序

也沒去理解AC,只知道第一行第1點的地址是80H,第二行第1點是C0H。

下面就是你要的程序,僅供參考

RSBITP1.2;這3位是液晶屏的控制信號,連接方式由具體硬體而定

RWBITP1.1

EBITP1.0

ORG00H

AJMPMAIN

ORG30H

MAIN:

movR0,#24

ACALLINITIAL

ACALLDISPLAY;調用液晶顯示子程序

AJMPMAIN

;-------液晶顯示---------------------------------------

DISPLAY:

MOVA,#80H ;第一行第1個點

ACALLWR_CMD

MOVDPTR,#LINE1

ACALLPR_STR

ACALLWR_DATA

DISP1:

MOVA,#1CH ;字元左移命令(註:實物中左移命令字為18H)

ACALLWR_CMD

ACALLD05S

DJNZR0,DISP1

RET

;---液晶屏初始化-------------------------------------------------

INITIAL:

MOVA,#01H

ACALLWR_CMD

MOVA,#38H

ACALLWR_CMD

MOVA,#0CH

ACALLWR_CMD

MOVA,#06H

ACALLWR_CMD

RET

;----寫液晶指令的子程序------------------------------------------

WR_CMD:

MOVP3,A

CLRRS;寫入控制命令

CLRRW

CLRE

ACALLDELAY

SETBE

RET

;----寫液晶數據---------------------------------------------

WR_DATA:

MOVP3,A

SETBRS;寫入數據

CLRRW

CLRE

ACALLDELAY;判斷液晶模塊是否忙?

SETBE

RET

;-----寫行字元---------------------------------------------------------------

PR_STR:

CLR A

MOVCA,@A+DPTR

JZ END_PR

ACALLWR_DATA

INC DPTR

AJMPPR_STR

END_PR:

RET

;----查看液晶忙碌信號---------------------------------------------------------

DELAY:

MOVP3,#0FFH;判斷液晶顯示器是否忙的子程序

CLRRS

SETBRW

CLRE

NOP

SETBE

JBP3.7,DELAY;如果P3.7為高電平表示忙就循環等待

RET

;----0.5S延時(按12MHZ算)-----------------------------------------------------------------

D05S:

MOVR6,#25

MOVR5,#100

MOVR4,#100

DJNZR4,$

DJNZR5,$-4

DJNZR6,$-8

RET

;--------------------------------------------------------------------------------------

LINE1:

DB'ZHUNIYISHENGPINGAN',00H

Ⅳ 單片機LCD1602顯示程序(匯編),小弟有很多地方不懂,希望高人能加上注釋,有助於本人學習

; LCD Display Driver Demo.
; Timing code assumes 1.2MHz Clock

;LCD Registers addresses
LCD_CMD_WR equ 0 ;宏定義
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3

;LCD Commands
LCD_CLS equ 1
LCD_HOME equ 2
LCD_SETMODE equ 4
LCD_SETVISIBLE equ 8
LCD_SHIFT equ 16
LCD_SETFUNCTION equ 32
LCD_SETCGADDR equ 64
LCD_SETDDADDR equ 128

;Reset vector
org 0000h;程序開始入口地址0x00
jmp start;跳轉到start處

;Start of the program
org 0100h

string1a:db ' !! A M A Z I N G !! '漏棚 ;表格,要顯示的螞搜橘內容悶團。
db 0
string1b:db '!! A M A Z I N G !! '
db 0
string2:db ' A virtual LM032L... '
db 0

string3:db ' driven by a virtual '
db 0
string4:db ' 8051 processor!'
db 0

start: mov A,#038h ;為什麼是38h:查1602數據手冊,38h的命令
call wrcmd

loop: mov A,#LCD_SETVISIBLE+6 ;Make the display & blink visible:
call wrcmd

mov R7,#2
loop2:
mov DPTR,#string1a
call wrstr

mov DPTR,#200
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

mov DPTR,#string1b
call wrstr

mov DPTR,#200
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

djnz R7,loop2

mov DPTR,#string1a
call wrstr

mov DPTR,#400
call wtms

mov A,#LCD_SETDDADDR+64
call wrcmd

mov DPTR,#string2
call wrslow

mov DPTR,#200
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

mov DPTR,#string3
call wrslow

mov A,#LCD_SETDDADDR+64
call wrcmd

mov DPTR,#string4
call wrslow

mov A,#LCD_SETVISIBLE+7 ;Show the blink cursor as well.
call wrcmd

mov DPTR,#2000
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

jmp loop

;Sub routine to write null terminated string at DPTR in program ram.
wrstr: mov R0,#LCD_DATA_WR
wrstr1: clr A
movc A,@A+DPTR
jz wrstr2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
pop DPH
pop DPL
jmp wrstr1
wrstr2: ret

;Sub routine to write null terminated string at DPTR in program ram. Slowly
wrslow: mov R0,#LCD_DATA_WR
wrslw1: clr A
movc A,@A+DPTR
jz wrslw2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
mov DPTR,#100
call wtms
pop DPH
pop DPL
jmp wrslw1
wrslw2: ret

;Sub routine to write command:
wrcmd: mov R0,#LCD_CMD_WR
movx @R0,A
jmp wtbusy

;Sub routine to write character:
wrchar: mov R0,#LCD_DATA_WR
movx @R0,A

;Subroutine to wait for busy clear
wtbusy: mov R1,#LCD_BUSY_RD
movx A,@r1
jb ACC.7,wtbusy
ret

;Wait for number of seconds in A
wtsec: push ACC
call wtms
pop ACC
dec A
jnz wtsec
ret

;Wait for number of milliseconds in DPTR
wtms: xrl DPL,#0FFh ;Can't do DEC DPTR, so do the loop by forming 2's complement
xrl DPH,#0FFh ;and incrementing instead.
inc DPTR
wtms1: mov TL0,#09Ch ;100 ticks before overflow = 1ms at 1.2MHz Clock
mov TH0,#0FFh
mov TMOD,#1 ;Timer 0 mode 1
setb TCON.4 ;Timer 0 runs
wtms2: jnb TCON.5,wtms2
clr TCON.4 ;Timer 0 stops
clr TCON.5
inc DPTR
mov A,DPL
orl A,DPH
jnz wtms1
ret

END

閱讀全文

與lcd1602顯示匯編程序相關的資料

熱點內容
伺服器端渲染的數據怎麼爬 瀏覽:163
壓縮空氣噴射器 瀏覽:488
python提高效率 瀏覽:796
華為文件管理怎麼樣輸入解壓碼 瀏覽:800
深思加密狗初始化 瀏覽:566
黃金崩潰pdf 瀏覽:309
華為特定簡訊息加密 瀏覽:375
微機原理與單片機技術李精華答案 瀏覽:816
pic12c508單片機 瀏覽:309
androidgps調用 瀏覽:226
金文編pdf 瀏覽:445
14乘87減147的簡便演算法 瀏覽:473
怎麼創建edu文件夾 瀏覽:721
演算法的基礎問題 瀏覽:256
蘋果手機怎麼選擇app支付 瀏覽:856
訪問加密伺服器失敗怎麼回事 瀏覽:439
程序員每天跑步5公里 瀏覽:789
黨員對程序員有幫助么 瀏覽:550
慢跑穿壓縮衣還是緊身衣 瀏覽:214
什麼伺服器引擎最好 瀏覽:497