por vohr56 » 23 Out 2008 20:51
Modifiquei algumas coisas e olha o resultado:
/********************************************************************************************************************
V2.02: >> 03/04/06
Simplismente modificado o modo de apresentação da versão na inicialização
********************************************************************************************************************/
#include <mega8.h>
#include <delay.h>
//#include <gray.h>
//#include <string.h>
//#include <stdio.h>
//#include <math.h>
#define cs PORTB.7
#define dc PORTB.6
#define reset PORTD.5
#define scl PORTD.0
#define sda PORTD.1
#define apaga_scl PORTC.3=0
#define seta_scl PORTC.4=1
#define seta_sda PORTC.5=0
#define apaga_sda PORTC.6=1
flash char iniciar[4]={0x21,0x90,0x20,0xE};
//flash char iniciar[5]={0x21,0xC5,0x13,0x20,0x09};//Constante de inicialização
//Constante da imagem
flash char grafico1[84]={0x00,0x00,0x00,0xFC,0x18,0x60,0x80,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x38,0x44,0x44,0x44,0x84,0x84,0x18,0x00,0x00,0xFC,0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x08,0x04,0x44,0x44,0x44,0xB8,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
flash char grafico2[84]={0x00,0x00,0x00,0x8F,0x80,0x80,0x83,0x0C,0x03,0x00,0x80,0x8F,0x80,0x80,0x06,0x08,0x08,0x88,0x88,0x88,0x87,0x80,0x00,0x0F,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x0F,0x02,0x00,0x04,0x08,0x08,0x08,0x08,0x07,0x00,0x07,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
flash char grafico3[84]={0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x40,0x40
};
flash char grafico4[84]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00
};
flash char grafico5[84]={0x00,0x00,0x80,0x40,0x30,0x0C,0x02,0x01,0xFF,0x80,0x40,0x30,0x0C,0x02,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0xC0,0x30,0x0C,0x03,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x00,0xE0,0x18,0x07,0x0F,0xF0,0xC0,0x30,0x0C,0x03,0xFF,0xC0,0x30,0x0C,0x03,0x0F,0xF0,0xC0,0x30,0x0C,0x03,0x00,0xFF,0x00,0xC0,0x30,0x0C,0x03,0x00,0xFF,0x00,0x00,0x00
};
flash char grafico6[84]={ 0xFF,0x80,0x70,0x80,0xFF, 0x7E, 0x11, 0x11, 0x11, 0x7E,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00
};
//Constante de caracteres
flash char FontLookup[91,5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 } // z
};
/*******************************************************************************************************************/
//Funções em geral
void Reiniciar(void);
void nokia_write(unsigned char dado);
void nokia_write_comando(void);
void nokia_write_data(void);
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x30;
// Place your code here
}
/*******************************************************************************************************************/
/********************************************************************************************************************
**************************************** Função principal ***********************************************************
********************************************************************************************************************/
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=Out
// State0=T State1=T State2=T State3=T State4=T State5=T State6=0
PORTC=0x00;
DDRC=0x40;
// Port D initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
TCCR0=0x04;
TCNT0=0x30;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x05;//1
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
reset=1;
// delay_ms(1);
reset=0;
nokia_write_comando();
while(1)
{
nokia_write_data();
delay_ms(500);
}
}
/********************************************************************************************************************
**************************************** Fim da função principal ****************************************************
********************************************************************************************************************/
/*******************************************************************************************************************/
void Reiniciar(void)
{
#asm("RJMP __RESET"); // Reset !!!
}
/*******************************************************************************************************************/
/*******************************************************************************************************************/
void nokia_write(unsigned char dado)
{
// envia um byte pelo barramento
int conta=8;
scl=0; // coloca SCL em 0
while (conta)
{
//envia primeiro o MSB
if ( shift_left(&dado,1,0))
seta_sda;
else
apaga_sda;
// dá um pulso em scl
seta_scl;
conta--;
apaga_scl;
}
// seta_sda;
}
/*******************************************************************************************************************/
/*******************************************************************************************************************/
void nokia_write_comando(void)
{
unsigned int conta=0;
while(conta<4)
{
dc=0;
cs=0;
nokia_write(iniciar[conta]);
cs=1;
conta++;
}
}
/*******************************************************************************************************************/
/*******************************************************************************************************************/
void nokia_write_data(void)
{
unsigned int conta;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico1[conta]);
cs=1;
conta++;
}
conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico2[conta]);
cs=1;
conta++;
}
conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico3[conta]);
cs=1;
conta++;
}
conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico4[conta]);
cs=1;
conta++;
}
conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico5[conta]);
cs=1;
conta++;
}
conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico6[conta]);
cs=1;
conta++;
}
}
/*******************************************************************************************************************/
O codevision continua dando erro em:
//envia primeiro o MSB
if ( shift_left(&dado,1,0))
seta_sda;
else
apaga_sda;
Ele não intendeu o shift_left e não reconheceu a condição do if.
Também não consegui declarar isto:
unsigned int8 conta=0;
e
unsigned int16 conta=0;
deixei como unsigned int somente.