Hola a todos, Gracias de Antemano, por leer mi inquietud!
Tengo 3 dias en Internet bajando cuanto codigo ejemplo para que trabaje mi LCD Nokia 3310 en C18
De hecho la primera vez lo hice trabajar con las libreria de NOCTURNO, Gracias a las libreria de este señor me trabajo en CCS.
Como deseo trabajar con USB y los PIC18f4550 y/o 18f2550 por la herramienta del USB, en los foros encuentro que es mucho mejor trabajar con el compilador c18.
En fin hay muchas razones tecnica y personales que llevas a estar con este compilador, pero no encuentro libreria que me funcione con dicho LCD NOKIA 3310
Este el codigo lo eh modificado muy poco para ponder a trabar el LCD Nokia 3310.
SI alguien tiene el codigo o puede hacer funcionar el que anexo, excelente!!
Le agradecería a que me ayude
Si tiene la libreria en C18 para el nokia 3310 lo agregue y asi resolver el problema a mucho que investigan este caso.
/*****************************************************
Plug n Play Library for Nokia 3310 LCD
Author: Ajay Bhargav
Edited by Ronald Arthur to run on pic
microcontrollers and within the
mikroC environment
Email : contact@rickeyworld.info
WWW :
www.8051projects.net File : LCD.C
Info : easy to use library function
*****************************************************/
#include"p18f4550.h"
#include"confbits.h"
#include"delays.h"
void spisend(unsigned char);
void wrdata(unsigned char);
void wrcmd(unsigned char);
void pixelxy(unsigned char, unsigned char);
void cursorxy(unsigned char, unsigned char);
void clearram(void);
void initlcd(void);
void putchar(unsigned char);
void putstr (unsigned char*);
/* Modify it to fit your schematic */
#define SCK PORTBbits.RB7
#define DAT PORTBbits.RB6
#define DC PORTBbits.RB5
#define CE PORTBbits.RB4
#define RES PORTBbits.RB3
/*
#define nok_sclk PIN_B7
#define nok_sda PIN_B6
#define nok_dc PIN_B5
#define nok_cs PIN_B4
#define nok_res PIN_B3
*/
/* Lookup Table for Nokia LCD */
//unsigned char const FontLookup [][5] =
unsigned char const FontLookup [20] =
{
0x3E, 0x51, 0x49, 0x45, 0x3E , // 0
0x00, 0x42, 0x7F, 0x40, 0x00 , // 1
0x42, 0x61, 0x51, 0x49, 0x46 , // 2
0x21, 0x41, 0x45, 0x4B, 0x31 , // 3
};
/* Send single byte on SPI Bus (software) */
/* Input Arguments: x -> Byte to send */
void spisend(unsigned char x)
{
unsigned char i;
for(i=8;i>0;i--){
SCK = 0;
if((x&0x80)){
DAT = 1;
} else {
DAT = 0;
}
SCK = 1;
// x <<= 1;
x=x<<1;
}
}
/* Write Data Byte to Nokia LCD */
/* Input Arguments: x-> Data Byte to be sent */
void wrdata(unsigned char x)
{
DC = 1;
CE = 0;
spisend(x);
CE = 1;
}
/* Write Command Byte to Nokia LCD */
/* Input Arguments: x -> Command Byte to be sent */
void wrcmd(unsigned char x)
{
DC = 0;
CE = 0;
spisend(x);
CE = 1;
}
/* Brings ram pointer to X,Y pixel position */
/* Input Arguments: x-> X cordinate range from 0 to 83 */
/* Input Arguments: y-> Y cordinate range from 0 to 5 */
void pixelxy(unsigned char x, unsigned char y)
{
wrcmd(0x40|(y&0x07)); // Y axis
wrcmd(0x80|(x&0x7f)); // X axis
}
/* Clears the screen */
void clearram(void)
{
int ddram;
pixelxy(0,0); // Cursor Home.
for (ddram=504;ddram>0;ddram--) {wrdata(0x00);} // 6*84 = 504 DDRAM addresses.
}
/* Nokia3310 LCD Initialization */
void initlcd(void)
{
//DC = 1; //quitar
RES = 1; // Set _RES HIGH.
CE = 1; // Disable Chip.
RES = 0; // Reset the LCD.
Delay1KTCYx(592);
//delay_ms(240); // Wait 100ms.
RES = 1; // Awake LCD from RESET state.
wrcmd(0x21); // Activate Chip and H=1.
wrcmd(0xC2); // Set LCD Voltage to about 7V.
wrcmd(0x13); // Adjust voltage bias.
wrcmd(0x20); // Horizontal addressing and H=0.
wrcmd(0x09); // Activate all segments.
clearram(); // Erase all pixel on the DDRAM.
wrcmd(0x08); // Blank the Display.
wrcmd(0x0); // Display Normal.
pixelxy(0,0); // Cursor Home.
}
/* Bring cursor to Line and character specified */
/* Input Arguments: row -> Line number range from 1 to 6 */
/* Input Arguments: Column -> character position range from 1 to 14 */
/* You can have maximum of 6 lines of text on LCD and each line
containing 14 characters. Address is auto increment */
void cursorxy(unsigned char row, unsigned char col)
{
if((row>6) || (row<1) || (col<1) || (col>14))
return;
pixelxy(((col-1)*6),(row-1));
}
/* Writes single character on LCD */
/* Input Arguments: ch -> Character to be displayed */
void putchar(unsigned char ch)
{
unsigned char i, temp;
if ( (ch < 0x20) || (ch > 0x7b) ){
ch = 92;
}
for(i=0;i<5;i++){
temp = FontLookup
;
temp = 0x05; // quitar ernesto
wrdata(temp);
}
wrdata(0x00);
}
/* Writes character string on LCD */
/* Input Arguments: str -> Pointer to string to be displayed */
void putstr (unsigned char *str)
{
while(*str)
putchar(*str++);
}
/*
Main code by Ronald Arthur
Accra - Ghana
(c) 2010
*/
void main()
{
// cmcon = 0x07; //convert all comparators to digital pins
TRISA = 0xff; //set porta as input
TRISB = 0x00; //set portb as output
initlcd();
cursorxy(0,0);
putstr("FUSE 1 IS OK");
/*while(1)
{
while(porta.f0==1)
{
cursorxy(1,1);
putstr("FUSE 1 IS OK");
}
clearram();
while(porta.f0==0)
{
cursorxy(1,1);
putstr("FUSE 1 ALERT");
clearram();
delay_ms(1000);
cursorxy(1,1);
putstr("FUSE 1 ALERT");
delay_ms(1000);
}
clearram();
}*/
while(1){
}
}