PIC 16f876A problem z LCD (nujno)

A

Am_Da_One

Guest
i napisal kodo za 16f876A in simulirano z simuliator PIC in simuilated lep,,, ampak na strojno opremo LCD dokazuje le prazni bloki brez izhodnih podatkov, in tukaj je koda:OPOZORILO: Preveril sem tudi strojna oprema z druge strani, in da je pravilno.; LCD besedilo Demo -8 bit mode; Nigel Goodwin 2002
SEZNAM p = 16F876A; povedal monter kaj čip, ki jih uporabljamovključujejo "P16F876A.inc"; so privzete za čipcount EQU 0x20count1 EQU 0x21COUNTA EQU 0x22countb EQU 0x23tmp1 EQU 0x24tmp2 EQU 0x25templcd EQU 0x26templcd2 EQU 0x27

org 0x00noporg 0x05

InitialiseBCF STATUS, RP0; izberite banko 0clrf countclrf PORTAclrf PORTBclrf PORTC

SetPorts BSF STATUS, RP0; izberite banke 1movlw 0x00; storijo vse zatiči outputsmovwf TRISBmovwf TRISAmovwf TRISCBCF STATUS, RP0; izberite banko 0
Delay5 klic, počakajte, da LCD za poravnavo

klic LCD_Init; setup LCD

začetek clrf count; iz registra števec na ničMessagemovf count, w; dal števec vrednost v WBesedilo razpisa; dobili znak od besedila, preglednicexorlw 0x00, je nič?btfsc STATUS, Zgoto NextMessageklic LCD_Charklic Delay5incf count, fgoto Message
NextMessage klic LCD_Line2, preselijo v 2. vrstica, prvi stolpec
clrf count; iz registra števec na ničMessage2movf count, w; dal števec vrednost v Wklic text2; dobili znak od besedila, preglednicexorlw 0x00, je nič?btfsc STATUS, Zgoto EndMessageklic LCD_Charklic Delay5incf count, fgoto Message2
EndMessage
klic LCD_Line1Stop goto začetek; Subroutines in besedilo tabel
; LCD rutino
; Initialise LCDLCD_Initmovlw 0x38; Set 4 bit modeklic LCD_Cmd
movlw 0x1F; Set zaslonu premikaklic LCD_Cmd
movlw 0x06; Nastavitev prikaza značaja modeklic LCD_Cmd
movlw 0x08; Nastavite prikaz za vklop / izklop in kazalka ukazklic LCD_Cmd
klic LCD_Clr; jasen zaslon
retlw 0x00
; Ukaz iz rednegaLCD_Cmdmovwf templcd; Swapf templcd, w; pošljite zgornji Košček; Andlw 0x0f, jasne zgornje 4 bits of W; Movwf PORTB; BCF PORTB, 4; RS postavka 0; Pozivajo Pulse_e, Pulse E Vroče visoke
movf templcd, w; pošljete spodnji Košček; Andlw 0x0f, jasne zgornje 4 bits of Wmovwf PORTBBCF PORTC, 0; RS postavka 0klic Pulse_e; Pulse E Vroče visokeklic Delay5retlw 0x00
LCD_CharD addlw 0x30LCD_Charmovwf templcd; Swapf templcd, w; pošljite zgornji Košček; Andlw 0x0f, jasne zgornje 4 bits of W; Movwf PORTB, BSF PORTB, 4; RS postavka 1; Pozivajo Pulse_e, Pulse E Vroče visoke
movf templcd, w; pošljete spodnji Košček; Andlw 0x0f, jasne zgornje 4 bits of Wmovwf PORTBBSF PORTC, 0; RS postavka 1klic Pulse_e; Pulse E Vroče visokeklic Delay5retlw 0x00
LCD_Line1 movlw 0x80; preselijo v 1. vrstico, prvi stolpecklic LCD_Cmdretlw 0x00
LCD_Line2 movlw 0xC0, preselijo v 2. vrstica, prvi stolpecklic LCD_Cmdretlw 0x00
LCD_Line1W addlw 0x80, preselijo v 1. vrstica, stolpec Wklic LCD_Cmdretlw 0x00
LCD_Line2W addlw 0xC0, preselijo v 2. vrstica, stolpec Wklic LCD_Cmdretlw 0x00
LCD_CurOn movlw 0x0d ;Set display on/off and cursor command
klic LCD_Cmdretlw 0x00
LCD_CurOff movlw 0x0c; Nastavite prikaz za vklop / izklop in kazalka ukazklic LCD_Cmdretlw 0x00
LCD_Clr movlw 0x01; Clear zaslonuklic LCD_Cmdretlw 0x00
LCD_HEX movwf tmp1; Swapf tmp1, w; Andlw 0x0f; Klic HEX_Table; Klic LCD_Charmovf tmp1, w; Andlw 0x0fklic HEX_Tableklic LCD_Charretlw 0x00
Delay255movlw 0xFF; zamude 255 mSgoto d0
Delay100movlw d'100 '; zamude 100msgoto d0
Delay50
movlw d'50 '; zamudo 50msgoto d0
Delay20movlw d'20 '; zamudo 20msgoto d0
Delay5movlw 0x01; zamudo 5,000 ms (4 MHz ura)d0 movwf count1d1 movlw 0xC7; zamude 1msmovwf COUNTAmovlw 0x01movwf countbDelay_0decfsz COUNTA, fgoto $ 2decfsz countb, fgoto Delay_0
decfsz count1, fgoto d1retlw 0x00
Pulse_eBSF PORTC, 1nopBCF PORTC, 1retlw 0x00
; end of rutino LCD
HEX_Table ADDWF PCL, fRETLW 0x30RETLW 0x31RETLW 0x32RETLW 0x33RETLW 0x34RETLW 0x35RETLW 0x36RETLW 0x37RETLW 0x38RETLW 0x39RETLW 0x41RETLW 0x42RETLW 0x43RETLW 0x44RETLW 0x45RETLW 0x46

