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

📄 last.asm

📁 其是一个用PIC单片机驱动的LCD程序。开机时显示工作画面
💻 ASM
字号:
/**********************************************************
通过RB1,与RB2口连接两个接键,接不同的接键会在LCD上显示不同的
提示信息,最开始LCD上会出现工作界面:HELLO
;**********************************************************
  __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;***********************************************************
STATUS  EQU 3H   ;定义状态寄存器地址
pcl     EQU 02H  ;定义程序寄存器低8位
PORTA   EQU 5H   ;定义RA口数据寄存器地址
PORTB   EQU 6H   ;定义RB口数据寄存器地址 
PORTC   EQU 7H   ;定义RC口数据寄存器地址
TRISA   EQU 85H  ;定义RA口方向控制寄存器地址
TRISB   EQU 86H  ;定义RB口方向控制寄存器地址
TRISC   EQU 87H  ;定义RC口方向控制寄存器地址
ADCON1  EQU 9FH  ;定义ADC模块控制寄存器1的地址
OPTION_REG  EQU  81H  ;
;********************
Z       EQU 2    ;定义0状态位的位地址
RP0     EQU 5    ;定义页选位RP0的位地址
;*********************
RS EQU 1         ;LCD寄存器选择信号脚定义在RA.1脚
RW EQU 2         ;LCD读/写信号脚定义在RA.2脚
E  EQU 3         ;LCD片选信号脚定义在RA.3脚
BU EQU 7         ;LCD忙
;**************************
KEYNU   EQU   25H ;显示字符数
ABC     EQU   23H ;字符变量
KEYP    EQU   24H ;
;*******************************
ZERO  EQU     0
ONE   EQU     1
TWO   EQU     2
THR   EQU     3
FOR   EQU     4
;*******************************
  ORG 000H 
  NOP            ;放置一条ICD必需的空操作指令
  GOTO MAIN
  ORG 0008H
MAIN
  BSF STATUS,RP0     
  MOVLW 07H
  MOVWF ADCON1       ;设置RA口全部为普通数字IO口
  MOVLW 00H          ;定义RA口,RC口全部为输出
  MOVWF TRISA
  MOVWF TRISC
  BCF   OPTION_REG,7
  MOVLW 0FFH
  MOVWF TRISB        ;定义RB口为输入口
  BCF STATUS,RP0     ;进入页0进行设置

  call LCDSET        ;初始化lcd
                     ;显示工作画面HELLO
  MOVLW  00H      
  MOVWF  ABC         ;显示字符位数
LP1  
  MOVF   ABC,W
  CALL   HELLO
  MOVWF  PORTC       ;显示一个字符
  CALL   DATAEN      ;WRITE DATA ENABLE
  INCF   ABC
  MOVLW  05H         ;共显示5个字符
  SUBWF  ABC,W
  BTFSS  STATUS,Z
  GOTO   LP1         ;工作画面显示完毕

MYKEY 
  MOVLW 0FFH
  MOVWF KEYP
  CALL KEY           ;键盘子程序
  MOVF KEYP,F
  BTFSS STATUS,Z
  GOTO  MYKEY
                     ;有按键按下
  MOVLW 01H
  MOVWF PORTC        ;清屏
  CALL ENABLE

  MOVLW  00H      
  MOVWF  ABC         ;显示字符位数
LP2  
  MOVF   ABC,W
  CALL   PRESSED
  MOVWF  PORTC       ;显示一个字符
  CALL   DATAEN
  INCF   ABC
  MOVLW  09H         ;共显示9个字符
  SUBWF  ABC,W
  BTFSS  STATUS,Z
  GOTO   LP2

  MOVF   KEYNU,W     ;把键码显示出来
  CALL   TABLE2
  MOVWF  PORTC       ;显示一个字符
  CALL   DATAEN

  goto   MYKEY
;------------------------------------------------------
;--------------------------KEY------------------------- 
;------------------------------------------------------
KEY
  BTFSC   PORTB,1               ;判断B1是否按下
  GOTO    KEY2                  ;没有看B2
  CALL    DELAY5MS
  CALL    DELAY5MS
  BTFSC   PORTB,1
  GOTO    KEY2
  CLRF    KEYP
  MOVLW   01H
  MOVWF   KEYNU                 ;把按键代码放入KEYNU中
  
KEY2
  BTFSC   PORTB,2
  GOTO    TAIL
  CALL    DELAY5MS
  CALL    DELAY5MS
  BTFSC   PORTB,2
  GOTO    TAIL
  CLRF    KEYP
  MOVLW   02H
  MOVWF   KEYNU  
TAIL  
  RETLW   0H

;-------------------------------------------------------
;-------------------下面为LCD初始化过程-----------------
;-------------------------------------------------------
LCDSET  
  call  DELAY5MS     ;延时15ms,LCD上电复位可能比PIC慢
  call  DELAY5MS
  call  DELAY5MS
  MOVLW 01H
  MOVWF PORTC        ;清屏
  CALL ENABLE
  MOVLW 38H          ;显示模式:8位2行5x7点阵
  MOVWF PORTC
  CALL ENABLE
  MOVLW 38H
  MOVWF PORTC        ;显示模式:8位2行5x7点阵
  CALL ENABLE
  MOVLW 0FH          ;显示器开、光标开、闪烁开
  MOVWF PORTC        
  CALL ENABLE
  MOVLW 06H          ;读或写下个字符后光标自动右移
  MOVWF PORTC
  CALL ENABLE
  MOVLW 0C0H         ;写入显示起始地址(第一行第一个位置)
  MOVWF PORTC         
  CALL ENABLE  
  retlw  0h
;------------------------------------------------  
;---------------写入commend使能------------------
;------------------------------------------------  
ENABLE
  BCF PORTA,RS         ;写入控制命令的子程序.RS=L
  BCF PORTA,RW         ;RW=L
  BCF PORTA,E          ;E为一高脉冲
  CALL DELAY5MS
  BSF PORTA,E
  RETLW 0  
;------------------------------------------------  
;---------------写入 data  使能------------------
;------------------------------------------------
DATAEN 
  BSF    PORTA,RS    ;液晶模块写数字
  BCF    PORTA,RW
  BCF    PORTA,E
  CALL   DELAY5MS
  BSF    PORTA,E
  RETLW  0
;----------------------------------------------
;------------------字码表----------------------
;----------------------------------------------
HELLO   addwf  pcl,f
        dt   48h,45h,4ch,4ch,4fh                        ;HELLO


PRESSED  addwf   pcl,f                                   ;pc相对寻相查表
         dt   50h,52h,45h,53h,53h,45h,44h,20H,20H        ;pressed


TABLE2  addwf   pcl,f 
        dt   30h,33h,34H                                     ;0,1,2,3,4

;---------------------------------------------  
;延时5MS子程序
;---------------------------------------------  
DELAY5MS   movlw   08h      ;外循环常数
           movwf   20h      ;外循环寄存器
loop1      movlw   0ffh     ;内循环常数
           movwf   21h      ;内循环寄存器
loop2      decfsz  21h      ;内循环寄存器递减
           goto    loop2    ;继续内循环
           decfsz  20h      ;外循环寄存器递减
           goto    loop1    ;继续外循环
           return
           end

;*******************END*******************************

⌨️ 快捷键说明

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