- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 1 von 1

Thema: Testprogramm für 4-pin 4x27 Matrixdisplay WDC2704M

  1. #1
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077

    Testprogramm für 4-pin 4x27 Matrixdisplay WDC2704M

    Anzeige

    Praxistest und DIY Projekte
    Hallo!

    Hier ist geprüfte Hardware und Code zum Testen des WINTEK WDC2704M-1HNN LCD Displays vom Pollin. Ich habe es auf den PIC18F252 mit 40MHz PLL (10MHz Quartz) und PIC16F84A mit 20MHz Quartz getestet.

    Auf der Displayplatine ist der SMD Widerstand R12 (Kontrastregelung) schon vorgesehen und man braucht ihn nur anlöten.

    Der Code ist lauffähig auf den PICs 12FXXX, 16FXXX und 18FXXX. Es gibt nur zwei Unterschiede für die 12F & 16F und 18F PICs in den Unterprogrammen "Ser" und "Init".

    Ich schreibe normaleweise keine Kommentare, aber diesmal habe ich mich sehr bemüht.

    Man kann das Display mit:

    https://www.roboternetz.de/phpBB2/viewtopic.php?t=22749

    an nur 2 Pins anschliessen. Die Hardware ist aber leider bischen komplizierter.

    Falls irgendwas nicht ganz klar seien sollte, bitte fragen!

    MfG
    Code:
                 .-------------------------------.
                 |                               |
                 |   Matrixdisplay 4x27 Zeichen  |
                 |                               |
                 |   WINTEK WDC2704M-1HNN        |
                 |                               |
                 |                   1 1 1 1 1 1 |
             VCC | 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 |
              +  '-------------------------------'
              |    | | | | | | | | | | | | | | |
              +----|-+.-.| | | | | | | | | | | |
                   |  | || | | | | | | | | | | |
              +----+  | || | | | | | | | | | | |
              |    |1k5-'| | | | | | | | | | | +---+
             ===   |R12| | | | | | | | | | | +---+ |
             GND   +---+-|-+ | | | | | | | +---+ | |
       _E1 >-------------|---+ | | | | | +---+ | | |
       _E2 >-------------|-----/ | | | |GND  | | | |
       _DT >-------------+---+-+ | | | |===  | | | |
       _CK >-----------+     | | | | | | |   | | | |
                       |   .---------------. | | | |
        vom            |   | 1 2 3 4 5 6 7 | | | | |
        PIC            |   |               | | | | |
                       |   |) IC  74HC164  | | | | |
                       |   | 1 1 1 1 1     | | | | |
                       |VCC| 4 3 2 1 0 9 8 | | | | |
                       | + '-----------o---' | | | |
                       | |   | | | | | | |   | | | |
                       | +---+-|-|-|-|-+ |   | | | |
                       +-------|-|-|-|---+   | | | |
                               | | | +-------+ | | |
                               | | +-----------+ | |
                               | +---------------+ |
                               +-------------------+
    ;	Testprogramm für 4x27 Matrixdisplay WINTEK WDC2704M-1HNN mit 4-pin Anschluss 
    ;	LIST      P=18F252
    ;	include "P18F252.inc"
    ;		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
    ;		__CONFIG    _CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_ON_2L
    ;		__CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
    ;		__CONFIG    _CONFIG3H, _CCP2MX_ON_3H
    ;		__CONFIG    _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
    ;		__CONFIG    _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
    ;		__CONFIG    _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
    ;		__CONFIG    _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 
    ;		__CONFIG    _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
    ;		__CONFIG    _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
    ;		__CONFIG    _CONFIG7H, _EBTRB_OFF_7H
    	LIST      P=16F84A
    	include "P16F84a.inc"
    	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
    #define	_CK	PORTB,0		; Display clock
    #define	_DT	PORTB,1		; Display data
    #define	_E1	PORTB,2		; Enable der oberen Displayhälfte
    #define	_E2	PORTB,3		; Enable der unteren Displayhälfte
    #define	_C	STATUS,C
    #define	_Z	STATUS,Z
    #define	_Fdh	Flags,0			; Displayhälfte: 0-obere,1-untere
    #define	_Fao	Flags,1			; Display A0: 0-command, 1-data
    Flags	EQU	0x20
    Tmp	EQU	0x21
    Tmp1	EQU	0x22
    Tmp2	EQU	0x23
    Tmp3	EQU	0x24
    		ORG     0x0000
    		call	Init
    Main		bcf	_Fdh		; obere Displayhälfte
    		call	_1st		; erste Zeile
    		movlw	"D"
    		call	Char
    		movlw	"I"
    		call	Char
    		movlw	"S"
    		call	Char
    		movlw	"P"
    		call	Char
    		movlw	"L"
    		call	Char
    		movlw	"A"
    		call	Char
    		movlw	"Y"
    		call	Char
    		movlw	" "
    		call	Char
    		movlw	"T"
    		call	Char
    		movlw	"E"
    		call	Char
    		movlw	"S"
    		call	Char
    		movlw	"T"
    		call	Char
    
    		movlw	0x20		; erstes ASCII Zeichen (20h= Leerzeichen) festlegen
    		movwf	Tmp3
    CharOut1	movf	Tmp3,0
    		call	Char		; das Zeichen an Display schicken
    		incf	Tmp3,1		; Zeichen erhöhen
    		movf	Tmp3,0		; prüfen ob schon 2Fh
    		sublw	0x2F
    		btfss	_Z
    		goto	CharOut1	; wenn nicht, noch mal		
    
    		call	_2nd		; zweite Zeile, u.s.w
    CharOut2	movf	Tmp3,0
    		call	Char
    		incf	Tmp3,1
    		movf	Tmp3,0
    		sublw	0x4A
    		btfss	_Z
    		goto	CharOut2
    
    		bsf	_Fdh		; untere Displayhälfte
    		call	_1st		; erste Zeile, u.s.w.
    CharOut3	movf	Tmp3,0
    		call	Char
    		incf	Tmp3,1
    		movf	Tmp3,0
    		sublw	0x65
    		btfss	_Z
    		goto	CharOut3
    
    		call	_2nd		; zweite Zeile, u.s.w.
    CharOut4	movf	Tmp3,0
    		call	Char
    		incf	Tmp3,1
    		movf	Tmp3,0
    		sublw	0x80
    		btfss	_Z
    		goto	CharOut4
    		goto	Main		; und noch mal vom Anfang (endlos)
    
    _1st		movlw	0x80		; Startadresse der oberen Zeile
    		goto	Cmd
    _2nd         	movlw 	0xC0		; Startadresse der unteren Zeile
    Cmd          	bcf	_Fao		; schickt ein Befehl zum Display
    		movwf 	Tmp2
    		goto	Send
    Char	 	movwf 	Tmp2		; schickt ein Zeichen zum Display
    		bsf	_Fao
    Send		movlw	8		; schickt seriell bitweise ein Byte in den Schieberegister
    		movwf 	Tmp
    Ser		bcf	_CK
    		bcf 	_DT
    		btfsc	Tmp2,7
    		bsf 	_DT
    		bsf 	_CK
    		rlf	Tmp2,1		; nur für PIC12FXXX und PIC16FXXX
    ;		rlcf	Tmp2,1		; nur für PIC18FXXX
    		decfsz	Tmp,1
    		goto	Ser
    		bcf	_DT
    		btfsc	_Fao
    		bsf	_DT
    		btfss	_Fdh		; Enable wählen
    		goto	DEn1
    		call	DDelay		; abwarten
    		bsf	_E2		; Enable der unteren Hälfte setzen
    		call	DDelay		; abwarten
    		bcf	_E2		; und löschen
    		return
    DEn1		call	DDelay		; abwarten
    		bsf	_E1		; Enable der oberen Hälfte setzen
    		call	DDelay		; abwarten
    		bcf	_E1		; und löschen
    		return
    DDelay		movlw	0x30		; Verzögerungschleife, kann bis ca. 8MHz Quartz weg gelassen werden	
    		movwf	Tmp1
    DDelayL		decfsz	Tmp1,1
    		goto	DDelayL
    		return
    Init		bsf	STATUS,RP0	; nur für PIC12FXXX und PIC16FXXX
    		clrf	TRISB		; RB0-7 als Ausgänge definieren
    		bcf	STATUS,RP0	; nur für PIC12FXXX und PIC16FXXX
    		clrf	PORTB
    		clrf	Flags
    		call	DInit		; Initialisierung der oberen Hälfte des Displays (_Fdh=0)
    		bsf	_Fdh		; Initialisierung der unteren Hälfte des Displays
    		call	DInit
    		return
    DInit		movlw   	0x38		; 8 bit, 2 lines, 5x7 dots
    		call	Cmd
    		movlw  	0x0C		; display on, cursor off, no blink
    		call	Cmd
    		movlw	6		; increment, no schift
    		call	Cmd
    		return
    		END
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 4x27.jpg  

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress