5x7 Matrix Led

Z

ZeleC

Guest
Hallo,
im prøver å jobbe med et to-sifret 5x7 matrise ledede. kan en gi koblinger eller hjelp til hvordan du arbeider med en pic16f87x serien i C-språk
takk en meget

 
; 5x7 LED Array test
; PORTB brukes til å velge rad (0 er på, 1 er av)
; PORTC <4:5> brukes til data, clk av
74.164 Shift
Reg.
listen p = 18F252
#
include <P18F252.INC>

;************************************************* ***********
; Konstantene

; Antall kolonner i displayet
; Å endre antall skjermer, endre NCHARS
NCHARS equ d'6 '
NSTRINGS equ d'27 '
Kolonner equ 5 * NCHARS
DWELL_TIME equ d'9 '

FontTable equ 0x01000
StringTable equ 0x00800

;************************************************* ***********
; Variabler

; Brukes som tellere for visning radene
cblock 0x000
CurrentRow; raden vises
CurrentString; indeks over gjeldende streng som vises
CurrentColumn; teller ned fra kolonner som tegn vises
CurrentCharIndex; indeksen karakter øyeblikket vises
CurrentCharData; tegnet data som skal vises
AdvanceWidth; forhånd bredde for char bli trukket
CurrentStrLen; lengden på dagens string
RowRingCounter; holder ringen counter for raden viser
DwellCounter; hvor mange iterasjoner før rulle
endc

; Brukes av skift register skrive rutine
cblock
ShiftReg; Temp var å holde skiftende byte i
ShiftBits; antall biter å skifte til skifte reg
ShiftCounter; Temp counter
endc

; Brukes til å holde rede på hva streng blir vist
cblock
StringCharIndex; indeks over gjeldende karakter i streng
StringSubCharIndex; indeksen i gjeldende karakter i biter
endc

; Brukes for forsinkelse looper
cblock
DelayCountL
DelayCountH
endc

; Brukt i GetCharData subroutine
cblock
GCDTemp
endc

;************************************************* ***********
; programkode starter her

org 00200h; begynnelsen av programmet EPROM
Start
clrf LATB; Clear PORTB output klinke
clrf TRISB; Foreta PORTB PINS all outputs
clrf LATC; init PORTC
movlw b'10001000 '
movwf TRISC; gjøre mest portc pins utganger
clrf CurrentString; starte med string 0

; Konfigurere strengen, røye, subchar forskyvninger her
clrf CurrentCharIndex
samtale GetStrChar; få lengden byte (begynnelsen av strengen)
movwf CurrentStrLen
movlw-NCHARS
movwf StringCharIndex
clrf StringSubCharIndex
setf LATB

ScrollLoop
movlw DWELL_TIME
movwf DwellCounter

; Det samme bildet blir vist for DWELL_TIME iterasjoner
DwellLoop
; Tilbakestille hvis programmering bryteren er satt ...
btfsc PORTC, 3
reset
Display7Rows
movlw b'10111111 '
movwf RowRingCounter; satt opp visning av høy bit rad første
clrf CurrentRow

DisplayRow
movlw kolonner
movwf CurrentColumn
movf StringSubCharIndex, w
addwf CurrentColumn, f
movff StringCharIndex, CurrentCharIndex
DisplayChar
; Lookup for nåværende char
movf CurrentCharIndex, w
samtale GetCharData

movlw 0x5
addwf AdvanceWidth, w
cpfsgt CurrentColumn
goto DisplayLastChar
movwf ShiftBits
movf CurrentCharData, w
samtale ShiftData

movlw 0x5
addwf AdvanceWidth, w
subwf CurrentColumn, f; se etter flere kolonner som skal vises
bz DisplayNextRow; gjort hvis ingen kolonner til venstre for å vise
incf CurrentCharIndex; annet gå til neste char
goto DisplayChar; og gjenta rutinen till gjort
DisplayLastChar
movff CurrentColumn, ShiftBits; Merk:
Ikke forhånd siste char!
movf CurrentCharData, w
samtale ShiftData
DisplayNextRow
; Pause for lenge nok for noen til å se data
movff RowRingCounter, LATB
samtale Forsinkelse
clrf LATB
comf LATB
rrncf RowRingCounter, f; flytte til neste rad
incf CurrentRow
movlw 0x7
cpfseq CurrentRow
goto DisplayRow
DisplayRowsDone
decfsz DwellCounter
goto DwellLoop

movff StringCharIndex, CurrentCharIndex
samtale GetCharData
incf StringSubCharIndex
movlw 0x5
addwf AdvanceWidth, w
cpfseq StringSubCharIndex
goto ScrollLoop

clrf StringSubCharIndex
incf StringCharIndex
movf CurrentStrLen, w
cpfseq StringCharIndex
goto ScrollLoop

incf CurrentString
movlw NSTRINGS
cpfslt CurrentString
clrf CurrentString
clrf CurrentCharIndex
samtale GetStrChar; få lengden byte (begynnelsen av strengen)
movwf CurrentStrLen
movlw-NCHARS
movwf StringCharIndex
goto ScrollLoop

; Forsinkelse Subroutine
Utsettelse
; Tilbake
clrf DelayCountL
Delay1
decfsz DelayCountL
goto Delay1
tilbake

; ShiftData subroutine
; Tar byte i w og flytter den inn i skift register
; Skift ShiftBits biter, starter med MSB

ShiftData
movwf ShiftReg
movff ShiftBits, ShiftCounter

; Test sist biter, legg den inn i produksjon bit
; Vi invertere utdataene her
ShiftData_Loop
btfsc ShiftReg, 4
bsf LATC, 4
btfss ShiftReg, 4
BCF LATC, 4

; Strobe SR klokke
bsf LATC, 5
BCF LATC, 5

; Fortsetter inntil alle 5 biter er forskjøvet
rlncf ShiftReg, f

decfsz ShiftCounter, f
goto ShiftData_Loop

tilbake

; GetStrChar rutine
; Returnere CurrentCharIndex'th tegn fra strengen på
; Indeksen CurrentString (i W)
GetStrChar
movf CurrentString, W; TBLPTRH: TBLPTRL får streng utlignet
mullw 0x40; (string starter ved PRODH: PRODL)
movff PRODH, TBLPTRH
movf PRODL, w
addwf CurrentCharIndex, 0; legge Aktuell karakter utlignet tilbake i w
movwf TBLPTRL
btfsc STATUS, C
incf TBLPTRH
movlw (StringTable>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kjølig" border="0" />

& 0xff; legge base oppveid av StringTable
addwf TBLPTRH; høy bestilling
movlw StringTable & 0xff
addwf TBLPTRL; så lav bestille byte
btfsc STATUS, C
incf TBLPTRH
tblrd *; TABLAT blir tegnet koden
movf TABLAT, W; avkastning tegnet i w
tilbake

; GetCharData subroutine
; Returnerer tegn data av røye på indeksen w på rad CurrentRow
; Verdien returneres i CurrentCharData
; ** Erstatte denne med noe smartere **
GetCharData
; Beregn oppveid av røye i tabell
movwf GCDTemp
movf CurrentStrLen, w
cpfslt GCDTemp
goto GetCharDataNull
movlw 0x00
cpfsgt GCDTemp
goto GetCharDataNull
samtale GetCharDataFromTable
movwf CurrentCharData
tilbake
GetCharDataNull
clrf CurrentCharData
clrf AdvanceWidth; ikke forskudd på null
tilbake
GetCharDataFromTable
samtale GetStrChar; komme neste tegn
mullw 0x08; TBLPTRH: TBLPTRL få rad data utlignet
movff PRODH, TBLPTRH; (8 byte / tegn)
movff PRODL, TBLPTRL
movf CurrentRow, W; legge i gjeldende rad
addwf TBLPTRL
btfsc STATUS, C
incf TBLPTRH
movlw (FontTable>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kjølig" border="0" />

& 0xff; deretter legger FontTable base addr
addwf TBLPTRH
movlw FontTable & 0xff
addwf TBLPTRL
btfsc STATUS, C
incf TBLPTRH
tblrd *
clrf AdvanceWidth; satt AdvanceWidth hvis dette char
btfsc TABLAT, 5; krever en kolonne ekstra plass
incf AdvanceWidth
movf TABLAT, w
tilbake

org StringTable
#
include "text.asm"

org FontTable
#
include "5x7.asm"

END; direktivet indikerer slutten av koden
Beklager, men du må logge inn for å vise dette vedlegget

 
Du kan laste ned rar filen: PICBASIC Proton Code, PIC16F84A Proteus Simulasjon DSN filer, og VB utviklet av Oliver (VB exe er ikke min).Kan noen kroppen utvikler VB kode med 7x5 10 lysdioder matrise bruker pic16f877

http://www.edaboard.com/viewtopic.php?p=392571 # 392571

 
Hallo,
kan du finne en hel Punktmatrise opplæringen med kode for bilde 16f84 på:http://blitzlogic.com/

for en modul: http://blitzlogic.com/Matrix.htm
for hele prosjektet søke i området.

ha det gøy.

A. Abdel Hamid

 
Se http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3291

 

Welcome to EDABoard.com

Sponsor

Back
Top