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 ; R6가 99가 되면
MOV A,R7 ; R7을 A레지스터로 전송
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 이렇게 순차적으로 표시할려면 어떻게 해야되는지좀 가르쳐주세요
굽신굽신
댓글 0