當前位置:編程學習大全網 - 編程語言 - 妳好,請問妳有LCD顯示的程序嗎,要匯編語言的

妳好,請問妳有LCD顯示的程序嗎,要匯編語言的

;用RC振蕩電路測量電阻R

;振蕩頻率接到外部定時器T0

;液晶顯示采用JMC1602C-HD44780

;鍵盤P2口獨立式按鍵

;C=1UF

;R=200

;RX=721500/F-100歐姆

;RC振蕩信號接T0(14)腳

;按下key0(P20)鍵可以保持測量數據

;============================================================

;HD44780 引腳連接

;1 GND

;2 VDD

;3 V0-GND 對比度最亮

;4 RS-P00 0寫入指令,1寫入數據

;5 RW-GND 只寫不讀,各數據指令之間延時

;6 EN-P01 下降沿寫入指令

;7 DB0

;8 DB1

;9 DB2

;10 DB3

;11 DB4-P04

;12 DB5-P05

;13 DB6-P06

;14 DB7-P07

;15 BL1

;16 BL2

;工作方式: 只寫不讀,中間延時,4位數據寬度

;[註:AT89S51使用12M晶振]

;=============================================================*/

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

;LCD引腳定義

LCM_RS EQU P0.0

LCM_EN EQU P0.1

LCM_DATA EQU P0

F_INPUT_PIN EQU P1.1 ;頻率輸入腳

LED EQU P3.4

KEY0 EQU P2.0

;...........................................

;變量定義

RCAP_BUF0_H EQU 08H

RCAP_BUF0_L EQU 09H

RCAP_BUF1_H EQU 0AH

RCAP_BUF1_L EQU 0BH

FRQ_H EQU 0CH

FRQ_L EQU 0DH

DISBUF0 EQU 0EH

DISBUF1 EQU 0FH

;位定義

FLAG EQU 20H

RCAP_END_FG EQU FLAG.0

RCAP_FULL_FG EQU FLAG.1

CF_END_FG EQU FLAG.2

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

T2CON DATA 0C8H

RCAP2L DATA 0CAH

RCAP2H DATA 0CBH

TL2 DATA 0CCH

TH2 DATA 0CDH

TF2 BIT 0CFH

EXF2 BIT 0CEH

RCLK BIT 0CDH

TCLK BIT 0CCH

EXEN2 BIT 0CBH

TR2 BIT 0CAH

C_T2 BIT 0C9H

CP_RL2 BIT 0C8H

;以下是主程序開始

ORG 0000H

AJMP START ;轉主程序

ORG 0003H

RETI

ORG 000BH

RETI

ORG 0013H

RETI

ORG 001BH

LJMP T1INT

ORG 0023H

RETI

ORG 002BH

RETI

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

ORG 0030H

START: MOV SP,#60H

;...........................................

CLR LCM_EN ;LCD_EN初始狀態0

LCALL INIT_LCD ;初始化LCD

MOV R5,#10 ;延時等待

LCALL DELAY

;...........................................

MOV A,#0 ;0行

MOV B,#0 ;0列

MOV DPTR,#TITLE ;字符串

LCALL LCD_PRN_STR ;顯示字符串"89c51 R TEST"

MOV A,#1 ;1行

MOV B,#0 ;0列

MOV DPTR,#R_INFO ;字符串

LCALL LCD_PRN_STR ;顯示字符串 "R="

SJMP $

;...........................................

;初始化LCD

;功能設定指令

;┌——————┬—————————————————————————————┬———┐

;ㄧ ㄧ 指令編碼 ㄧ 執行 ㄧ

;ㄧ 指令功能 ├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤ 時間 ㄧ

;ㄧ ㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /us ㄧ

;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤

;ㄧ 功能設定 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧ DL ㄧ N ㄧ F ㄧ X ㄧ X ㄧ 40 ㄧ

;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘

;功能:設定數據總線位數、顯示的行數及字型。參數設定的情況如下:

; 位名 設置

; DL 0=數據總線為4位 1=數據總線為8位

; N 0=顯示1行 1=顯示2行

; F 0=5×7點陣/每字符 1=5×10點陣/每字符

