基于51单片机的频率计 数码管 汇编proteus仿真

硬件设计

链接:https://pan.baidu.com/s/1H2T16ocY72IZYBCI–MtJg
提取码:w0bf
在这里插入图片描述

代码设计

        VALUEH	EQU	20H			;暂存TH1的值
        VALUEL	EQU	21H			;暂存TL1的值
        DATE0	EQU	22H         ;暂存计数值的BCD码
        DATE1	EQU	23H
        DATE2	EQU	24H
        DATE3	EQU	25H
        DATE4	EQU	26H
		DATE5   EQU 27H
        COUNT	EQU 30H
;-----------------------------------------------------------------------------
		ORG    0000H
		SJMP   MAIN
		ORG    000BH
		LJMP   INT_T0	
		ORG	   001BH
		LJMP   INT_T1

MAIN:	MOV	DPTR,#TABLE

		MOV	20H,#00H	 	;存储空间初始化
		MOV	21H,#00H
		MOV	22H,#00H
		MOV	23H,#00H
		MOV	24H,#00H
		MOV	25H,#00H
		MOV	26H,#00H
		MOV	30H,#00H
		MOV  R1,#00H		 ;R1作为计数器溢出的次数


		MOV  TMOD,#15H	     ;定时器1工作在定时方式
					      	 ;定时器0工作在计数方式
		MOV	 TH1,#3CH
		MOV	 TL1,#0B8H
		MOV	 TH0,#00H
		MOV	 TL0,#00H
		MOV	 IE,#8AH		 ;开启定时器0和1

	   	SETB   TR0           ;启动定时
		SETB   TR1           ;启动计数
W1:
        LCALL   DISP		 ;显示计数值
        LJMP    W1
;------------------------------------------------------------------------
INT_T0:						 ;中断0作为计数器溢出
       						 ;溢出R1加1
	    MOV   TH0,#00H
		MOV   TL0,#00H
     	INC   R1
		CLR   TF0
		RETI			  

INT_T1: MOV   TH1,#3CH
		MOV   TL1,#0B8H
		INC   COUNT
		MOV   A,COUNT
	    CJNE  A,#20,RETUNE	    ;是否计满1秒
        MOV   COUNT,#00H
		CLR   TR0               ;关闭定时器
		CLR   TR1               ;关闭计数器
		MOV   VALUEL,TL0	    ;存放计数值
		MOV   VALUEH,TH0
         	
LCALL	HTOD
                	        	;将十六进制数转换为十进制数
RETUNE:
         RETI
;-------------------------------------------------------------------------------------
;这段程序将VALUEH/VALUEL中的16进制数转成10进制并且把5位数依次存入DATE0至DATE4
;-------------------------------------------------------------------------------------
HTOD:
      MOV	R2,VALUEH			;把计数器的值送到R2,R3
	  MOV	R3,VALUEL			;送到R2,R3后把R2,R3里面压缩的十六位的二进制数转换成十进制数
	  CLR	A					;然后存放到R4,R5,R6中
	  MOV	R4,A
	  MOV	R5,A
	  MOV	R6,A
	  MOV	R7,#18H
LOOP1:
      CLR	C
	  MOV	A,R3
	  RLC	A
	  MOV	R3,A
	  MOV	A,R2
	  RLC	A
	  MOV	R2,A
      MOV	A,R1
	  RLC	A
	  MOV	R1,A  
                
	  MOV	A,R6
      ADDC	A,R6
	  DA	A
	  MOV	R6,A
                
	  MOV	A,R5
      ADDC	A,R5
	  DA	A
	  MOV	R5,A
                
	  MOV	A,R4
      ADDC	A,R4
	  DA	A
	  MOV	R4,A
      DJNZ	R7,LOOP1

CZ:   MOV	R0,#DATE5		;把R4,R5,R6中的数放到DATE0~DATE5中
	  MOV	A,R6
	  ANL	A,#0FH
	  MOV	@R0,A
	 
	  DEC	R0
	  MOV	A,R6
	 SWAP	A
	  ANL	A,#0FH
	  MOV	@R0,A
	  
	  DEC	R0
	  MOV	A,R5
	  ANL	A,#0FH
	  MOV	@R0,A
	 
	  DEC	R0
	  MOV	A,R5
	  SWAP	A
	  ANL	A,#0FH
	  MOV	@R0,A			    
	  
	  DEC	R0
	  MOV	A,R4
	  ANL	A,#0FH
	  MOV	@R0,A

	  DEC	R0
	  MOV	A,R4
	  SWAP	A
	  ANL	A,#0FH
	  MOV	@R0,A
	  RET 

;-----------------显示子程序----------------------------------------------
DISP:      	   	          
	 MOV	A,DATE5		   ;把DATE5~DATE0送到数码管显示
	 MOVC	A,@A+DPTR
     MOV    P2,#0FFH
     CLR    P2.2
     MOV    P1,A
     LCALL  DL1MS
	 SETB   P2.2

	 MOV    A,DATE4
	 MOVC	A,@A+DPTR
     MOV    P2,#0FFH
	 CLR    P2.3
     MOV    P1,A
     LCALL  DL1MS
     MOV    P2,#0FFH

	 MOV    A,DATE3
	 MOVC	A,@A+DPTR
     MOV    P2,#0FFH
	 CLR    P2.4
     MOV    P1,A
     LCALL  DL1MS
     MOV    P2,#0FFH
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值