컨트롤러"AT89C2051,

E

electronicus

Guest
호 전, 11도 22이 "은 ASM에서"파일에서 모듈 번호를 변경할 수 있습니까?
**************************
;************************************************* *********
; * LEDFONT.ASM V2.1 *
; * * 글꼴을 이동하는 LED가
; * 여러 MAX7219, 모듈로 구성되어있습니다 * 계단식 수있습니다
; * 8x8 LED가; 문자 글꼴 5x8 *
; 8051 * 용 어셈블러 프로그램 호환 컨트롤러, *
; * 예
: AT89C51, 석영 주파수 11,0592 MHz 이상 *
; * 다음과 같은 프로그램을 11 개까지 모듈을 제어합니다.*
;************************************************* *********
; * 세계의 전자 제품 *
; * http://www.woe.de.vu *
; * 비애 (를) topmail.de *
; * (C) 화가있을 진저 1999 *
;************************************************* *********

DIN equ p1.0; DIN 포트 1.0에서
CLCK equ p1.1; CLK 포트 1.1에서
equ를 LOAD p1.2; 포트 1.2 될때

SCL equ p3.5; SCL 가능한 I2C을위한 버스
sda를 equ p3.7; SDA는 가능한 I2C을위한 버스

jumper_ser equ p1.6; 점퍼 시리얼 다운로드
jumper_eep equ p3.2; 점퍼 EEPROM은을위한 모드
jumper_baud equ p3.3; 점퍼 시리얼 전송 속도에 대한

ser_wait equ p3.4; 시리얼 악수
equ p1.7했다; 시리얼 다운로드에 대한 LED가

모듈 equ 11; 8x8 LED 모듈 (최대 11)의 수를; 플래그 비트 영역, adr (합니다. 20h 내부의 RAM)
i2c_ack_in equ 0
i2c_ack_out equ 1
z_abfrage equ 2
eep_mode equ 3

z_anz_h equ 21h; 문자의 수를
z_anz_l equ 22h; (16 비트 값)
zeichen_h equ 23h; 문자 카운터
zeichen_l equ 24; (16 비트 값)
sp_off_l equ 25h; 문자 글꼴에 대한 오프셋
sp_off_h equ 26h; (16 비트 값)초 :)
setb i2c_ack_out
setb i2c_ack_in
전화 clear_disp
전화 ledout_ini; 초기화

JB에요 jumper_ser, Lauf
jmp ser_load

Lauf :
JB에요 jumper_eep, rom_mode
setb eep_mode
전화 read_z_anz; EEPROM이 밖으로 문자를 읽을 수가
jmp anz_ende
rom_mode :
CLR을 eep_mode
전화 read_anz_rom; ROM의 밖으로 문자의 수를 읽기
anz_ende :

mov R0, # 40
CLR을
clr_loop :
mov R0,; 확실히 기억 세포를 40 @ ... 127 (내부 메모리)
inc R0
cjne R0, # 128, clr_looplauf_loop :
전화 ledout_ini

mov zeichen_h, # 0; 문자 카운터 높음
mov zeichen_l, # 0; 문자가 낮다 카운터
CLR을 z_abfrage
mov r5, # 0; r5 : 열 카운터
jnb eep_mode, rom_dat
전화 read_eeprom
jmp read_end
rom_dat :
전화 read_rom
read_end :

스파 :
jnb acc.7, z_ascii
전화 convert_char
jmp z_ok
z_ascii :
CLR은 C
, # 32 subb
JNC z_ok
CLR을
z_ok :
mov 둘째, # 5
mul AB를
mov sp_off_l,; 칼럼에 대한 오프셋
mov sp_off_h, b; (16 비트 값)

wdh :
mov r1, # 127
mov R0, # 126
shift_ram :
mov, @ R0
mov r1, @
12월 r1
12월 R0
cjne r1, # 40, shift_ram

cjne r5, # 5, sp_calc
mov 40, # 0; LED가 - 오른쪽에 열
mov r5, # 0
setb z_abfrage
inc zeichen_l
mov, # 0
,, x1 zeichen_l cjne
inc zeichen_h
x1 :

jnb eep_mode, rom_dat2
전화 read_eeprom
jmp read_end2
rom_dat2 :
전화 read_rom
read_end2 :

spal :
jnb acc.7, z_ascii2
전화 convert_char
jmp z_ok2
z_ascii2 :
CLR은 C
, # 32 subb
JNC z_ok2
mov, # 0
z_ok2 :
mov 둘째, # 5
mul AB를
mov sp_off_l,
mov sp_off_h, b

