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

📄 lcd发射控制.asm

📁 带lcd 的发射电路驱动程序
💻 ASM
字号:
;***************************;
;     数控调频手动控制器    ;
;***************************;
;显示驱动模块HT1621
;发射控制芯片BH1415F
WEISHU   EQU  30H  ;位数指示
XIANSHI  EQU  31H  ;位指示
CONBITL  EQU  21H  ;频率控制字节低8位
CONBITH  EQU  22H  ;频率控制字节高8位
LCDL     EQU  24H  ;LCD控制字节低8位
LCDH     EQU  25H  ;LCD控制字节高8位
KEYWORD  EQU  23H  ;存放键扫描时P1口值
DATA     EQU  P3.7    ;LCD数据
CLOCK    EQU  P3.6    ;LCD时钟
CSCE     EQU  P3.5    ;LCD片选
Muting   EQU  P2.0    ;发射静音(厂里P2.0)(家里)
DATAF    EQU  P2.1    ;发射数据(厂里P2.1)(家里)
CLOCKF   EQU  P2.2    ;发射时钟(厂里P2.2)(家里)
CSCEF    EQU  P2.3    ;发射片选(厂里P2.3)(家里)
DATAFF   EQU  P2.7    ;发射数据(厂里)(家里P2.7)
CLOCKFF  EQU  P2.6    ;发射时钟(厂里)(家里P2.6)
CSCEFF   EQU  P2.5    ;发射片选(厂里)(家里P2.5)
;
;
              ORG	0000H   ;程序开始地址
              LJMP      START    ;转START执行
              ORG 	0003H       ;
              RETI       		;不用中断程序
              ORG 	000BH       ;
	      RETI       		; 不用中断程序
              ORG 	0013H       ;
	      RETI       		; 不用中断程序
	      ORG 	001BH       ;
	      RETI       		; 不用中断程序
	      ORG 	0023H       ;
	      RETI       		; 不用中断程序
	      ORG	002BH      ;
 	      RETI       		; 不用中断程序
;
;初始化程序
CLEARMEN:    MOV   R0,#20H       ;20H-34H循环清0
             MOV   R1,#12H       ;
CLEARLOOP:   MOV   @R0,#00H      ;
             INC   R0       		 ;
             DJNZ  R1,CLEARLOOP  ;
             MOV   P1,#0FFH      ;
             MOV   P0,#0FFH
             MOV   P2,#0FFH
             MOV   P3,#0FFH
             CLR   Muting       ;发射开音BH1415禁止操作
             CLR   DATAF        ;发射数据
             CLR   CLOCKF       ;发射时钟
             CLR   CSCEF        ;发射片选
CLEAR1:      MOV   PCON,#00H    	;控制寄存器清0
             MOV   29H,#01H       	; 置初始值为110.0MHZ倍频后220MHZ
             MOV   28H,#00H   		;
             MOV   27H,#06H       	;
             MOV   26H,#05H       	;
             LCALL DISPUPDAT    		;写入BH1415芯片(修改发送频率)
             MOV   WEISHU,#05H
             LCALL  XIANSHIA
             RET
;
CLS2:	MOV	A,#10000000B	;SYS	EN
	MOV	R3,#8
	CLR	P3.5	;LCD片选
	LCALL	PUTT
	MOV	A,#00111111B
	MOV	R3,#5
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
	MOV	A,#10000000B	;LCD	ON
	MOV	R3,#8
	CLR	P3.5	;LCD片选
	LCALL	PUTT
	MOV	A,#01111111B
	MOV	R3,#5
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
	MOV	A,#10000101B	;BIAS	1/3
	MOV	R3,#8
	CLR	P3.5	;LCD片选
	LCALL	PUTT
	MOV	A,#01111111B
	MOV	R3,#5
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
        RET
;主程序
START:       LCALL  CLEARMEN       	;上电初始化
             LCALL  CLS2
MAIN:        LCALL  KEYFUN00        	;调查键子程序
             LCALL  DINGSHI
             AJMP   MAIN       		;转MAIN循环
             NOP       				;PC出错处理
             NOP       				;
             AJMP   START       		;重新初始化
