⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor_key_1602lcd.asm

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;-----------------------------------------------------
DATA_CONV:
            MOV  B,#10
            DIV  AB
            JZ D_CONV1         ;高位为0,不显示
            ADD  A,#30H
            JMP  D_CONV2
D_CONV1:
            MOV  A,#20H
D_CONV2:
            MOV  D_BUF1,A       ;高位
            MOV  A,B
            ADD  A,#30H
            MOV  D_BUF2,A       ;低位
            MOV  B,LCD_X
            MOV  A,D_BUF1
            CALL  LCDP2
            INC  LCD_X
            MOV  B,LCD_X
            MOV  A,D_BUF2
            CALL  LCDP2
            RET
;-----------------------------------------------------
;  LCD 初始化设置
;-----------------------------------------------------
SET_LCD:
          CLR  EN
          CALL  INIT_LCD     ;初始化 LCD
          CALL  DELAY1
          MOV  DPTR,#INFO1   ;指针指到显示信息1
          MOV  A,#1          ;显示在第一行
          CALL  LCD_SHOW
          MOV  DPTR,#INFO2   ;指针指到显示信息2
          MOV  A,#2          ;显示在第二行
          CALL  LCD_SHOW
          RET
;-----------------------------------------------------
INFO1:  DB  " STEPPING MOTOR ",0  ;LCD 第一行显示信息
INFO2:  DB  "CONTROL  PROCESS",0  ;LCD 第二行显示信息

;-----------------------------------------------------
SET_LCD0:
          CLR  EN
          CALL  INIT_LCD     ;初始化 LCD
          CALL  DELAY1
          MOV  DPTR,#INFO3   ;指针指到显示信息1
          MOV  A,#1          ;显示在第一行
          CALL  LCD_SHOW
          MOV  DPTR,#INFO4   ;指针指到显示信息2
          MOV  A,#2          ;显示在第二行
          CALL  LCD_SHOW
          RET
INFO3:  DB  "    STOP        ",0
INFO4:  DB  "NUM:    RATE:   ",0  ;LCD 第二行显示信息

SET_LCD1:
          MOV  DPTR,#INFO5   ;指针指到显示信息1
          MOV  A,#1          ;显示在第一行
          CALL  LCD_SHOW
          RET
INFO5:  DB  "    STOP        ",0

SET_LCD2:
          MOV  DPTR,#INFO6   ;指针指到显示信息1
          MOV  A,#1          ;显示在第一行
          CALL  LCD_SHOW
          RET
INFO6:  DB  "   RUNNING      ",0

SET_LCD3:
          MOV  DPTR,#INFO7   ;指针指到显示信息1
          MOV  A,#1          ;显示在第一行
          CALL  LCD_SHOW
          RET
INFO7:  DB  "   RUNNING      ",0

SET_LCDF:
           MOV  LCD_X,#0CH
           MOV  A,#3EH       ;显示>>
           ACALL LCDP1
           INC  LCD_X
           ACALL LCDP1
           RET

SET_LCDR:
           MOV  LCD_X,#0CH
           MOV  A,#3CH       ;显示<<
           ACALL LCDP1
           INC  LCD_X
           ACALL LCDP1
           RET
LCD_CLR:
           MOV  LCD_X,#0CH
           MOV  A,#20H       ;显示
           ACALL LCDP1
           INC  LCD_X
           ACALL LCDP1
           RET
;--------------------------------------------------------
INIT_LCD:                 ;8位I/O控制 LCD 接口初始化
          MOV  A,#38H     ;双列显示,字形5*7点阵
          CALL  WCOM
          CALL  DELAY1
          MOV  A,#38H     ;双列显示,字形5*7点阵
          CALL  WCOM
          CALL  DELAY1
          MOV  A,#38H     ;双列显示,字形5*7点阵
          CALL  WCOM
          CALL  DELAY1
          MOV  A,#0CH     ;开显示,关光标,
          CALL  WCOM
          CALL  DELAY1
          MOV  A,#01H     ;清除 LCD 显示屏
          CALL  WCOM
          CALL  DELAY1
          RET
;----------------------------------------------------
LCD_SHOW:       ;在LCD的第一行或第二行显示信息字符

          CJNE  A,#1,LINE2  ;判断是否为第一行
