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

📄 atm89c2051rts.asm

📁 2051驱动lcd 显示程序
💻 ASM
字号:
;***************************;
;     数控调频手动控制器    ;
;***************************;
;发射控制芯片BH1415F
;P2和P0扫描显示LED
WEISHU   EQU  30H  ;位数指示
XIANSHI  EQU  31H  ;位指示
CONBITL  EQU  21H  ;频率控制字节低8位
CONBITH  EQU  22H  ;频率控制字节高8位
KEYWORD  EQU  23H  ;存放键扫描时P1口值
Muting   EQU  P1.4    ;发射静音
DATAF    EQU  P1.6    ;发射数据
CLOCKF   EQU  P1.7    ;发射时钟
CSCEF    EQU  P1.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
             RET
;主程序
START:       LCALL  CLEARMEN       	;上电初始化
MAIN:        LCALL  KEYFUN00        	;调查键子程序
             LCALL  DINGSHI
             LCALL  DISPLAY        	;LED显示一次
             AJMP   MAIN       		;转MAIN循环
             NOP       				;PC出错处理
             NOP       				;
             AJMP   START       		;重新初始化
;位数指示
JIESHUZHIIN: MOV    A,WEISHU
             CJNE   A,#01H,NAGEAIQU111
             MOV          31H,#14H
             MOV          32H,#0AH
             MOV          33H,28H
             MOV          34H,#14H
             AJMP   JIESHUZHOUT555
NAGEAIQU111: CJNE   A,#02H,NAGEAIQU222
             MOV          31H,#14H
             MOV          32H,27H
             MOV          33H,#14H
             MOV          34H,#14H
             AJMP   JIESHUZHOUT555
NAGEAIQU222:   CJNE   A,#03H,NAGEAIQU333
             MOV          31H,26H
             MOV          32H,#0AH
             MOV          33H,#14H
             MOV          34H,#14H
             AJMP   JIESHUZHOUT555
NAGEAIQU333:   CJNE   A,#04H,JIESHUZHOUT444
             MOV          31H,#14H
             MOV          32H,#0AH
             MOV          33H,#14H
             MOV          34H,29H
             AJMP   JIESHUZHOUT555
JIESHUZHOUT444:  CJNE  A,#05H,JIESHUZHOUT555
             MOV          31H,26H
             MOV          32H,27H
             MOV          33H,28H
             MOV          34H,29H            
JIESHUZHOUT555:RET
;
KEYFUN00:    JB     P3.2,DSFSFAS
KEYFUN0011:  LCALL  DISPLAY
             JNB    P3.2,KEYFUN0011
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             JNB    P3.2,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:     RET						;
;
;
DINGSHI:     JB     P3.3,RGERRTHRTH
DINGSHI1:    LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             JNB    P3.3,DINGSHI1
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             LCALL  DISPLAY
             JNB    P3.3,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  DISPLAY
RGERRTHRTH:  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   				;复位
             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位发完结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           显示程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P1口输出段码数据,P3口作
; 扫描控制,每个LED数码管亮1MS时间再逐位循环。
          DISPLAY: LCALL        JIESHUZHIIN
                   MOV          A,#0AH
                   ADD          A,32H
                   MOV          32H,A
                   MOV 		R1,#31H       ;指向显示数据首址
                   MOV 		R5,#0FEH      ;扫描控制字初值
             PLAY: MOV 		A,R5          ;扫描字放入A
                   MOV 		P2,A          ;从P3口输出
                   MOV 		A,@R1         ;取显示数据到A
                   MOV 		DPTR,#TAB     ;取段码表地址
                   MOVC		A,@A+DPTR     ;查显示数据对应段码
                   MOV 		P0,A          ;段码放入P1口
                   LCALL 	DL1MS         ;显示1MS
                   INC 		R1            ;指向下一地址
                   MOV 		A,R5            ;扫描控制字放入A
          ENDOUTA: JNB 		ACC.5,ENDOUT    ;ACC.5=0时一次显示结束
                   RL 		A               ;A中数据循环左移
                   MOV 		R5,A            ;放回R5内
                   AJMP 	PLAY            ;跳回PLAY循环
           ENDOUT: SETB 	P2.5            ;一次显示结束,P3口复位
                   MOV 		P2,#0FFH     ;P3.7口为0时转时间调整程序
                   RET                      ;子程序返回
             TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                  DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,0BFH
;共阳段码表          "0""1""2" "3""4""5""6""7" "8""9""不亮"
;
;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
;  
             END   							;程序结束

⌨️ 快捷键说明

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