JESCAB 
Produkter Tjänster Info Leveransvillkor Kontakt
 Snabb länkar:


DLR3416

 

 

 

Kod för att skriva till en "dot-matrix" LED display från Siemens modell DLR3416 skriven för PIC16F886. Kan utan större justeringar användas till de flesta nyare PIC16. För detaljer om displayen se datablad som kan hittas här : http://www.jescab.se/upload/DLO3416.pdf.

 

Lägg upp ett tomt projekt i MPLAB, skapa en ny, tom ASM fil och klistra in koden. Se även min sida om MPLAB.

 

Notera att det enda som används i kopplingen är PIC'en, en 100 nF kondensator, ett motstånd till MCLR samt displayen! PIC'en körs med intern oscillator så inga andra externa komponenter behövs. De färgade trådarna till vänster är inkopplingen av min Wisp628...

 DLR3416

 

;**********************************************************************
;   Enkelt test av DLR3416 5x7 "dot matrix" LED display.
;   För PIC16F886
;
;**********************************************************************
;                                                                     *
;    Filename:     DLR3416_16F886.asm
;    Date:          20070709
;    File Version:  1.0
;
;    Author:        Jan-Erik Söderholm
;    Company:       Jan-Erik Söderholm Consulting AB
;
;**********************************************************************
;
;    Files required:  P16F886.INC
;                     16F886.LKR
;
;**********************************************************************
;
;   Notes:
;   Använder intosc på 4 Mhz.
;
;   A0-A1 : RA0-RA1 (adress, 1-av-4)
;   WR    : RA3 (skrivpuls)
;   D0-D6 : RB0-RB6 (7 databitar, normalt ett ASCII tecken)
;
;**********************************************************************
;
;
 list      p=16f886             ; list directive to define processor
 #include <p16f886.inc>         ; processor specific variable definitions

 __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
 __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;
    errorlevel -302
;
;**********************************************************************
; Definition av pinnar och port för displayen.
;
    #define     DLR3416_A0      PORTA, 0
    #define     DLR3416_A1      PORTA, 1
    #define     DLR3416_WR      PORTA, 2
    #define     DLR3416_DATA    PORTB
;  
;
;**********************************************************************
; Här hamnar vi efter reset eller power-on av processorn.
;
RESET_VECTOR    CODE    0x000       ; processor reset vector
     goto    start               ; go to beginning of program
;
; Här hamnar vi vid ett avbrott/interrupt.
; Används inte i detta exempel men är med för att göra det komplett...
;
INT_VECTOR      CODE    0x004       ; interrupt vector location
        retfie                      ; Ingen interrupt kod...
;       
;**********************************************************************
;**********************************************************************
; Macro för att skicka ett tecken till DLR3416.
; "pos" = position 1-4 räknat från vänster.
; "char" är ASCII tecknet enligt teckentabell i databladdet.
;
dlr3416_out    macro   pos, char
        movlw   pos                 ; adressen (1-4)...
        movwf   dlr3416_pos
        movlw   char                ; tecknet...
        movwf   dlr3416_char
        call    dlr3416_write_char
        endm
;
;**********************************************************************
;**********************************************************************
; Huvudkoden.
; Här hamnar vi vid reset eller power-on (via RESET_VECTOR ovan)
;
;
MAIN    CODE
start
;
; Först normal uppstart ej specifik för LCD
;
        banksel ansel               ; Stäng av alla analoga funktioner
        clrf    ansel
        clrf    anselh
        banksel trisa               ; Alla pinnar utgångar...
        clrf    trisa
        clrf    trisb
        clrf    trisc
;       
        banksel intcon
        clrf    intcon
        banksel porta               ; se till att vi är på bank 0...
;
; Så då var grundinställningen av processorn klar...
;
; Ge displayen lite tid att starta upp efter power-on.
        call        delay_1s
;
; Se till att WR-pinnen är i "rätt" läge från början.
        bsf         dlr3416_wr
;
; Gör några anrop till macrot för att skriva ut lite text.
;
        dlr3416_out 1, a'H'
        dlr3416_out 2, a'E'
        dlr3416_out 3, a'J'
        dlr3416_out 4, a'!'
;
;
loop    goto loop                       ; Gör ingenting mer....
;
;               
;*********************************************************************
; Subrutin för DLR3416
;
; Två temp variabler som används av rutinen.
; Lägger dom i "shared memory" så slipper vi banksel...
;
DLR3416_VARS    UDATA_SHR       ; Starta ny data-section.
DLR3416_POS     RES 1           ; Position på displayen.
DLR3416_CHAR    RES 1           ; Tecken som ska skrivas.
;
; Slut på variabler, här kommer koden...
;
DLR3416_CODE        CODE        ; Starta ny code-section.
;
; Rutin för att skriva ett tecken på displayen.
; Anropas av "dlr3416_out" macrot.
;
DLR3416_write_char
;
; Lägg först ut tecknet på datapinnarna.
;
        movf        dlr3416_char, w
        movwf       dlr3416_data
;
; Det följande är för att sätta rätt adress
; på A0 och A1.
; Kan göras lite kompaktare men det blev tydligt
; så här...
;
        decfsz      dlr3416_pos, f      ; pos = 1 ?
        goto        not_pos_1           ; Nej...
        bsf         dlr3416_a0          ; Ja, sätt A0/A1.
        nop
        bsf         dlr3416_a1
        nop
        goto        toggle_wr
;
not_pos_1
        decfsz      dlr3416_pos, f      ; pos = 2 ?
        goto        not_pos_2           ; Nej...
        bcf         dlr3416_a0          ; Ja...
        nop
        bsf         dlr3416_a1
        nop
        goto        toggle_wr
;
not_pos_2
        decfsz      dlr3416_pos, f      ; o.s.v...
        goto        not_pos_3
        bsf         dlr3416_a0
        nop
        bcf         dlr3416_a1
        nop
        goto        toggle_wr
;
not_pos_3
        bcf         dlr3416_a0          ; pos måste vara = 4...
        nop
        bcf         dlr3416_a1
        nop
        goto        toggle_wr
;
toggle_wr
        bcf         dlr3416_wr          ; Skriv till displayen.
        nop
        bsf         dlr3416_wr
        nop
;
        return
;
;**********************************************************************
;**********************************************************************
; Diverse delay rutiner.
; Alla delay rutiner generade med kodgeneratorn här :
; http://www.piclist.com/techref/piclist/codegen/delay.htm
; OBS generatade för 4 Mhz processorhastighet.
;
DLY_VAR      UDATA_SHR
d1           RES 1
d2           RES 1
d3           RES 1
;
;
DLY_CODE        CODE
;
delay_1s
 movlw 0x08
 movwf d1
 movlw 0x2F
 movwf d2
 movlw 0x03
 movwf d3
Delay_1s_0
 decfsz d1, f
 goto $+2
 decfsz d2, f
 goto $+2
 decfsz d3, f
 goto Delay_1s_0
 goto $+1
 nop
    return
;
;**********************************************************************
;**********************************************************************
    end


Denna sida senast uppdaterad 26-Jan-2013