// Вывод на LCD Nokia 3310.
// Используется PIC16F628A
//-------------------------------------------------------------------------
#include "pic.h"
#include "delay.h"
//#include "delay.c"
__CONFIG(0x3f09);
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#define nok_sclk RB4 // nokia lcd sclk
#define nok_sda RB3 // nokia lcd sda
#define nok_dc RB2 // nokia lcd d/c
#define nok_cs RB1 // nokia lcd cs
#define nok_res RB0 // nokia lcd res
//--------------------------------------------------------------------------
signed char c;
unsigned char bytefornokia;
//---------------------------------------------------------------------------
void init(void);
void nokia_write_command(void);
void nokia_write_dorc(void);
void nokia_write_data(void);
void nokia_gotoxy(unsigned char xnokia, unsigned char ynokia);
//--------------------------------------------------------------------------
void main(void)
{
init();
bytefornokia=0xFF;
nokia_write_data();
bytefornokia=0xFF;
nokia_write_data();
bytefornokia=0xFF;
nokia_write_data();
bytefornokia=0xFF;
nokia_write_data();
bytefornokia=0xFF;
nokia_write_data();
//nokia_clean_ddram();
for(;;);
}
//---------------------------------------------------------------------------------------
void init(void)
{
CMCON = 0x07;
TRISB = 0x00;
PORTB = 0x00;
nok_res=1;
nok_dc=1;
nok_cs=1;
nok_res=0;
DelayMs(100);
nok_res=1;
bytefornokia=0x21;
nokia_write_command();
bytefornokia=0x13;
nokia_write_command();
bytefornokia=0xC8;
nokia_write_command();
bytefornokia=0x20;
nokia_write_command();
bytefornokia=0x0C;
nokia_write_command();
nokia_gotoxy(0,0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void nokia_write_command(void)
{
nok_dc=0; // передача команды в регистр
nok_cs=0; // включение контроллера
nokia_write_dorc();
nok_cs=1; // отключение контроллера
}
/////////////////////////////////////////////////////////////////////////////////
void nokia_write_data(void)
{
nok_dc=1; // передача данных в диплей
nok_cs=0; // chip enabled
nokia_write_dorc();
nok_cs=1; // chip disabled
}
//////////////////////////////////////////////////////////////////////////////////
void nokia_write_dorc(void) // serial write data or command subroutine
{
for (c=8;c›0;c--) {
nok_sclk=0;
if ((bytefornokia&0x80)==0){
nok_sda=0;
}
else {
nok_sda=1;
}
nok_sclk=1;
bytefornokia=bytefornokia‹‹1;
}
}
//////////////////////////////////////////////////////////////////////////////////
void nokia_gotoxy (unsigned char xnokia, unsigned char ynokia) // Nokia LCD Position cursor
{
bytefornokia=(0x40|(ynokia&0x07)); // Y axe initialisation: 0100 0yyy
nokia_write_command();
bytefornokia=(0x80|(xnokia&0x7f)); // X axe initialisation: 1xxx xxxx
nokia_write_command();
} |