LINE1:
          MOV  A,#80H       ;设置 LCD 的第一行地址
          CALL  WCOM        ;写入命令
          CALL  CLR_LINE    ;清除该行字符数据
          MOV  A,#80H       ;设置 LCD 的第一行地址
          CALL  WCOM        ;写入命令
          JMP  FILL
LINE2:
          MOV  A,#0C0H      ;设置 LCD 的第二行地址
          CALL  WCOM        ;写入命令
          CALL  CLR_LINE    ;清除该行字符数据
          MOV  A,#0C0H      ;设置 LCD 的第二行地址
          CALL  WCOM
FILL:
          CLR  A            ;填入字符
          MOVC  A,@A+DPTR   ;由消息区取出字符
          CJNE  A,#0,LC1    ;判断是否为结束码
          RET
LC1:
          CALL  WDATA       ;写入数据
          INC  DPTR         ;指针加1
          JMP  FILL         ;继续填入字符
          RET
;---------------------------------------------------
CLR_LINE:                  ;清除该行 LCD 的字符
          MOV  R0,#24
CL1:
          MOV  A,#' '
          CALL  WDATA
          DJNZ  R0,CL1
          RET
;----------------------------------------------------
MENU1:                      ;LCD 显示工作菜单信息
         MOV   DPTR,#MENU2
         MOV   A,#1         ;在第一行显示信息
         CALL  LCD_SHOW
         RET
MENU2:  DB  " REMOTE CONTROL ",0

;-----------------------------------------------------
; 写指令使能子程序
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;-----------------------------------------------------
WCOM:
          MOV  P0,A
          CLR RS
          CLR RW
          SETB EN
          CALL  DELAY0
          CLR EN
          RET
;-----------------------------------------------------
;写数据使能子程序
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;----------------------------------------------------
WDATA:
          MOV   P0,A
          SETB  RS
          CLR   RW
          SETB  EN
          CALL  DELAY0
          CLR   EN
          RET
DELAY0:
          MOV  R7,#250      ;延时500微秒
          DJNZ  R7,$
          RET
;---------------------------------------------------
;在 LCD 显示字符
;A=ASC DATA, B=LINE X POS
;---------------------------------------------------

LCDP1:                    ;在LCD的第一行显示字符
         PUSH  ACC        ;
         MOV  A,LCD_X     ;设置显示地址
         ADD  A,#80H      ;设置LCD的第一行地址
         CALL  WCOM       ;写入命令
         POP  ACC         ;由堆栈取出A
         CALL  WDATA      ;写入数据
         RET
LCDP2:                    ;在LCD的第二行显示字符
         PUSH  ACC        ;
         MOV  A,B         ;设置显示地址
         ADD  A,#0C0H     ;设置LCD的第二行地址
         CALL  WCOM       ;写入命令
         POP  ACC         ;由堆栈取出A
         CALL  WDATA      ;写入数据
         RET

;-----------------------------------------------
;蜂鸣器响一声子程序
;-----------------------------------------------
BEEP_BL:
           MOV   R6,#100
  BL1:
           CALL  DEX1
           CPL   BEEP
           DJNZ  R6,BL1
           MOV   R5,#25
           CALL  DELAY2
           RET
 DEX1:
           MOV   R7,#180
 DEX2:
           NOP
           DJNZ  R7,DEX2
           RET
 DELAY2:                    ;延时R5×10MS
           MOV   R6,#50
  D1:
           MOV   R7,#100
           DJNZ  R7,$
           DJNZ  R6,D1
           DJNZ  R5,DELAY2
           RET
;-----------------------------------------------
;延时5MS
;-----------------------------------------------
DELAY1:
         MOV  R6,#25
  DL2:
         MOV  R7,#100
         DJNZ  R7,$
         DJNZ  R6,DL2
         RET
TABLE_F:
          DB  0F1H,0F3H,0F2H,0F6H,0F4H,0FCH,0F8H,0F9H
          DB  00
TABLE_R:
          DB  0F9H,0F8H,0FCH,0F4H,0F6H,0F2H,0F3H,0F1H
          DB  00
;----------------------------------------------
;TABLE_F:
          DB  0F3H,0F6H,0FCH,0F9H
          DB  00
;TABLE_R:
          DB  0F9H,0FCH,0F6H,0F3H
          DB  00
;----------------------------------------------

          END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -