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

📄 pic-lcd.asm

📁 用PIC汇编实现单片机控制LCD显示以及人机对话全部代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
      MOVLW 0FH
      SUBWF DAYR,W
      MOVLW 09H
      BTFSC 3,2
      MOVWF DAYR
      GOTO  TRET
KEY0_MON:
      DECF  MONR,1

      MOVLW 00H
      SUBWF MONR,W
      MOVLW 12H
      BTFSC 3,2
      MOVWF MONR
      MOVLW 0FH
      SUBWF MONR,W
      MOVLW 09H
      BTFSC 3,2
      MOVWF MONR
      GOTO  TRET
KEY0_MIN:
      DECF  MINR,1

      MOVLW 0FFH
      SUBWF MINR,W
      MOVLW 59H
      BTFSC 3,2
      MOVWF MINR
      MOVLW 4FH
      SUBWF MINR,W
      MOVLW 49H
      BTFSC 3,2
      MOVWF MINR
      MOVLW 03FH
      SUBWF MINR,W
      MOVLW 39H
      BTFSC 3,2
      MOVWF MINR
      MOVLW 2FH
      SUBWF MINR,W
      MOVLW 29H
      BTFSC 3,2
      MOVWF MINR
      MOVLW 1FH
      SUBWF MINR,W
      MOVLW 19H
      BTFSC 3,2
      MOVWF MINR
      MOVLW 0FH
      SUBWF MINR,W
      MOVLW 09H
      BTFSC 3,2
      MOVWF MINR
      GOTO  TRET
KEY0_HOUR:
      DECF  HOUR,1

      MOVLW 0FFH
      SUBWF HOUR,W
      MOVLW 23H
      BTFSC 3,2
      MOVWF HOUR
      MOVLW 1FH
      SUBWF HOUR,W
      MOVLW 19H
      BTFSC 3,2
      MOVWF HOUR
      MOVLW 0FH
      SUBWF HOUR,W
      MOVLW 09H
      BTFSC 3,2
      MOVWF HOUR
      GOTO  TRET
KEY0_VOL:;VOL-- ;VOL--单个按键电平掉转时间最大60ms。;连续(长)按键Vw变化保持时间慢速模式100,250,375ms,;1s后进入快速模式25,50,75ms
      BCF   FLAG,7;取消长按无效标志
  BTFSS FLAG,LONG
      GOTO    KEY0_VOL0
      DECFSZ   TIM1
      GOTO  TRET;8M,时间周期1MS/循环
      MOVLW 8H
      MOVWF TIM1
      BSF   DSFLAG,7;按键长按时间大于90MS标志。
   GOTO  $+2;KEY_VOL_UP_D
KEY0_VOL0:
      BSF   FLAG,LONG
      BSF   DSFLAG,6;VOL--单次按键
KEY_VOL_UP_D:
      movf  KEEP,1
      BTFSC 3,2
      GOTO  KEY_VOLDOWN
KEY_VOLUP:
      INCF  VOL_TEMP,1
      MOVLW 11H
      SUBWF VOL_TEMP,W
      BTFSS 3,0
      GOTO  TRET
      MOVLW 10H
      MOVWF VOL_TEMP
      GOTO  TRET
KEY_VOLDOWN:
      DECF  VOL_TEMP,1
      MOVLW 06H
      SUBWF VOL_TEMP,W
      BTFSC 3,0
      GOTO  TRET
      MOVLW 06H
      MOVWF VOL_TEMP
      GOTO  TRET
;*********************************************
;*********************************************
DS1302:
      BTFSS DSFLAG,0
      GOTO  DS_SETUP
      BTFSC KEYF,0;VOL声音调节有效,只能读1302
      GOTO  RD1302
WR1302:;130条指令
      BTFSC KEYF,1
      GOTO  WR1302_YEAR
      BTFSC KEYF,2
      GOTO  WR1302_MON
      BTFSC KEYF,3
      GOTO  WR1302_DAY
      BTFSC KEYF,4
      GOTO  WR1302_HOUR
      GOTO  WR1302_MIN
WR1302_YEAR:
      BSF   PE,RST
    MOVLW B'10001100';YEAR ADD WR
      CALL  DS_WR
      MOVF  YEAR,W
      CALL  DS_WR
      BCF   PE,RST
      GOTO  WR_TRET
WR1302_MON:
      BSF   PE,RST
    MOVLW B'10001000';MON ADD WR
      CALL  DS_WR
      MOVF  MONR,W
      CALL  DS_WR
      BCF   PE,RST
      GOTO  WR_TRET
