G
Gigica
Guest
Ciao, ho un problema con la simulazione di Proteus c LCD con codice compilato con CodeVision.Qui c è schematico e codice.Codice:/************************************************* ****
Questo programma è stato prodotto dalla
CodeWizardAVR V1.25.3 Professional
Programma Generatore automatico
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech srl
http://www.hpinfotech.comTipo di chip: AT90S2313
Frequenza di clock: 8.000000 MHz
Memoria modello: Tiny
SRAM dimensioni esterne: 0
I dati dello stack size: 32
************************************************** *** /# include <90s2313.h>
# include <delay.h>void clearDisplay ()
(
PORTB = 0x08;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
PORTB = 0x18;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_ms (5);
)void entryModeSet (char inc_dec, char shift_normal)
(PORTB = 0x08;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
PORTB = 0x48 | (inc_dec <<5) | (shift_normal <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void displayOnOff (char display_on, char cursor_on, char blink_on)
(PORTB = 0x08;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
PORTB = 0x88 | (display_on <<6) | (cursor_on <<5) | (blink_on <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void cursorOrDisplayShift (char displayShift_cursorShift, char right_left)
(PORTB = 0x18;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x08 | (displayShift_cursorShift <<7) | (right_left <<6);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void functionSet (char data_length, char one_two_rows, char dimension_char)
(PORTB = 0x28 | (data_length <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x08 | (one_two_rows <<7) | (dimension_char <<6);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)
void setDDRAMaddress (char indirizzo)
(PORTB = (0x88 | indirizzo) &0xfd;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x08 | (indirizzo <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void writeData (char dati)
(PORTB = 0x0A | dati;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x0A | (dati <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)initLCD ()
(delay_ms (15);
PORTB = 0x38;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_ms (5);
PORTB = 0x38;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_us (160);
PORTB = 0x38;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_us (160);
PORTB = 0x28;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_us (160);
/ / functionSet (0,1,0);
functionSet (0,1,0);
delay_ms (1);
displayOnOff (0,0,0);
delay_us (160);
displayOnOff (1,1,0);
delay_us (160);
entryModeSet (1,0);
delay_us (160)
void printMessage (flash char * messaggio)
(while (* messaggio) writeData (* messaggio );}
/ / Variabili globali Dichiarare il tuo qui
void main (void)
(
/ / Port B inizializzazione
/ / Func0 = FUNC1 Out Out Func2 = = = Func3 Out Out Func4 Out Func5 = = = Func6 Out Out Out Func7 =
/ / State0 = 0 State1 = 0 State2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0
DDRB = 0xff;
PORTB = 0xff;/ / Port D inizializzazione
/ / Func0 In FUNC1 = = = In Func2 In Func3 In Func4 = = In Func5 In Func6 = = = In Func7 In
/ / State0 = State1 T = T State2 = State3 T = T State4 = State5 T = T State6 = T = T State7
DDRR = 0x00;
PORTD = 0x00;/ / Timer / Counter 0 inizializzazione
/ / Orologio fonte: orologio di sistema
/ / Orologio valore: 7,813 kHz
TCCR0 = 0x00;
TCNT0 = 0x00;/ / Timer / Counter 1 inizializzazione
/ / Orologio fonte: orologio di sistema
/ / Orologio valore: 1 Timer Arrestato
/ / Modo: Normale superiore = FFFFh
/ / OC1A uscita: sospesa.
/ / OC1B uscita: sospesa.
/ / Rumore Canceler: Off
/ / Input Capture su Falling Edge
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;/ / Interrupt esterne (s) di inizializzazione
/ / INT0: Off
/ / INT1: Off
GIMSK = 0x00;
MCUCR = 0x00;/ / Timer (s) / Counter (s) Interrupt (s) di inizializzazione
TIMSK = 0x00;/ / Analog Comparator inizializzazione
/ / Analog Comparator: Off
/ / Analog Comparator input Acquisizione da Timer / Counter 1: Off
/ / Analog Comparator Output: Off
ACSR = 0x80;
/ / Global consentire interrupt
initLCD ();while (1)
(
clearDisplay ();
printMessage ( "prima fila");
delay_ms (1500);
setDDRAMaddress (0x40);
printMessage ( "seconda fila");
delay_ms (1500);
)
)
Questo programma è stato prodotto dalla
CodeWizardAVR V1.25.3 Professional
Programma Generatore automatico
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech srl
http://www.hpinfotech.comTipo di chip: AT90S2313
Frequenza di clock: 8.000000 MHz
Memoria modello: Tiny
SRAM dimensioni esterne: 0
I dati dello stack size: 32
************************************************** *** /# include <90s2313.h>
# include <delay.h>void clearDisplay ()
(
PORTB = 0x08;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
PORTB = 0x18;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_ms (5);
)void entryModeSet (char inc_dec, char shift_normal)
(PORTB = 0x08;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
PORTB = 0x48 | (inc_dec <<5) | (shift_normal <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void displayOnOff (char display_on, char cursor_on, char blink_on)
(PORTB = 0x08;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
PORTB = 0x88 | (display_on <<6) | (cursor_on <<5) | (blink_on <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void cursorOrDisplayShift (char displayShift_cursorShift, char right_left)
(PORTB = 0x18;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x08 | (displayShift_cursorShift <<7) | (right_left <<6);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void functionSet (char data_length, char one_two_rows, char dimension_char)
(PORTB = 0x28 | (data_length <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x08 | (one_two_rows <<7) | (dimension_char <<6);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)
void setDDRAMaddress (char indirizzo)
(PORTB = (0x88 | indirizzo) &0xfd;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x08 | (indirizzo <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)void writeData (char dati)
(PORTB = 0x0A | dati;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
PORTB = 0x0A | (dati <<4);
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = PORTB &0xf7;
delay_us (40);
)initLCD ()
(delay_ms (15);
PORTB = 0x38;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_ms (5);
PORTB = 0x38;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_us (160);
PORTB = 0x38;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_us (160);
PORTB = 0x28;
# asm ( "cli")
delay_us (1);
# asm ( "sei")
PORTB = 0;
delay_us (160);
/ / functionSet (0,1,0);
functionSet (0,1,0);
delay_ms (1);
displayOnOff (0,0,0);
delay_us (160);
displayOnOff (1,1,0);
delay_us (160);
entryModeSet (1,0);
delay_us (160)
(while (* messaggio) writeData (* messaggio );}
/ / Variabili globali Dichiarare il tuo qui
void main (void)
(
/ / Port B inizializzazione
/ / Func0 = FUNC1 Out Out Func2 = = = Func3 Out Out Func4 Out Func5 = = = Func6 Out Out Out Func7 =
/ / State0 = 0 State1 = 0 State2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0
DDRB = 0xff;
PORTB = 0xff;/ / Port D inizializzazione
/ / Func0 In FUNC1 = = = In Func2 In Func3 In Func4 = = In Func5 In Func6 = = = In Func7 In
/ / State0 = State1 T = T State2 = State3 T = T State4 = State5 T = T State6 = T = T State7
DDRR = 0x00;
PORTD = 0x00;/ / Timer / Counter 0 inizializzazione
/ / Orologio fonte: orologio di sistema
/ / Orologio valore: 7,813 kHz
TCCR0 = 0x00;
TCNT0 = 0x00;/ / Timer / Counter 1 inizializzazione
/ / Orologio fonte: orologio di sistema
/ / Orologio valore: 1 Timer Arrestato
/ / Modo: Normale superiore = FFFFh
/ / OC1A uscita: sospesa.
/ / OC1B uscita: sospesa.
/ / Rumore Canceler: Off
/ / Input Capture su Falling Edge
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;/ / Interrupt esterne (s) di inizializzazione
/ / INT0: Off
/ / INT1: Off
GIMSK = 0x00;
MCUCR = 0x00;/ / Timer (s) / Counter (s) Interrupt (s) di inizializzazione
TIMSK = 0x00;/ / Analog Comparator inizializzazione
/ / Analog Comparator: Off
/ / Analog Comparator input Acquisizione da Timer / Counter 1: Off
/ / Analog Comparator Output: Off
ACSR = 0x80;
/ / Global consentire interrupt
initLCD ();while (1)
(
clearDisplay ();
printMessage ( "prima fila");
delay_ms (1500);
setDDRAMaddress (0x40);
printMessage ( "seconda fila");
delay_ms (1500);
)
)