;顯示開關控制指令

;┌——————┬—————————————————————————————┬———┐

;ㄧ ㄧ 指令編碼 ㄧ 執行 ㄧ

;ㄧ 指令功能 ├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤ 時間 ㄧ

;ㄧ ㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /us ㄧ

;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤

;ㄧ顯示開關控制ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧ D ㄧ C ㄧ B ㄧ 40 ㄧ

;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘

;功能:控制顯示器開/關、光標顯示/關閉以及光標是否閃爍。參數設定的情況如下:

; 位名 設置

; D 0=顯示功能關 1=顯示功能開

; C 0=無光標 1=有光標

; B 0=光標閃爍 1=光標不閃爍

;設定顯示屏或光標移動方向指令

;┌——————┬—————————————————————————————┬———┐

;ㄧ ㄧ 指令編碼 ㄧ 執行 ㄧ

;ㄧ 指令功能 ├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤ 時間 ㄧ

;ㄧ ㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /us ㄧ

;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤

;ㄧ設定顯示屏或ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧS/C ㄧR/L ㄧ X ㄧ X ㄧ 40 ㄧ

;ㄧ光標移動方向ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ

;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘

;功能:使光標移位或使整個顯示屏幕移位。參數設定的情況如下:

; S/C R/L 設定情況

; 0 0 光標左移1格,且AC值減1

; 0 1 光標右移1格,且AC值加1

; 1 0 顯示器上字符全部左移壹格,但光標不動

; 1 1 顯示器上字符全部右移壹格,但光標不動

;清屏指令

;┌——————┬—————————————————————————————┬———┐

;ㄧ ㄧ 指令編碼 ㄧ 執行 ㄧ

;ㄧ 指令功能 ├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤ 時間 ㄧ

;ㄧ ㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /ms ㄧ

;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤

;ㄧ 清屏 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧ 1.64 ㄧ

;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘

;功能:<1> 清除液晶顯示器,即將DDRAM的內容全部填入"空白"的ASCII碼20H;

; <2> 光標歸位,即將光標撤回液晶顯示屏的左上方;

; <3> 將地址計數器(AC)的值設為0。

INIT_LCD:

MOV LCM_DATA,#30H ;4位I/O初始化

LCALL EN ;寫動作

MOV R5,#2 ;延時等待

LCALL DELAY

MOV LCM_DATA,#30H ;4位I/O初始化

LCALL EN ;寫動作

MOV R5,#2 ;延時等待

LCALL DELAY

MOV LCM_DATA,#30H ;4位I/O初始化

LCALL EN ;寫動作

MOV R5,#2 ;延時等待

LCALL DELAY

MOV LCM_DATA,#20H ;4位I/O初始化

LCALL EN ;寫動作

MOV R5,#2 ;延時等待

LCALL DELAY

MOV A,#28H

LCALL WCOM

MOV R5,#1 ;延時等待;

LCALL DELAY

MOV A,#0CH

LCALL WCOM

MOV R5,#1 ;延時等待;作者:劉玉宏

LCALL DELAY

MOV A,#01H ;顯示清屏

LCALL WCOM

MOV R5,#1 ;延時等待

LCALL DELAY

RET

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

;產生下降沿用於寫命令;

EN:

SETB LCM_EN

LCALL DE

CLR LCM_EN

LCALL DE

RET

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

DE:

MOV R7,#10

DJNZ R7,$

RET

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

;寫命令

;參數傳遞A;

WCOM:

PUSH B

MOV B,A ;A暫存

ANL A,#0F0H ;清除低4位,保持LCD_EN為0

MOV LCM_DATA,A;寫高4位

CLR LCM_RS ;寫命令LCM_RS=0

LCALL EN ;寫動作

MOV A,B ;取出保存的參數

RLC A

RLC A

RLC A

RLC A ;4位方式先寫高4位,再寫低4位

ANL A,#0F0H ;清除低4位,保持LCD_EN為0

MOV LCM_DATA,A

CLR LCM_RS ;寫命令LCM_RS=0

LCALL EN ;寫動作

POP B

RET;、

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

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

;寫數據

;參數傳遞A

WDATA:

PUSH B

MOV B,A ;A暫存