;
    HECHENG: MOV    R0,#7
    LOOP:    MOV    A,LCDH
             RLC    A
             MOV    LCDH,A
             MOV    A,LCDL
             RLC    A
             RL     A
             MOV    B,A
             INC    LCDL
             LCALL  LCDPLAY
             DJNZ  R0,LOOP
             RET
;
KEYFUN00:    JB     P1.1,DSFSFAS
KEYFUN0011:  LCALL  XIANSHIA
             JNB    P1.1,KEYFUN0011
             LCALL  XIANSHIA
             LCALL  XIANSHIA
             JNB    P1.1,KEYFUN0011
             INC    WEISHU				;个位数加1
             MOV    A,WEISHU			;
             CLR    C				;
             CJNE   A,#06H,JHLLURYEE		;判断是否小于10
JHLLURYEE:   JC     DSFSFAS			;小于10转FUN02OUT
             MOV    WEISHU,#01H			;大于或等于10清为0
DSFSFAS:     LCALL  XIANSHIA
             RET						;
;
;
DINGSHI:     JB     P1.2,RGERRTHRTH
DINGSHI1:    LCALL  XIANSHIA
             LCALL  XIANSHIA
             JNB    P1.2,DINGSHI1
             LCALL  XIANSHIA
             LCALL  XIANSHIA
             JNB    P1.2,DINGSHI1
             MOV    A,WEISHU
             CJNE   A,#01H,NAGEAIQU1
KEYFUN01:    CLR    A
             INC    28H          	        ;百位数加1
             MOV    A,28H        	        ;入A
             CLR    C         		        ;清进位标志
             CJNE   A,#04H,FUN001                ;                    ;百位小于2转FUNOO0UT
             MOV    28H,#08H
             AJMP   FUN0013                    ;大于等于2清为0(百位只能是0或1)
FUN001:      CJNE   A,#09H,FUN0012
             MOV    28H,#09H
             AJMP   FUN0013
FUN0012:     CJNE   A,#0AH,FUN0013
             MOV    28H,#00H
FUN0013:     LCALL  DISPUPDAT             ;写入控制芯片(修改发射频率)
             AJMP   NAGEAIQU
NAGEAIQU1:   CJNE   A,#02H,NAGEAIQU2
             CLR    A
             INC    27H				;个位数加1
             MOV    A,27H			;
             CLR    C				;
             CJNE   A,#0AH,FUN02		;判断是否小于10
FUN02:       JC     FUN02OUT			;小于10转FUN02OUT
             MOV    27H,#00H			;大于或等于10清为0
FUN02OUT:    LCALL  DISPUPDAT                   ;写入控制芯片(修改发射频率)
             AJMP   NAGEAIQU
NAGEAIQU2:   CJNE   A,#03H,NAGEAIQU3
             CLR    A
             INC    26H				;个位数加1
             MOV    A,26H			;
             CLR    C				;
             CJNE   A,#0AH,FUN03		;判断是不小于10
FUN03:       JC     FUN03OUT			;小于10转FUN03OUT
             MOV    26H,#00H			;大于或等于10清为0
FUN03OUT:    LCALL  DISPUPDAT                   ;写入控制芯片(修改发射频率)
             AJMP   NAGEAIQU
NAGEAIQU3:   CJNE   A,#04H,NAGEAIQU
             CLR    A
             INC    29H				;个位数加1
             MOV    A,29H			;
             CLR    C				;
             CJNE   A,#02H,FUN04		;判断是不小于10
FUN04:       JC     FUN04OUT			;小于10转FUN03OUT
             MOV    29H,#00H			;大于或等于10清为0
FUN04OUT:    LCALL  DISPUPDAT                   ;写入控制芯片(修改发射频率)
NAGEAIQU:    LCALL  XIANSHIA
RGERRTHRTH:  LCALL  XIANSHIA
             RET