WR1302_DAY:
      BSF   PE,RST
    MOVLW B'10000110';DAY ADD WR
      CALL  DS_WR
      MOVF  DAYR,W
      CALL  DS_WR
      BCF   PE,RST
      GOTO  WR_TRET
WR1302_HOUR:
      BSF   PE,RST
    MOVLW B'10000100';HOUR ADD WR
      CALL  DS_WR
      MOVF  HOUR,W
      CALL  DS_WR
      BCF   PE,RST
      GOTO  WR_TRET
WR1302_MIN:
      BSF   PE,RST
    MOVLW B'10000010';MIN ADD WR
      CALL  DS_WR
      MOVF  MINR,W
      CALL  DS_WR
      BCF   PE,RST
WR_TRET:

      GOTO  TRET
;***********************
RD1302:;最多410条指令
      BTFSS FLAG,STA
      GOTO  TRET
      BTFSS DSFLAG,1;/0=>读时间/1=>读日期
      GOTO  RD1302_TIME
RD1302_DATA:
      BSF   PE,RST
   MOVLW B'10001001';MON ADD WR
      CALL  DS_WR
      CALL  DS_RD
      MOVF  TEMP,W
      BCF   PE,RST
      MOVWF MONR

   MOVLW B'10000111';DAY ADD RD
   BSF   PE,RST
      CALL  DS_WR
      CALL  DS_RD
      MOVF  TEMP,W
      BCF   PE,RST
      MOVWF DAYR

   MOVLW B'00001101';YEAR ADD WR
   BSF   PE,RST
      CALL  DS_WR
      CALL  DS_RD
      MOVF  TEMP,W
      MOVWF YEAR
      BCF   DSFLAG,1
   BCF   PE,RST
   BCF   PE,CLK
      GOTO  TRET
RD1302_TIME:
      BSF   PE,RST
   MOVLW B'10000011';MIN ADD RD
      CALL  DS_WR
      CALL  DS_RD
      MOVF  TEMP,W
      BCF   PE,RST
      MOVWF MINR

   MOVLW B'10000101';HOUR ADD RD
      BSF   PE,RST
      CALL  DS_WR
      CALL  DS_RD
      MOVF  TEMP,W
      MOVWF HOUR
      BCF   PE,RST

   BSF   DSFLAG,1
   BCF   PE,CLK
   GOTO  TRET
;***********************
DS_SETUP:;最多250条指令
   BTFSC DSFLAG,2;/
   GOTO  DS_SETUP1
DS_SETUP0:
   BSF   PE,RST
   MOVLW B'10001110';控制位地址,写
   CALL  DS_WR
   MOVLW 00H   ;WP0000000
   CALL  DS_WR ;WP=0,允许写
   BCF   PE,RST

   MOVLW B'10000000';MIAO位地址,写
    BSF   PE,RST
   CALL  DS_WR
   MOVLW 00H   ;CH0000000
   CALL  DS_WR ;CH=0,DS1302 WORK
    BCF   PE,RST

   BSF   DSFLAG,2
   BSF   PE,RST
    MOVLW B'10001001';MON ADD WR
      CALL  DS_WR
      CALL  DS_RD
      MOVF  TEMP,W
      BCF   PE,RST
      MOVWF MONR
DS_SETUP1:
       BSF   DSFLAG,0;DS1302设置完成
      GOTO  TRET
;******************************
;******************************
DELAY:
      BTFSS WORK,KUANG
      GOTO  TRET
      BTFSS FLAG,PPC
      GOTO  $+4
      NOP
      BTFSS PIR1,TXIF
      GOTO  DELAY

      BTFSS WORK,NO_SIGN
    GOTO  DELAY0
      BTFSS KEYF,0
    GOTO  DELAY0
      BTFSC WORK,TST
    GOTO  DELAY0
      MOVLW   03H
      SUBWF KEEP,W
      BTFSC 3,2
    GOTO  DELAY0
      DECFSZ   XDELAY,1
      GOTO  TRET
      DECFSZ   YDELAY,1
      GOTO  TRET
;---------------------------
      BSF   PC,RT
      MOVLW 0A9H ;B'10101001'
      BCF   PC,CS
      CALL  W_INS;设置省电模式
      NOP
      BCF   PD,BUZ ;自动关机
      GOTO  TRET
;---------------------------
DELAY0:
      CLRF  XDELAY
      CLRF  YDELAY
      GOTO  TRET