jmp 940

sp_calc :
mov dptr, # spalten
mov, sp_off_l
, dpl 추가
JNC y1
inc dph
y1 :
mov dpl,
mov, sp_off_h
, dph 추가
mov dph,

mov, r5
movc, @ dptr
mov 40, 오른쪽에, LED는 열
inc r5
940 :

매트릭스 :
mov R2는, # 8; 8 열
mov R6, # 47; LED가 왼쪽 8x8의 열 모듈 오른쪽
led_10 :
mov 둘째, # ((모듈 - 1) * 8)
dispout :
mov, R6
A와 B에 추가
mov r1,
mov, @ r1
mov R3,
전화 ledout
mov A와 B
CLR은 C
, # 8 subb
mov B는
JNC dispout

setb를 LOAD; MAX7219 저장소의 모든 데이터를
CLR 프로를 LOAD
12월 R6
djnz R2에, led_10; 모듈의 모든 8 열

전화 Zeit; 지연

jnb z_abfrage, wdh_jump
CLR을 z_abfrage
mov, z_anz_l
wdh_jump, zeichen_l cjne
mov, z_anz_h
, zeichen_h, wdh_jump cjne

jmp lauf_loop

wdh_jump :
jmp wdh
ser_load :
jnb에 대한 b1200; 샘플 점퍼 jumper_baud 전송 속도

b9600 :
mov th1, # 0fdh; 9600 Baud
mov tl1, # 0fdh
jmp 산이

b1200 :
mov th1, # 0e8h; 1200 Baud
mov tl1, # 0e8h

산이 :
mov, # 20h tmod
mov scon, # 50H
setb tr1
mov, sbuf
CLR을 리

CLR을 주도; LED가 켜져 다운로드
mov z_anz_h, # 0
mov z_anz_l, # 0
mov R7, # 2; EEPROM은 데이터의 주소 2 시에 시작한다
mov R6, # 0a0h

CLR을 ser_wait
wait_data :
JB에요 p3.0, no_startbit
setb ser_wait
no_startbit :
JB에요 리, ri_ok
jmp wait_data

ser_wdh :
CLR을 ser_wait
mov R4의, # 3
w3 :
mov R3, # 0
미납 :
mov R2는, # 0
w1 :
JB에요 p3.0, no_start
setb ser_wait
no_start :
JB에요 리, ri_ok
djnz R2는, w1
djnz R3, 미납 사실이 있군요
djnz R4의, w3
jmp ser_end

ri_ok :
mov, sbuf
CLR을 리
setb ser_wait
setb했다; LED 꺼짐
mov B는
전화 i2c_start
mov, R6; 가능한 I2C 주소를 EEPROM이
전화 i2c_send
mov, R7; EEPROM이 주소를
전화 i2c_send
mov A와 B; EEPROM이에 대한 데이터를
전화 i2c_send
전화 i2c_stop
전화 wait_eeprom
inc R7
cjne R7, # 0, 에스원
inc R6
inc R6
에스원 :
inc z_anz_l
mov, z_anz_l
, # 0, S2는 cjne
inc z_anz_h
S2는 :
mov r5, z_anz_h
cjne r5, # 7h, ser_wdh
, # 0FEh, ser_wdh cjneser_end :
전화 i2c_start
mov, # 0a0h
전화 i2c_send
mov, # 0
전화 i2c_send
mov, z_anz_h
전화 i2c_send
전화 i2c_stop
전화 wait_eeprom

전화 i2c_start
mov, # 0a0h
전화 i2c_send
mov, # 1
전화 i2c_send
mov, z_anz_l
전화 i2c_send
전화 i2c_stop
전화 wait_eeprom
setb ser_wait

깜박임 :
cpl LED가
mov R7, # 2
bl1 :
mov R6, # 0
bl2 :
mov r5, # 0
bl3 :
djnz r5, bl3
djnz R6, bl2
djnz R7, bl1
jmp 깜박임read_eeprom :;의 EEPROM을 실제 문자 읽기
6 밀어
7 밀어
mov R6, zeichen_h
mov R7, zeichen_l
mov, R7
, # 2에 추가
JNC no_inc
inc R6
no_inc :
mov R7,
mov, R6

, # 0a0h orl
mov R6,
전화 i2c_start
전화 i2c_send
mov, R7
전화 i2c_send
전화 i2c_start
mov, R6
inc
전화 i2c_send
setb i2c_ack_out; 없다는 ACK
전화 i2c_read
전화 i2c_stop
팝업 7
팝업 6
retread_rom :; ROM의 실제 캐릭터를 읽고
mov dptr, # zeichen
mov, dpl
, zeichen_l 추가
JNC no_inc_dph
inc dph
no_inc_dph :
mov dpl,
mov, dph
, zeichen_h 추가
mov dph,
CLR을
movc, @ dptr
retread_z_anz :;의 EEPROM을 문자의 수를 읽기
전화 i2c_start
mov, # 0a0h
전화 i2c_send
mov, # 0
전화 i2c_send
전화 i2c_start
mov, # 0a1h
전화 i2c_send
CLR을 i2c_ack_out
전화 i2c_read
mov z_anz_h,
setb i2c_ack_out; 없다는 ACK
전화 i2c_read
mov z_anz_l,
전화 i2c_stop
retread_anz_rom :; ROM의 밖으로 문자의 수를 읽기
mov dptr, # z_anz_rom
CLR을
movc, @ dptr
mov z_anz_h,
mov, # 1
movc, @ dptr
mov z_anz_l,
retconvert_char :
, # 132, co1 cjne
mov, # 96;
ret
co1 :
, # 148, 이산화탄소 cjne
mov, # 97;
ret
이산화탄소 :
, # 129, co3 cjne
mov, # 98;
ret
co3 :
, # 142, co4 cjne
mov, # 99;
ret
co4 :
, # 153, co5 cjne
mov, # 100;
ret
co5 :
, # 154, co6 cjne
mov, # 101;
ret
co6 :
, # 225, co7 cjne
mov, # 102; 본인
ret
co7 :
CLR을, 그렇지 않으면 빈 문자
ret;************************************************* *******
; 초기화 : (R1, R2에, R3, 아큐)를 사용하여

ledout_ini :
CLR은 DIN
CLR을 CLCK
CLR 프로를 LOAD

; 자리 0-7에서 디코딩 모드 = 일반 :
mov R2는, # 09h; 디코딩 모드 레지스터의 주소
mov R3, # 오, 안돼 디코딩
mov r1, # 모듈
디코딩 :
전화 ledout
djnz r1, 해독; 모든 모듈
setb를 LOAD
CLR 프로를 LOAD

; 최대 설정 강도 :
mov R2는, # 0Ah; 강도 등록의 주소
mov R3, # 0Fh; 최대.강도
mov r1, # 모듈
intens :
전화 ledout
djnz r1, intens; 모든 모듈
setb를 LOAD
CLR 프로를 LOAD

; 8 활성화된 디스플레이에 대한 한도를 설정하는 스캔 :
mov R2는, # 0Bh; 스캔 한도의 주소 등록
mov R3, # 07h; 8 자리
mov r1, # 모듈
scanlim :
전화 ledout
djnz r1, scanlim; 모든 모듈
setb를 LOAD
CLR 프로를 LOAD

; 디스플레이 테스트 모드 = 떨어져 :
mov R2는, # 0Fh; 디스플레이 테스트 레지스터의 주소
mov R3, # 오; 정상적인 작동
mov r1, # 모듈
distest :
전화 ledout
djnz r1, distest; 모든 모듈
setb를 LOAD
CLR 프로를 LOAD

; 표시 해제 종료 = 스위치 :
mov R2는, # 0Ch; 셧다운 레지스터의 주소
mov R3, # 01h; 정상적인 작동
mov r1, # 모듈
shutd :
전화 ledout
djnz r1, shutd; 모든 모듈
setb를 LOAD
CLR 프로를 LOAD

ret;*************************************************
; 취소 완료 화면

clear_disp :
1 밀어
2 밀어
3 밀어

CLR은 DIN
CLR을 CLCK
CLR 프로를 LOAD
mov R2는, # 8; 8 자리
led_ini_10 :
mov R3, # 0; 데이터 = 0
mov r1, # 모듈
modul :
전화 ledout
djnz r1, modul; 모든 모듈
setb를 LOAD
CLR 프로를 LOAD
djnz R2는, led_ini_10
팝업 3
팝업 2
팝업 1
ret;*************************************************
; 보낼 데이터를로드 MAX7219 충동 (없이!)
; 매개 변수 :
; MAX7219에 대한 알투 = 주소 바이트
; MAX7219에 대한 R3 = 데이터 바이트

ledout : acc 밀어
0 푸시
1 밀어
mov acc, R2는
mov r1, # 2; 2 배 8 비트