; 将BCD码转为十六进制数,与5位控制码合成操作码,写入控制芯片
DISPUPDAT:   LCALL  BCDB       		; 调BCD码转为十六进制数程序
             LCALL  CONCOMMAND  	; 调与5位控制码合成操作码程序
             LCALL  PUTBIT       	; 发控制字至BH1415
             RET   					;返回
;
; 将BCD码转为十六进制数程序
BCDB:        MOV    A,#00H
             MOV    CONBITL,#00H   	; 控制字清0
             MOV    CONBITH,#00H   	; 控制字清0
             MOV    CONBITL,26H   	;小数位数放入控制字低8位
             MOV    A,27H   			;个位数乘10操作
             MOV    B,#10   			;
             LCALL  MULLOOP   		;调乘法子程序
             MOV    A,28H   			;十位数乘100操作
             MOV    B,#100   		;
             LCALL  MULLOOP   		; 调乘法子程序
             MOV    A,29H   			;
             JNZ    ADD3E8   		;百位数为1转ADD3E8(加1000操作)
             RET   					; 百位数为0退出
ADD3E8:      CLR    C   				;清进位档标志
             MOV    A,#0E8H   			;低8位加法
             ADD    A,CONBITL   			;累加
             MOV    CONBITL,A   			;放回CONBITL
             MOV    A,#03H   			; 高8位加法
             ADDC   A,CONBITH   			;控制字高8位处理
             MOV    CONBITH,A   			;放回CONBITH
             RET   						;返回
;
;乘法及累加处理程序(将四位显示的十进制BCD码转为1个二进制数)
MULLOOP:     MUL    AB   				;乘法
             CLR    C   					;清进位标志
             ADD    A,CONBITL   			;积低8位与CONBITL相加
             MOV    CONBITL,A   			;放回CONBITL
             MOV    A,CONBITH   			;
             ADDC   A,B   				;积高8位与CONBITH带进位累加
             MOV    CONBITH,A   			;放回CONBITH
             RET   						;返回
;
;频率控制数据与5位控制码合成BH1415控制字
CONCOMMAND:  ANL   CONBITH,#07H   		;高四位为0
             MOV   A,#40H   			;控制字放入A
             ORL   A,CONBITH   			;合成控制字
             MOV   CONBITH,A   			;放回CONBITH
             RET   						;返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           发送控制字节子程序        ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PUTBIT:      MOV   A,CONBITL   			;低8位控制字入A
             SETB  CSCEF   	;片选			;BH1415使能(允许写)
             LCALL PUT
             MOV   A,CONBITH   			; 高8位控制字入A
             LCALL PUT   				; 发送8位
             CLR   CSCEF   	;片选			; BH1415写禁止
             CLR   DATAF   				;复位
             CLR   CLOCKF
             MOV   A,CONBITL   			;低8位控制字入A
             SETB  CSCEFF   	;片选			;BH1415使能(允许写)
             LCALL PUTTT
             MOV   A,CONBITH   			; 高8位控制字入A
             LCALL PUTTT   				; 发送8位
             CLR   CSCEFF   	;片选			; BH1415写禁止
             CLR   DATAFF   				;复位
             CLR   CLOCKFF  				;复位
             RET   						;返回
;
;字节发送子程序
PUT:         MOV   R3,#8   				;发送8位控制
             CLR   C   					;清C
PUT1:        RRC   A   					;带进位位右移(先发低位)
             MOV   DATAF,C   				;低位送至P3.0口
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             SETB  CLOCKF   				;锁存数据(上升沿时锁存数据)
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             CLR   CLOCKF   				;
             DJNZ  R3,PUT1   			;8位未发完转PUT1再发
             RET   						; 8位发完结束
;
;字节发送子程序
PUTT:        CLR   C   					;清C
PUTT1:       RLC   A   					;带进位位右移(先发低位)
             MOV   DATA,C   				;低位送至P3.0口
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             CLR  CLOCK   				;锁存数据(上升沿时锁存数据)
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             SETB   CLOCK
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             DJNZ  R3,PUTT1   			;8位未发完转PUT1再发
             RET