;*********************************
;*********************************
DISP:
      BSF   PC,RT  ;=>/RST芯片复位口,低电平复位。
      BTFSS FLAG,SETUP
      GOTO  DISP_SETUP
      BTFSS FLAG,CLRLCD
      GOTO  DISP1 ;CLR_LCD
      BTFSS FLAG,STA
      GOTO  DISP11;;显示开机画面
      btfsS TIMTZ,0
      GOTO  DISP_WK
       BSF  PCLATH,4
      GOTO  TIM_TZ;;进入时间调节界面

DISP_SETUP:;;240
;-----------------------------------------   11-7 V 测试   
	MOVLW		48H
	CALL		W_INS				;Display Duty=1/96
	MOVLW		68H					;11-7 60H数据越小,背景越黑
	CALL		W_INS
	
	MOVLW		0A1H				;ADC=1;
	CALL		W_INS	
	
	MOVLW		0C0H				;SHL=0;
	CALL		W_INS
	
	MOVLW		44H					;COM0=16
	CALL		W_INS
	MOVLW		10H
	CALL		W_INS
	
	MOVLW		40H					;Initial display line=0
	CALL		W_INS
	MOVLW		00H
	CALL		W_INS

	MOVLW		0ABH				;Oscillator on start
	CALL		W_INS
	
	MOVLW		66H					;DC-DC step-up register=5
	CALL		W_INS
	
	MOVLW		27H					;regulator resistor=7
	CALL		W_INS
	
	MOVLW		81H					;electronic volume regigister=32
	CALL		W_INS
	MOVLW		20H
	CALL		W_INS
	
	MOVLW		54H					;LCD bias=1/9
	CALL		W_INS
	
	MOVLW		93H					;FRC=4,PWM=15
	CALL		W_INS

      MOVLW	88H
      CALL		W_INS
      MOVLW	00H
      CALL		W_INS
      MOVLW	89H
      CALL		W_INS
      MOVLW	00H
      CALL		W_INS
      
      MOVLW	8AH
      CALL		W_INS
      MOVLW	88H
      CALL		W_INS
      MOVLW	8BH
      CALL		W_INS
      MOVLW	88H
      CALL		W_INS
      
       MOVLW	8CH
      CALL		W_INS
      MOVLW	0BBH
      CALL		W_INS
      MOVLW	8DH
      CALL		W_INS
      MOVLW	0BBH
      CALL		W_INS
      
      MOVLW	8EH
      CALL		W_INS
      MOVLW	0EEH
      CALL		W_INS
      MOVLW	8FH
      CALL		W_INS
      MOVLW	0EEH
      CALL		W_INS   
      ;wait for  1ms
      MOVLW	.6					;200*0.25us=50us
      MOVWF	CNT_H
XFBB1:      
      MOVLW	.200
      MOVWF	CNT_L
XFBB11:
      DECFSZ	CNT_L,1
      GOTO		XFBB11
      DECFSZ	CNT_H,1
     	GOTO		XFBB1
      
      MOVLW	2EH				;VC=1,VR=1,VF=0		
      CALL		W_INS
      ;wait for  1ms
      MOVLW	.6					;200*0.25us=50us
      MOVWF	CNT_H
XFBB2:      
      MOVLW	.200
      MOVWF	CNT_L
XFBB21:
      DECFSZ	CNT_L,1
      GOTO		XFBB21
      DECFSZ	CNT_H,1
     	GOTO		XFBB2
      MOVLW	2FH					;VC=1,VR=1,VF=1	
      CALL		W_INS			
      ;wait for  1ms
      MOVLW	.6					;200*0.25us=50us
      MOVWF	CNT_H
XFBB3:      
      MOVLW	.200
      MOVWF	CNT_L
XFBB31:
      DECFSZ	CNT_L,1
      GOTO		XFBB31
      DECFSZ	CNT_H,1
     	GOTO		XFBB3
      MOVLW	0AFH				;Display on, DON=1
      CALL		W_INS
;-----------------------------------------         
      DECFSZ   WEEK,1;电源控制
      GOTO  TRET
      MOVLW 02H
      MOVWF WEEK
      BTFSC SECR,0
      GOTO  DISP_SETUP_OK
      MOVF  SECR,W;MOVLW 02CH ;B'0010-1-VC-VR-VF'
      CALL  W_INS;电源控制

      BTFSC SECR,1
      BSF   SECR,0
      BSF   SECR,1
      BTFSS SECR,2
      GOTO  $
      GOTO  TRET