ANL A,#0F0H ;清除低4位,保持LCD_EN為0

MOV LCM_DATA,A

SETB LCM_RS ;寫數據LCM_RS=1

LCALL EN ;寫動作

MOV A,B ;取出保存的參數

RLC A

RLC A

RLC A

RLC A ;4位方式先寫高4位,再寫低4位

ANL A,#0F0H ;清除低4位,保持LCD_EN為0

MOV LCM_DATA,A

SETB LCM_RS ;寫數據LCM_RS=1

LCALL EN ;寫動作

POP B;

RET

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

;延時R5*10MS

DELAY:

MOV R6,#50

D1: MOV R7,#100

DJNZ R7,$

DJNZ R6,D1

DJNZ R5,DELAY

RET

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

;在第0行指定位置顯示字符

;參數A顯示字符的ascii碼,B顯示的位置

LCDP0:

PUSH ACC

MOV A,B

;設定DDRAM地址指令

;┌——————┬—————————————————————————————┬———┐

;ㄧ ㄧ 指令編碼 ㄧ 執行 ㄧ

;ㄧ 指令功能 ├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤ 時間 ㄧ

;ㄧ ㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /us ㄧ

;├——————┼——┼——┼——┼——┴——┴——┴——┴——┴——┴——┼———┤

;ㄧ設定CGRAM ㄧ 0 ㄧ 0 ㄧ 1 ㄧ DDRAM的地址(7位) ㄧ 40 ㄧ

;ㄧ 地址 ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ

;└——————┴——┴——┴——┴————————————————————┴———┘

;功能:設定下壹個要存入數據的CGRAM的地址。

;DDRAM地址與顯示位置的對應關系;作者:劉玉宏

;╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮

;┊ ┊

;┊00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH ┊

;┊ ┊

;┊40H 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH ┊

;┊ ┊

;╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯

ADD A,#80H ;第壹行地址

LCALL WCOM

POP ACC ;數據

LCALL WDATA

RET

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

;在第1行指定位置顯示字符

;參數A顯示字符的ascii碼,B顯示的位置

LCDP1:

PUSH ACC

MOV A,B

;設定DDRAM地址指令

;┌——————┬—————————————————————————————┬———┐

;ㄧ ㄧ 指令編碼 ㄧ 執行 ㄧ

;ㄧ 指令功能 ├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤ 時間 ㄧ

;ㄧ ㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /us ㄧ

;├——————┼——┼——┼——┼——┴——┴——┴——┴——┴——┴——┼———┤

;ㄧ設定CGRAM ㄧ 0 ㄧ 0 ㄧ 1 ㄧ DDRAM的地址(7位) ㄧ 40 ㄧ

;ㄧ 地址 ㄧ ㄧ ㄧ ㄧ ㄧ ㄧ

;└——————┴——┴——┴——┴————————————————————┴———┘

;功能:設定下壹個要存入數據的CGRAM的地址。

;DDRAM地址與顯示位置的對應關系

;╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮

;┊ ┊

;┊00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH ┊

;┊ ┊

;┊40H 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH ┊

;┊ ┊

;╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯

ADD A,#0C0H ;第二行地址

LCALL WCOM

POP ACC ;數據

LCALL WDATA

RET

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

;在指定位置顯示壹行字符串(以0結尾),不檢查是否超長,沒有考慮空格覆蓋以後的內容

;參數A行,B列,DPTR字符串指針

LCD_PRN_STR:

CJNE A,#0,LINE2

LINE1:

MOV A,B

ADD A,#80H ;第0行地址;

LCALL WCOM

LJMP FILL

LINE2:

MOV A,B

ADD A,#0C0H ;第1行地址

LCALL WCOM

LJMP FILL

FILL:

CLR A

MOVC A,@A+DPTR

CJNE A,#0,L1

RET

L1:;

LCALL WDATA

INC DPTR

AJMP FILL

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

TITLE: DB '89C51 R TEST',0

R_INFO: DB 'R=',0

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

END

  • 上一篇:假如我創業會選擇什麽職業
  • 下一篇:用什麽軟件下載軟件好?
  • copyright 2024編程學習大全網