;
;字节发送子程序
PUTTT:       MOV   R3,#8
             CLR   C   					;清C
PUTTT1:      RRC   A   					;带进位位右移(先发低位)
             MOV   DATAFF,C   				;低位送至P3.0口
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             CLR  CLOCKFF   				;锁存数据(上升沿时锁存数据)
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             SETB   CLOCKFF
             DJNZ  R3,PUTTT1   			;8位未发完转PUT1再发
             RET
;
;513微秒延时子程序
DL513:       MOV   R3,#0FFH
DL513LOOP:   DJNZ  R3,DL513LOOP
             RET
;
;1毫秒延时子程序(LED点亮用)
DL1MS:       MOV   R4,#02H
DL1MSLOOP:   LCALL DL513
             DJNZ  R4,DL1MSLOOP
             RET
;
;10毫秒延时子程序(消抖动用)
DL10MS:      MOV   R6,#0AH
DL10MSLOOP:  LCALL DL1MS
             DJNZ  R6,DL10MSLOOP
             RET
;
DL05S:       LCALL DL10MS
             LCALL DL10MS
             RET
;
XIANSHIA:    LCALL  JIESHUZHIINB
             MOV    A,41H
             MOV    DPTR,#TABDZI
             MOVC   A,@A+DPTR
             MOV    LCDH,A
             MOV    LCDL,#0
             LCALL  HECHENG
             MOV    A,42H
             MOV    DPTR,#TABDZI
             MOVC   A,@A+DPTR
             MOV    LCDH,A
             MOV    LCDL,#7
             LCALL  HECHENG
             MOV    A,43H
             MOV    DPTR,#TABDZI
             MOVC   A,@A+DPTR
             MOV    LCDH,A
             MOV    LCDL,#14
             LCALL  HECHENG
             MOV    A,44H
             MOV    DPTR,#TABDZI
             MOVC   A,@A+DPTR
             MOV    LCDH,A
             MOV    LCDL,#21
             LCALL  HECHENG
             MOV    B,#01110001B      ;小数点1
             LCALL  LCDPLAY
             MOV    B,#01111101B      ;小数点2
             LCALL  LCDPLAY
             MOV    B,#01111001B      ;小数点3
             LCALL  LCDPLAY
             RET
;位数指示
JIESHUZHIINB: MOV    A,WEISHU
             CJNE   A,#01H,NAGEAIQU1111
             MOV          41H,#0AH
             MOV          42H,#0AH
             MOV          43H,28H
             MOV          44H,#0AH
             AJMP   JIESHUZHOUT5555
NAGEAIQU1111: CJNE   A,#02H,NAGEAIQU2222
             MOV          41H,#0AH
             MOV          42H,27H
             MOV          43H,#0AH
             MOV          44H,#0AH
             AJMP   JIESHUZHOUT5555
NAGEAIQU2222:   CJNE   A,#03H,NAGEAIQU3333
             MOV          41H,26H
             MOV          42H,#0AH
             MOV          43H,#0AH
             MOV          44H,#0AH
             AJMP   JIESHUZHOUT5555
NAGEAIQU3333:   CJNE   A,#04H,JIESHUZHOUT4444
             MOV          41H,#0AH
             MOV          42H,#0AH
             MOV          43H,#0AH
             MOV          44H,29H
             AJMP   JIESHUZHOUT5555
JIESHUZHOUT4444:  CJNE  A,#05H,JIESHUZHOUT5555
             MOV          41H,26H
             MOV          42H,27H
             MOV          43H,28H
             MOV          44H,29H            
JIESHUZHOUT5555:RET
;读字节
DUZIJIE:MOV     A,#10100000B
	MOV	R3,#3
	CLR	P3.5	;LCD片选
        LCALL	PUTT
        RET
;
LCDPLAY:LCALL   DUZIJIE
        MOV	A,B	;字1
	MOV	R3,#10
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
        RET
;
TABDZI:	DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,02H,00H
;            0   1    2   3    4    5   6    7    8     9    灭     
  
             END   							;程序结束

⌨️ 快捷键说明

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