Besedilo addwf PCL, fretlw "H"retlw "e"retlw "l"retlw "l"retlw 'o'retlw 0x00
Text2 ADDWF PCL, fR RETLW 'E RETLW 'RETLW ""RETLW 'd'Y RETLW 'RETLW '. "RETLW '. "RETLW '. "RETLW 0x00

konec

 
Mislim, da LCD ni initialized pravilno_Oglejte si mojo kodo, da deluje.Čeprav nisem prikazuje vse postopke, boste dobili idejo.

Code:L2_START EQU H'40 ", naslov začetku linije 2 LCD

INIT_CMD EQU B'00110000 '; LCD inicializacijo ukaz, pošljete le zgornji Košček

F_SET_I4_CMD EQU B'00101000 '; LCD funkcijo ukaz set, vmesnik 4 bitov, 2 vrstice

CLR_CMD EQU H'01 '; jasen celoten LCD zaslon ukaz

HOME_CMD EQU H'02 '; LCD cursor vrnitvi domov ukaz

DISP_OFF_CMD EQU B'00001000 "LCD zaslon off ukaz

DISP_ON_CMD EQU B'00001100 "LCD zaslon naprej, ne prikaže kurzor, ne utripa

MODE_CMD EQU B'00000110 '; LCD vstop Način ukaz set

CRLF_CMD EQU H'C0 "LCD ukaz, da določi naslov za začetek proge 2

LINE_LENGTH EQU D'24 '; dolžino zaslona LCD linije s črkami

;================================================= ===================================

; Ta oddelek initializes LCD po power-upLCD_INIT: movlw D'160 '; LCD 15ms potrebe po moči Pred init.
Naj bo 16ms

klic Long_dly;

movlw INIT_CMD; output ukaz init

movwf PORTC;

BSF _LCD_E; impulz Omogoči

BCF _LCD_E;

movlw D'50 '; počakati še 5ms; LCD zahteva 4.1ms

klic Long_dly;

BSF _LCD_E; pošljite init.
ukaz

BCF _LCD_E;

movlw D'2 '; počakati še 200us; LCD potrebe 100us

klic Long_dly;

BSF _LCD_E; pošljite init.
ukaz znova

BCF _LCD_E;

DELAY_100us; čakati 100us med ukaze, LCD potrebe 40us

movlw F_SET_I4_CMD; določen tip vmesnik za 4-bitni

andlw 0xF0; masko iz zadnjih 4 bits

movwf PORTC; izhodne podatke

BSF _LCD_E; impulz Omogoči

BCF _LCD_E;

DELAY_100us, od tega trenutka dalje lahko uporabljamo SEND_CMD, SEND_DATA

; rutino

movlw F_SET_I4_CMD, opredelite 4 bit vmesnik, 2 vrstice, 5x7 dot znake

klic SEND_CMD;

DELAY_100us;

movlw DISP_OFF_CMD, izklop zaslona, kazalec off, no blink

klic SEND_CMD;

DELAY_100us;

movlw CLR_CMD, jasen zaslon, nastavite DD RAM naslov 0

klic SEND_CMD;

movlw D'20 '; treba počakati vsaj 1.64ms, bomo počakati 2ms

klic Long_dly;

movlw MODE_CMD, je način za samodejno prirastek, no zaslonu premika

klic SEND_CMD;

DELAY_100us, po tem zamudo zaslonu initialized

movlw DISP_ON_CMD;

SEND_CMD klic, vključite zaslonu

DELAY_100us;

 
Nisem videla da Porta digitalni ...Imate v onesposobiti primerjave na porta.Preveri listu.

 

Welcome to EDABoard.com

Sponsor

Back
Top