lo_5 : mov R0, # 8;도 8 비트
lo_10 : JB에요 acc.7, lo_20
CLR은 DIN; 0 보내
jmp lo_30
lo_20 : setb DIN, 1 보내려면
lo_30 : setb CLCK; 클럭 생성
CLR을 CLCK
얘; 다음 비트
djnz R0, lo_10; (8 회)
mov, R3; 아큐의 데이터 바이트
djnz r1, lo_5, 다시 한 번,하지만 지금은 데이터와 바이트

팝업 1
팝업 0
acc 팝업
ret

;************************************************* *******
; 지연

Zeit :
밀어 acc
밀어 b
mov 둘째, # 0eh; 레지스터의 값은 B 조를 시작할 수있습니다
Z1 : mov, # 0ffh; 느린 속도로 계속 증가
z2 : nop
nop
nop
nop
djnz acc, z2
djnz 둘째, Z1
팝업 b
acc 팝업
retwait_eeprom :
5 밀어
6 밀어
mov R6, # 50
w_eep1 :
mov r5, # 100
w_eep2 :
djnz r5, w_eep2
djnz R6, w_eep1
팝업 6
팝업 5
reti2c_start :; 가능한 I2C 시작 조건
setb sda를
nop
setb SCL
전화 i2c_wait

CLR은 sda를; 데이터 = 0 (시작)
nop
CLR은 SCL; 시계 = 0
reti2c_stop :; 가능한 I2C 중지 상태
setb SCL; 시계 = 1
nop
setb sda를; 데이터 = 1 (중지)
reti2c_send :; 가능한 I2C를 통해 1 데이터 (아큐) 바이트를 보내
3 밀어
mov R3, # 8
i2c_sloop :
RLC
sda를 mov는 C
nop
setb SCL
전화 i2c_wait
CLR은 SCL
djnz R3, i2c_sloop

nop
setb sda를
nop
setb SCL
전화 i2c_wait
mov c 팀, sda를;하라 읽기 비트
mov i2c_ack_in는 C
CLR은 SCL
nop
CLR을 sda를
팝업 3
reti2c_read :; 가능한 I2C (아큐)를 통해 1 데이터 바이트 수신
3 밀어
mov R3, # 8
CLR을
setb sda를
i2c_rloop :
전화 i2c_wait
setb SCL
nop
mov c 팀, sda를
RLC
nop
CLR은 SCL
djnz R3, i2c_rloop