DISP_SETUP_OK:
      BSF   FLAG,SETUP

      MOVLW 040H ;B'010000XX'
      CALL  W_INS;设置显示起始行
      ;NOP
      MOVLW 00H  ;B'X-S6-S5-S4-S3-S2-S1-S0'
      CALL  W_INS
      ;NOP

      MOVLW 10H  ;B'00010-Y7-Y6-Y5'
      CALL  W_INS;设置列地址高位
      ;NOP
      MOVLW 00H  ;B'0000-Y4-Y3-Y2-Y1'
      CALL  W_INS;设置列地址低位
      ;NOP
      MOVF  SECR,W;MOVLW 02CH ;B'0010-1-VC-VR-VF'
      CALL  W_INS;电源控制
      GOTO  TRET
;*******************
DISP1:
DISP_CLR_LCD:
   BCF   PC,CS
   MOVLW 0AFH  ;DISP  ON
   CALL  W_INS

   MOVLW 0B0H  ;B'1011-P3-P2-P1-P0'9页
   XORWF PCOM,W;设置页地址
   CALL  W_INS
CLR_LCD:
   MOVLW 00H
      CALL  W_DATA
      ;NOP
      CALL  W_DATA

      INCF  TIM,1
      MOVLW 080H
      SUBWF TIM,W
      BTFSS 3,2
      GOTO  TRET
      CLRF  TIM

      INCF  PCOM,1
      MOVLW 0CH
      SUBWF PCOM,W
      BTFSS 3,2
      GOTO  TRET
      BSF   FLAG,CLRLCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      BTFSC FLAG,STA
      ;BSF   FLAG,STA;;为贴牌修改
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         GOTO  NEXT
      MOVLW 09H;为开机画面准备
      MOVWF PCOM
      MOVLW 04H
      MOVWF YCOM_L
      MOVLW 01H
      MOVWF YCOM_H
      GOTO  NEXT1
NEXT:
      MOVLW  .11;;;WEI  框架准备
      MOVWF  PCOM
      CLRF  YCOM_L
      CLRF  YCOM_H
      BTFSS TIMTZ,0;;WEI进入时间调整准备
      GOTO  NEXT1
 MOVLW   08H
 MOVWF   YCOM_L
 MOVLW   01H
 MOVWF   YCOM_H
 MOVLW   09H
 MOVWF   PCOM
 GOTO TRET
NEXT1:
      MOVLW 10H  ;B'00010-Y7-Y6-Y5'
      XORWF YCOM_H,W
      CALL  W_INS;设置列地址高位
      ;NOP
      MOVLW 00H  ;B'0000-Y4-Y3-Y2-Y1'
      XORWF YCOM_L,W
      CALL  W_INS;设置列地址低位
      GOTO  TRET
;***********************
DISP11:;显示开机画面
DISP_ON:
   MOVLW 0B0H  ;B'1011-P3-P2-P1-P0'9页
   XORWF PCOM,W;设置页地址
   CALL  W_INS
   BTFSS DISP_FG,2
   GOTO  DISP23
   BTFSS DISP_FG,3
   GOTO  DISP45
   BTFSS DISP_FG,4
   GOTO  DISP67
   BTFSS DISP_FG,5
   GOTO  DISP89
   GOTO  $
;******************
DISP23:
   INCF  TCOUNT,1
   
   MOVLW	1AH
   MOVWF	PCLATH   
   MOVF  	TCOUNT,W
   CALL  	PAGE23
   CLRF		PCLATH
   
   CALL  W_DATA
   ;NOP
   CALL  W_DATA
   MOVLW 69H;;;??
   SUBWF TCOUNT,W
   BTFSC 3,2
   GOTO  DISP230
   MOVLW 0E0H;;;??
   SUBWF TCOUNT,W
   BTFSS 3,2
   GOTO  TRET
DISP230
   DECF  PCOM,1
   MOVLW 08H
   SUBWF PCOM,W
   MOVLW 08H   ;PAGE8
   BTFSS 3,2
   MOVLW 02H  ;PAGE7
   MOVWF YCOM_L
   CLRF  YCOM_H

   MOVLW 10H  ;B'00010-Y7-Y6-Y5'
   XORWF YCOM_H,W
   CALL  W_INS;设置列地址高位
   MOVLW 00H  ;B'0000-Y4-Y3-Y2-Y1'
   XORWF YCOM_L,W
   CALL  W_INS;设置列地址低位

   MOVLW 02H
   SUBWF YCOM_L,W
   BTFSS 3,2
   GOTO  TRET
   MOVLW 0FFH
   MOVWF TCOUNT
   BSF   DISP_FG,2
   GOTO  TRET
;*************************
DISP45:
   INCF  TCOUNT,1
   MOVF  TCOUNT,W
   BSF   PCLATH,3
   CALL  PAGE45

⌨️ 快捷键说明

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