7-SEGMENT 카운트하기

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

SELECT EQU 0FC48H ; 포트 선택 어드레스

FNDH EQU 0FC4CH ; 7-세그먼트 상위 어드레스

FNDL EQU 0FC4DH ; 7-세그먼트 하위 어드레스

; 8051 리셋 번지

ORG 0000H

SJMP START

; 메인 프로그램

ORG 0030H

START: MOV SP,#60H ; 스택 지정

MOV PSW,#00H ; 뱅크 0 사용

; 포트 1 초기 설정

MOV P1,#0FFH

; I/O 실험(INT ) 7-세그먼트 소수점 선택

MOV A,#10111101B

MOV DPTR,#SELECT

MOVX @DPTR,A

MOV R7,#0 ; 초값 초기치로 설정

MOV R6,#0 ; 카운터값 초기치로 설정

; 7 세그먼트로 디스플레이

DISPLAY:MOV A,R7 ; 상위 값 디스플레이

MOV DPTR,#FNDH

MOVX @DPTR,A

; 하위 값 디스플레이

MOV A,R6

MOV DPTR,#FNDL

MOVX @DPTR,A

COUNT:

MOV A,R6 ; 현재 값을 A 레지스터로 전송

ADD A,#1 ; 1/100초 마다 증가

DA A ; 10진 조정

MOV R6,A ; 업 데이트된 값을 저장

CALL DELAY

CJNE A,#00H,NEXT ; R699가 되면

MOV A,R7 ; R7A레지스터로 전송

ADD A,#1 ; 초 증가

DA A ; 10진 증가

MOV R7,A ; 업 데이트된 값을 저장

CALL DELAY

CJNE A,#60H,NEXT ;

; 60초가 되면 초 클리어

MOV R7,#0

<!--[if !supportEmptyParas]--> <!--[endif]-->

; 1/100, 초의 현재 값 7-세그먼트로 디스플레이

NEXT: CALL DISPLAY

JMP COUNT

<!--[if !supportEmptyParas]--> <!--[endif]-->

DELAY: MOV R0,#2 ; R0 레지스터에 2을 저장

DELAY1: MOV R1,#0 ; R1 레지스터에 0(256)을 저장

DELAY2: MOV R2,#0 ; R2 레지스터에 0(256)을 저장

DELAY3: NOP

DJNZ R2,DELAY3 ; R2=R2-1을 해서 R2가 제로가 아니면 DELAY3으로 점프

DJNZ R1,DELAY2 ; R1=R1-1을 해서 R1가 제로가 아니면 DELAY2로 점프

DJNZ R0,DELAY1 ; R0=R0-1을 해서 R0가 제로가 아니면 DELAY1로 점프

RET

END

 

 

형들 나 8051 학교에서 처음 배우는 좆뉴비인데 내일 시험이라서..

질문이 뭐냐면 7-segment로 카운트 하기라고 교수가 이걸 배포했는데

시바 뭔말인지 하나도 모르겟다..

led 점등하는 건 혼자 인터넷 검색하면 서 봤는데

 

이건 왜케 명령어가 많은거임?

 

질문을 하자면

1. 이걸 써서 숫자가 표시되는거임?

2. 1~0까지 표시되는건 어느줄인지 알켜달라능 ㅠㅠ

3. 그리고 이걸써서 99까지 표현 되게 할수 있냐능 ㅠㅠ

4. 숫자 표시되는 디스플레이가 4개인데

    짝수는 왼쪾에서 22,44,66, 이렇게 표시되고

    홀수는 오른쪾에서 11,33,55 이렇게 순차적으로 표시할려면 어떻게 해야되는지좀 가르쳐주세요

굽신굽신

<!-- //con_substance -->                    <!-- con_banner -->