mov c 팀, i2c_ack_out; 회답을 보내 비트
sda를 mov는 C
nop
setb SCL
전화 i2c_wait
CLR은 SCL
nop
CLR을 sda를
팝업 3
reti2c_wait :; 가능한 I2C에 대한 지연 (외침 RET - "4us 12MHz에서)
ret
;************************************************* ********
; charcter 글꼴 (5x8)

spalten :; 글꼴 아스키 - 문자 32 (12)부터
DB를 0,0,0,0,0; 빈 숯불
DB를 0,0,242,0,0;!
DB를 0,224,0,224,0; "
DB를 40,254,40,254,40; #
DB를 36,84,254,84,72; $
DB를 196,200,16,38,70; %
DB를 108,146,170,132,10; &
DB를 0,160,192,0,0; D 조
DB를 0,56,68,130,0; (
DB를 0,130,68,56,0;)
DB를 40,16,124,16,40; *
DB를 16,16,124,16,16;
DB를 0,5,6,0,0,,
DB를 16,16,16,16,16; -
DB를 0,6,6,0,0;.
DB를 4,8,16,32,64; /
DB를 124,138,146,162,124; 0
DB를 0,66,254,2,0; 1
DB를 66,134,138,146,98; 2
DB를 132,130,162,226,156; 3
DB를 24,40,72,254,8; 4
DB를 228,162,162,162,156; 5
DB를 60,82,146,146,12; 6
DB를 128,142,144,160,192; 7
DB를 108,146,146,146,108; 8
DB를 96,146,146,148,120; 9
DB를 0,54,54,0,0; :
DB를 0,53,54,0,0;;
DB를 16,40,68,130,0; "
DB를 40,40,40,40,40; =
DB를 0,130,68,40,16; "
DB를 64,128,138,144,96;?
DB를 76,146,158,130,124; @
DB를 126,144,144,144,126;
DB를 254,146,146,146,108; B 조
DB를 124,130,130,130,68; C
DB를 254,130,130,130,124; D 조
DB를 254,146,146,146,146; 이메일
DB를 254,144,144,144,144; F
DB를 124,130,146,146,92; G 조
DB를 254,16,16,16,254; H 조
DB를 0,130,254,130,0; 전
DB를 132,130,130,130,252; 일본
DB를 254,16,40,68,130; 케이
DB를 254,2,2,2,2; 패
DB를 254,64,32,64,254; 남
DB를 254,64,32,16,254; N
DB를 124,130,130,130,124; O를
DB를 254,144,144,144,96; P는
DB를 124,130,134,130,125; 질문
DB를 254,144,152,148,98; 연구
DB를 100,146,146,146,76; S
DB를 128,128,254,128,128; T는
DB를 252,2,2,2,252; U
DB를 248,4,2,4,248; 승
DB를 254,4,8,4,254; 승
DB를 198,40,16,40,198; 엑스
DB를 192,32,30,32,192; Y
DB를 134,138,146,162,194;부터 Z
DB를 0,254,130,130,0; [
DB를 64,32,16,8,4; \
DB를 0,130,130,254,0;]
DB를 32,64,128,64,32; ^
DB를 2,2,2,2,2; _
DB를 0,128,64,32,0;`
DB를 4,42,42,42,30;
DB를 254,18,34,34,28; b
DB를 28,34,34,34,34; C
DB를 28,34,34,18,254; d 개
DB를 28,42,42,42,24; 전자
DB를 16,126,144,128,64; f를
DB를 24,37,37,37,62; g
DB를 254,16,32,32,30; h
DB를 0,34,190,2,0; 전
DB를 4,2,34,188,0; j를
DB를 254,8,20,34,0; 케이
DB를 0,130,254,2,0; 난
DB를 62,32,24,32,30; 난
DB를 62,16,32,32,30; n
DB를 28,34,34,34,28; O를
DB를 63,36,36,36,24; P는
DB를 24,36,36,36,63; q를
DB를 62,16,32,32,16; r에
DB를 18,42,42,42,4;들
DB를 32,254,34,2,4; 마
DB를 60,2,2,4,62; U
DB를 56,4,2,4,56; 승
DB를 60,2,12,2,60; 승
DB를 34,20,8,20,34; x
DB를 48,10,10,10,60; y를
DB를 34,38,42,50,34; z는
DB를 0,16,108,130,0; (
DB를 0,0,254,0,0; |
DB를 0,130,108,16,0;)
DB를 16,32,16,8,16; ~
DB를 0,0,0,0,0; (아스키 127 dec.)

DB를 4,170,42,170,30; () 표준화되지
DB를 28,162,34,162,28;
DB를 28,66,2,66,28;
DB를 62,208,80,208,62;
DB를 60,194,66,194,60;
DB를 60,130,2,130,60;
DB를 127,144,146,146,108; 본인;************************************************* *******
; LED가 움직이는 텍스트 글꼴이 표시됩니다.
; 문자의 수를 2로 바이트 - 값을 정의해야합니다
; Highbyte / Lowbyte "z_anz_rom에서".

z_anz_rom :
DB를 오, 70h; 문자 ROM에 저장된 전화 번호
; Highbyte로 (16 비트 / Lowbyte)

zeichen :
DB를 '세계 전자 - Informationen Rund 음 Elektronik :'
DB를 'http://www.online.de/home/woe'
DB를 '이메일 : 비애 (를) topmail.de'
DB를 ''; 분리로 끝에 3 공백 문자
; 모두 112 개의 문자 = 070h



 
우선 여러분 모두 8051 256 바이트의 내부 SRAM에와 호환 사용해야합니다.AT89S52 좋은 choise 수있습니다.AT89C2051 변종을 잊어 버려요.
마찬가지로 8 개의 기둥과 11 모듈을 볼 수있습니다 / 당신은 88 바이트의 RAM (0x28 - 0x7F의)가 필요합니다 모듈

모듈 equ 22 일 변경 후 코드 관련의 모든 라인을 교체 시작 IRAM의 양쪽 R1 또는 R0을 통해 간접 주소.
먼저 하나처럼 :

코드 :mov R0, # 80

CLR을

clr_loop :

mov R0,; 확실히 기억 세포를 80 @ ... 255 (내부 메모리)

inc R0

cjne R0, # 256, clr_loop

 
안녕,내가 www.woe.de.vu에서 ATMEL AT89S51 내 타입이 LED는 메시지를 표시 세워졌지만.이 프로젝트 작업 괜찮 네요.
그래서 코드를 수정하려고하고 싶습니다.문자가 8 × 8 점되어야합니다.잘 안되면 새로운 캐릭터 (8 × 8) 디스플레이의 포인트를 썼습니다.
내가 softvare 재작성 모르겠어요.
나 좀 도와 줄래?

안부,
미안하지만, 당신이 첨부 파일을 보려면 로그인이 필요합니다

 

Welcome to EDABoard.com

Sponsor

Back
Top