tahirmaqsood
 
 
  Joined: 13 Aug 2010 Posts: 1
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				| digital code lock with 3310 lcd | 
			 
			
				 Posted: Fri Aug 13, 2010 4:59 am     | 
				     | 
			 
			
				
  | 
			 
			
				hi
 
i whant attach 3310 lcd with this code 
 
/****************************************************************************
 
 
SAFE_COMBO_02.C
 
 
PIC 16F628 Combination Lock
 
   - resets to first expected digit two seconds after last key is pressed
 
   - uses PWM to reduce current to coil after initial pulse
 
 
                    ---------          ----------                                   
 
           +5 --14-|VCC    B0|-17-----|C1        |
 
                   |       B1|-18-----|C2        |
 
          Gnd ---5-|       B2|-1------|C3        |
 
    6MHz XTAL --16-|       B4|-2------|R1  KBD   |
 
         XTAL --15-|       B5|-6------|R2        |
 
                   |       B6|-7------|R3        |
 
                   |       B7|-8------|R4        |
 
                   | 16F628  |         ----------
 
                   |         |
 
                   |       B3|-6--- LOCK SOLENOID
 
                   |       A1|-18-- LED
 
                    ---------
 
 
         =========
 
        |  1 2 3  |  R0
 
        |  4 5 6  |  R1
 
        |  7 8 9  |  R2
 
        |  * 0 #  |  R3
 
         =========
 
          C0 C1 C2
 
 
Keyboard connector is (backside):    C2 C1 C0 R3 R2 R1 R0
 
 
Oscillator = 6MHz crystal
 
 
Jon Fick  03/09/07
 
 
***************************************************************************/
 
#include <16F628A.h>
 
#include 
 
 
// Set configuration bits in the PIC processor
 
#fuses HS, NOPROTECT, NOWDT, PUT, BROWNOUT, NOMCLR, NOLVP
 
 
#define     COMBO_1         '1'
 
#define     COMBO_2         '2'
 
#define     COMBO_3         '3'
 
#define     COMBO_4         '4'
 
#define     COMBO_5         '5'
 
#define     COMBO_6         '6'
 
#define     KBD_C1          PIN_B0
 
#define     KBD_C2          PIN_B1
 
#define     KBD_C3          PIN_B2
 
#define     KBD_R1          PIN_B4
 
#define     KBD_R2          PIN_B5
 
#define     KBD_R3          PIN_B6
 
#define     KBD_R4          PIN_B7
 
#define     LOCK_OUT        PIN_B3
 
#define     LED             PIN_A1
 
#define     NOKEY           0xFF
 
#define     RESET_KBD_COUNT 46          // at 23 counts/second
 
#define     LOCK_HIGH       255         // full PWM duty cycle
 
#define     LOCK_HIGH_TIME  30          // mS at full coil current
 
#define     LOCK_MED        20          // partial PWM duty cycle
 
#define     LOCK_MED_TIME   1450        // mS at partial coil current
 
#define     LOCK_OFF        0           // no PWM current
 
 
#use delay ( clock = 6000000 )      // sets appropriate compiler constants
 
#use standard_io ( A )
 
#use standard_io ( B )
 
 
char GetKey ( void );                           // prototypes
 
 
static char cKbdTimeoutFlag, cLedCount;
 
 
#int_rtcc
 
void TimerInterrupt ( void )          // 43mS tic, 23/second
 
    {
 
    if ( cKbdTimeoutFlag != 0 )
 
        {
 
        cKbdTimeoutFlag--;             // count down to zero
 
        }
 
    if ( cLedCount++ > 12 )
 
        {
 
        cLedCount = 0;
 
        }
 
    if ( cLedCount > 6 )
 
        {
 
        output_high ( LED );
 
        }
 
    else
 
        {
 
        output_low ( LED );
 
        }
 
    }
 
 
void main ( void )
 
    {
 
    delay_ms ( 100 );                           // power up delay
 
    output_low ( LOCK_OUT );                     // turn off lock solenoid */
 
    output_low ( LED );
 
    port_b_pullups ( TRUE );                    /* enable pullups */
 
    setup_counters ( RTCC_INTERNAL, RTCC_DIV_256 );
 
    cLedCount = 0;
 
    // PWM is for relay current control
 
    setup_ccp1 ( CCP_PWM );                     // set for PWM mode
 
    //The cycle time will be ( 1 / clock ) * 4  * t2div * ( period + 1 )
 
    // 1/6000000 * 4 * 1 * 64 = 42uS = 23KHz
 
    setup_timer_2 ( T2_DIV_BY_1, 64, 1 );      // set PWM period
 
    // duty cycle = value * ( 1 / clock ) * t2div
 
    // val * 1/6000000 * 1 = 1.2uS
 
    set_pwm1_duty ( LOCK_OFF );                  // set output off
 
    enable_interrupts ( INT_RTCC );             /* turn on timer interrupt */
 
    enable_interrupts ( GLOBAL );               /* enable interrupts */
 
 
    while ( TRUE )
 
        {
 
        while ( TRUE )
 
            {
 
            if ( GetKey() != COMBO_1 )
 
                {
 
                break;
 
                }
 
            if ( GetKey() != COMBO_2 )
 
                {
 
                break;
 
                }
 
            if ( GetKey() != COMBO_3 )
 
                {
 
                break;
 
                }
 
            if ( GetKey() != COMBO_4 )
 
                {
 
                break;
 
                }
 
            if ( GetKey() != COMBO_5 )
 
                {
 
                break;
 
                }
 
            if ( GetKey() != COMBO_6 )
 
                {
 
                break;
 
                }
 
            set_pwm1_duty ( LOCK_HIGH );                  // set output high current
 
                delay_ms ( LOCK_HIGH_TIME );
 
            set_pwm1_duty ( LOCK_MED );                  // set output medium current
 
                delay_ms ( LOCK_MED_TIME );
 
                set_pwm1_duty ( LOCK_OFF );                  // set output off
 
            }
 
        }
 
    }
 
 
char GetKey ( void )
 
    {
 
    char cKey;
 
 
    cKbdTimeoutFlag = RESET_KBD_COUNT;
 
    cKey = NOKEY;                               /* default is invalidated key */
 
    output_low ( KBD_R1 );                      /* make all four rows low */
 
    output_low ( KBD_R2 );
 
    output_low ( KBD_R3 );
 
    output_low ( KBD_R4 );
 
    delay_ms ( 5 );                             /* wait for row lines to settle */
 
    // wait until a button is pressed
 
    while ( ( input ( KBD_C1 ) == HIGH  ) && ( input ( KBD_C2 ) == HIGH ) && ( input ( KBD_C3 ) == HIGH ) )
 
        {
 
        if ( cKbdTimeoutFlag == 0 )        // if counted down to zero
 
            {
 
            return ( cKey );            // timed out, return NOKEY
 
            }
 
        }
 
    while ( TRUE )
 
        {
 
        output_low ( KBD_R1 );                  // try Row 1
 
        output_high ( KBD_R2 );
 
        output_high ( KBD_R3 );
 
        output_high ( KBD_R4 );
 
        delay_ms ( 1 );
 
        if ( input ( KBD_C1 ) == LOW )
 
            {
 
            cKey = '1';
 
            break;
 
            }
 
        if ( input ( KBD_C2 ) == LOW )
 
            {
 
            cKey = '2';
 
            break;
 
            }
 
        if ( input ( KBD_C3 ) == LOW )
 
            {
 
            cKey = '3';
 
            break;
 
            }
 
        output_high ( KBD_R1 );                  // try Row 2
 
        output_low ( KBD_R2 );
 
        output_high ( KBD_R3 );
 
        output_high ( KBD_R4 );
 
        delay_ms ( 1 );
 
        if ( input ( KBD_C1 ) == LOW )
 
            {
 
            cKey = '4';
 
            break;
 
            }
 
        if ( input ( KBD_C2 ) == LOW )
 
            {
 
            cKey = '5';
 
            break;
 
            }
 
        if ( input ( KBD_C3 ) == LOW )
 
            {
 
            cKey = '6';
 
            break;
 
            }
 
        output_high ( KBD_R1 );                  // try Row 3
 
        output_high ( KBD_R2 );
 
        output_low ( KBD_R3 );
 
        output_high ( KBD_R4 );
 
        delay_ms ( 1 );
 
        if ( input ( KBD_C1 ) == LOW )
 
            {
 
            cKey = '7';
 
            break;
 
            }
 
        if ( input ( KBD_C2 ) == LOW )
 
            {
 
            cKey = '8';
 
            break;
 
            }
 
        if ( input ( KBD_C3 ) == LOW )
 
            {
 
            cKey = '9';
 
            break;
 
            }
 
        output_high ( KBD_R1 );                  // try Row 4
 
        output_high ( KBD_R2 );
 
        output_high ( KBD_R3 );
 
        output_low ( KBD_R4 );
 
        delay_ms ( 1 );
 
        if ( input ( KBD_C1 ) == LOW )
 
            {
 
            cKey = '*';
 
            break;
 
            }
 
        if ( input ( KBD_C2 ) == LOW )
 
            {
 
            cKey = '0';
 
            break;
 
            }
 
        if ( input ( KBD_C3 ) == LOW )
 
            {
 
            cKey = '#';
 
            break;
 
            }
 
        break;    // break anyway to ensure no endless loop
 
        }
 
    delay_ms ( 5 );
 
    // wait until all buttons are up
 
    output_low ( KBD_R1 );                      /* make all four rows low */
 
    output_low ( KBD_R2 );
 
    output_low ( KBD_R3 );
 
    output_low ( KBD_R4 );
 
    while ( ( input ( KBD_C1 ) == LOW  ) || ( input ( KBD_C2 ) == LOW ) || ( input ( KBD_C3 ) == LOW ) );
 
    // make all four rows high
 
    output_high ( KBD_R1 );
 
    output_high ( KBD_R2 );
 
    output_high ( KBD_R3 );
 
    output_high ( KBD_R4 );
 
    return ( cKey );
 
    }
 
 
 
3310 lcd driver
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
/* 
 
 
Graphic LCD Nokia 3310 (LPH7779) routines v3 
 
CCS compiler 
 
 
 
by Michel Bavin 2004 --- bavin@skynet.be --- http://users.skynet.be/bk317494/ --- 
 
august 29, 2004 
 
 
*/ 
 
 
// ex: 
 
// 
 
// ... 
 
// nokia_init(); 
 
// ... 
 
// nokia_gotoxy(0,0); 
 
// printf(nokia_printchar,"test???"); 
 
// ... 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
#define nok_sclk  PIN_D4 
 
#define nok_sda   PIN_D3 
 
#define nok_dc    PIN_D2 
 
#define nok_cs    PIN_D1 
 
#define nok_res   PIN_D0 
 
 
char char_row,charsel,charpos,chardata;       // for nokia_3310 lcd 
 
int16 ddram; 
 
char plot_value; 
 
int32 plot_value32; 
 
int32 plot_umsb,plot_lmsb,plot_ulsb,plot_llsb; 
 
 
BYTE const TABLE5[240]=            {0x00,0x00,0x00,0x00,0x00,   // 20 space          ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes 
 
  0x00,0x00,0x5f,0x00,0x00,   // 21 ! 
 
  0x00,0x07,0x00,0x07,0x00,   // 22 " 
 
  0x14,0x7f,0x14,0x7f,0x14,   // 23 # 
 
  0x24,0x2a,0x7f,0x2a,0x12,   // 24 $ 
 
  0x23,0x13,0x08,0x64,0x62,   // 25 % 
 
  0x36,0x49,0x55,0x22,0x50,   // 26 & 
 
  0x00,0x05,0x03,0x00,0x00,   // 27 ' 
 
  0x00,0x1c,0x22,0x41,0x00,   // 28 ( 
 
  0x00,0x41,0x22,0x1c,0x00,   // 29 ) 
 
  0x14,0x08,0x3e,0x08,0x14,   // 2a * 
 
  0x08,0x08,0x3e,0x08,0x08,   // 2b + 
 
  0x00,0x50,0x30,0x00,0x00,   // 2c , 
 
  0x08,0x08,0x08,0x08,0x08,   // 2d - 
 
  0x00,0x60,0x60,0x00,0x00,   // 2e . 
 
  0x20,0x10,0x08,0x04,0x02,   // 2f / 
 
  0x3e,0x51,0x49,0x45,0x3e,   // 30 0 
 
  0x00,0x42,0x7f,0x40,0x00,   // 31 1 
 
  0x42,0x61,0x51,0x49,0x46,   // 32 2 
 
  0x21,0x41,0x45,0x4b,0x31,   // 33 3 
 
  0x18,0x14,0x12,0x7f,0x10,   // 34 4 
 
  0x27,0x45,0x45,0x45,0x39,   // 35 5 
 
  0x3c,0x4a,0x49,0x49,0x30,   // 36 6 
 
  0x01,0x71,0x09,0x05,0x03,   // 37 7 
 
  0x36,0x49,0x49,0x49,0x36,   // 38 8 
 
  0x06,0x49,0x49,0x29,0x1e,   // 39 9 
 
  0x00,0x36,0x36,0x00,0x00,   // 3a : 
 
  0x00,0x56,0x36,0x00,0x00,   // 3b ; 
 
  0x08,0x14,0x22,0x41,0x00,   // 3c < 
 
  0x14,0x14,0x14,0x14,0x14,   // 3d = 
 
  0x00,0x41,0x22,0x14,0x08,   // 3e > 
 
  0x02,0x01,0x51,0x09,0x06,   // 3f ? 
 
  0x32,0x49,0x79,0x41,0x3e,   // 40 @ 
 
  0x7e,0x11,0x11,0x11,0x7e,   // 41 A 
 
  0x7f,0x49,0x49,0x49,0x36,   // 42 B 
 
  0x3e,0x41,0x41,0x41,0x22,   // 43 C 
 
  0x7f,0x41,0x41,0x22,0x1c,   // 44 D 
 
  0x7f,0x49,0x49,0x49,0x41,   // 45 E 
 
  0x7f,0x09,0x09,0x09,0x01,   // 46 F 
 
  0x3e,0x41,0x49,0x49,0x7a,   // 47 G 
 
  0x7f,0x08,0x08,0x08,0x7f,   // 48 H 
 
  0x00,0x41,0x7f,0x41,0x00,   // 49 I 
 
  0x20,0x40,0x41,0x3f,0x01,   // 4a J 
 
  0x7f,0x08,0x14,0x22,0x41,   // 4b K 
 
  0x7f,0x40,0x40,0x40,0x40,   // 4c L 
 
  0x7f,0x02,0x0c,0x02,0x7f,   // 4d M 
 
  0x7f,0x04,0x08,0x10,0x7f,   // 4e N 
 
  0x3e,0x41,0x41,0x41,0x3e    // 4f O 
 
};    
 
 
 
BYTE const TABLE6[240]=            {0x7f,0x09,0x09,0x09,0x06,   // 50 P 
 
  0x3e,0x41,0x51,0x21,0x5e,   // 51 Q 
 
  0x7f,0x09,0x19,0x29,0x46,   // 52 R 
 
  0x46,0x49,0x49,0x49,0x31,   // 53 S 
 
  0x01,0x01,0x7f,0x01,0x01,   // 54 T 
 
  0x3f,0x40,0x40,0x40,0x3f,   // 55 U 
 
  0x1f,0x20,0x40,0x20,0x1f,   // 56 V 
 
  0x3f,0x40,0x38,0x40,0x3f,   // 57 W 
 
  0x63,0x14,0x08,0x14,0x63,   // 58 X 
 
  0x07,0x08,0x70,0x08,0x07,   // 59 Y 
 
  0x61,0x51,0x49,0x45,0x43,   // 5a Z 
 
  0x00,0x7f,0x41,0x41,0x00,   // 5b [ 
 
  0x02,0x04,0x08,0x10,0x20,   // 5c 
 
  0x00,0x41,0x41,0x7f,0x00,   // 5d 
 
  0x04,0x02,0x01,0x02,0x04,   // 5e 
 
  0x40,0x40,0x40,0x40,0x40,   // 5f 
 
  0x00,0x01,0x02,0x04,0x00,   // 60 
 
  0x20,0x54,0x54,0x54,0x78,   // 61 a 
 
  0x7f,0x48,0x44,0x44,0x38,   // 62 b 
 
  0x38,0x44,0x44,0x44,0x20,   // 63 c 
 
  0x38,0x44,0x44,0x48,0x7f,   // 64 d 
 
  0x38,0x54,0x54,0x54,0x18,   // 65 e 
 
  0x08,0x7e,0x09,0x01,0x02,   // 66 f 
 
  0x0c,0x52,0x52,0x52,0x3e,   // 67 g 
 
  0x7f,0x08,0x04,0x04,0x78,   // 68 h 
 
  0x00,0x44,0x7d,0x40,0x00,   // 69 i 
 
  0x20,0x40,0x44,0x3d,0x00,   // 6a j 
 
  0x7f,0x10,0x28,0x44,0x00,   // 6b k 
 
  0x00,0x41,0x7f,0x40,0x00,   // 6c l 
 
  0x7c,0x04,0x18,0x04,0x78,   // 6d m 
 
  0x7c,0x08,0x04,0x04,0x78,   // 6e n 
 
  0x38,0x44,0x44,0x44,0x38,   // 6f o 
 
  0x7c,0x14,0x14,0x14,0x08,   // 70 p 
 
  0x08,0x14,0x14,0x18,0x7c,   // 71 q 
 
  0x7c,0x08,0x04,0x04,0x08,   // 72 r 
 
  0x48,0x54,0x54,0x54,0x20,   // 73 s 
 
  0x04,0x3f,0x44,0x40,0x20,   // 74 t 
 
  0x3c,0x40,0x40,0x20,0x7c,   // 75 u 
 
  0x1c,0x20,0x40,0x20,0x1c,   // 76 v 
 
  0x3c,0x40,0x30,0x40,0x3c,   // 77 w 
 
  0x44,0x28,0x10,0x28,0x44,   // 78 x 
 
  0x0c,0x50,0x50,0x50,0x3c,   // 79 y 
 
  0x44,0x64,0x54,0x4c,0x44,   // 7a z 
 
  0x00,0x08,0x36,0x41,0x00,   // 7b 
 
  0x00,0x00,0x7f,0x00,0x00,   // 7c 
 
  0x00,0x41,0x36,0x08,0x00,   // 7d 
 
  0x10,0x08,0x08,0x10,0x08,   // 7e 
 
  0x78,0x46,0x41,0x46,0x78    // 7f 
 
};  
 
 
 
// 
 
 
void    nokia_init(void); 
 
void    nokia_write_command(char bytefornokia_command); 
 
void    nokia_write_data(char bytefornokia_data); 
 
void    nokia_write_dorc(char bytefornokia); 
 
void    nokia_gotoxy(int8 xnokia, int8 ynokia); 
 
void    nokia_erase_y(int8 ynokia); 
 
void    nokia_erase_x(int8 xnokia); 
 
void    nokia_printchar(int8 cvar); 
 
void    nokia_clean_ddram(void); 
 
void    table_to_nokialcd(void); 
 
void    nokia_plot(int8 xnokia,int8 plot_value8); 
 
void    nokia_write_data_inv(char bytefornokia_data_inv); 
 
void    nokia_clear_screen(void); 
 
void    nokia_clear_xy(int8 xnokia, int8 ynokia); 
 
void    nokia_print_uparrow(void); 
 
void    nokia_print_downarrow(void); 
 
void    nokia_print_leftarrow(void); 
 
void    nokia_print_rightarrow(void); 
 
void    nokia_print_degree(void); 
 
void    nokia_print_lowbatdegree(void); 
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_init(void) 
 
{ 
 
  output_high(nok_dc);            // bytes are stored in the display data ram, address counter, incremented automatically 
 
  output_high(nok_cs);            // chip disabled 
 
 
  output_low(nok_res);            // reset chip during 250ms 
 
  delay_ms(10);         // works with less..... 
 
  output_high(nok_res); 
 
 
  nokia_write_command(0x21);   // set extins extended instruction set 
 
  nokia_write_command(0xc2);   // Vop  v1: 0xc8 (for 3V)// v2: 0xa0 (for 3V) // v3: 0xc2 (2v6-5v)   ******************************************************************************************************************** 
 
  nokia_write_command(0x13);   // bias 
 
  nokia_write_command(0x20);   // horizontal mode from left to right, X axe are incremented automatically , 0x22 for vertical addressing ,back on normal instruction set too 
 
  nokia_write_command(0x09);   // all on 
 
 
  nokia_clean_ddram();      // reset DDRAM, otherwise the lcd is blurred with random pixels 
 
 
  nokia_write_command(0x08);   // mod control blank change (all off) 
 
 
  nokia_write_command(0x0c);   // mod control normal change 
 
 
} 
 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_clean_ddram(void) 
 
{ 
 
  nokia_gotoxy(0,0);         // 84*6=504      clear LCD 
 
  for (ddram=504;ddram>0;ddram--){nokia_write_data(0x00);} 
 
 
} 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
void nokia_write_command(char bytefornokia_command) 
 
{ 
 
 
  output_low(nok_dc);   // byte is a command it is read with the eight SCLK pulse 
 
  output_low(nok_cs);   // chip enabled 
 
  nokia_write_dorc(bytefornokia_command); 
 
  output_high(nok_cs);   // chip disabled 
 
 
} 
 
///////////////////////////////////////////////////////////////////////////////// 
 
void nokia_write_data(char bytefornokia_data) 
 
{ 
 
 
  output_high(nok_dc); 
 
  output_low(nok_cs);   // chip enabled 
 
  nokia_write_dorc(bytefornokia_data); 
 
  output_high(nok_cs);   // chip disabled 
 
 
} 
 
////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_write_dorc(char bytefornokia)         // serial write data or command subroutine 
 
{ 
 
  char caa; 
 
  for (caa=8;caa>0;caa--) { 
 
    output_low(nok_sclk); 
 
    // delay_us(2); 
 
    if ((bytefornokia&0x80)==0){output_low(nok_sda);} 
 
    else {output_high(nok_sda);} 
 
    output_high(nok_sclk); 
 
    bytefornokia=bytefornokia<<1; 
 
  } 
 
} 
 
////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_gotoxy(int8 xnokia, int8 ynokia)      // Nokia LCD 3310 Position cursor 
 
{ 
 
  nokia_write_command(0x40|(ynokia&0x07));   // Y axe initialisation: 0100 0yyy 
 
 
  nokia_write_command(0x80|(xnokia&0x7f));   // X axe initialisation: 1xxx xxxx 
 
} 
 
////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_erase_y(int8 ynokia) 
 
{ 
 
  nokia_gotoxy(0,ynokia); 
 
  printf(nokia_printchar,"              "); 
 
} 
 
////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_erase_x(int8 xnokia) 
 
{ 
 
  char column; 
 
 
  for (column=0;column!=6;column++){ 
 
    nokia_gotoxy(xnokia,column); 
 
    nokia_write_data(0x00); 
 
    nokia_write_data(0x00); 
 
    nokia_write_data(0x00); 
 
    nokia_write_data(0x00); 
 
    nokia_write_data(0x00); 
 
    nokia_write_data(0x00); 
 
 
  } 
 
} 
 
////////////////////////////////////////////////////////////////////////////////// 
 
 
void nokia_printchar(int8 cvar)               // Write 1 character to LCD 
 
{ 
 
  charsel=cvar; 
 
  table_to_nokialcd(); 
 
} 
 
////////////////////////////////////////////////////////////////////////////////// 
 
void table_to_nokialcd(void)   // extract ascii from tables & write to LCD 
 
{ 
 
  if (charsel<0x20)return; 
 
  if (charsel>0x7f)return; 
 
 
  for (char_row=0;char_row<5;char_row++) {      // 5 bytes 
 
 
    if (charsel<0x50){charpos=(((charsel&0xff)-0x20)*5);chardata=TABLE5[(charpos+char_row)];}            // use TABLE5 
 
    else if (charsel>0x4f){charpos=(((charsel&0xff)-0x50)*5);chardata=TABLE6[(charpos+char_row)];}            // use TABLE6 
 
 
 
    nokia_write_data(chardata);      // send data to nokia 
 
  } 
 
 
  nokia_write_data(0x00);      //    1 byte (always blank) 
 
 
} 
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
void nokia_plot(int8 xnokia,int8 plot_value8) 
 
{ 
 
  char i; 
 
 
  plot_value32=0; 
 
  // plot_value32|=1;         // unremark this if you want dotgraph instead of bargraph 
 
 
  for (i=0;i!=plot_value8;i++){ 
 
 
    plot_value32|=1;         // remark this if you want dotgraph instead of bargraph 
 
    plot_value32<<=1; 
 
  } 
 
 
  plot_value32|=2;            // bottom line is always filled 
 
 
  plot_llsb=(plot_value32&0xff); 
 
  plot_ulsb=((plot_value32>>8)&0xff); 
 
  plot_lmsb=((plot_value32>>16)&0xff); 
 
  plot_umsb=((plot_value32>>24)&0xff); 
 
 
  nokia_gotoxy(xnokia,1); 
 
  nokia_write_data_inv(plot_umsb); 
 
 
  nokia_gotoxy(xnokia,2); 
 
  nokia_write_data_inv(plot_lmsb); 
 
 
  nokia_gotoxy(xnokia,3); 
 
  nokia_write_data_inv(plot_ulsb); 
 
 
  nokia_gotoxy(xnokia,4); 
 
  nokia_write_data_inv(plot_llsb); 
 
 
} 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
 
void nokia_write_data_inv(char bytefornokia_data_inv) 
 
{ 
 
  char caa; 
 
 
  output_high(nok_dc); 
 
  output_low(nok_cs);   // chip enabled 
 
 
  for (caa=8;caa>0;caa--) { 
 
    output_low(nok_sclk); 
 
    delay_us(2); 
 
    if ((bytefornokia_data_inv&0x01)==0){output_low(nok_sda);} 
 
    else {output_high(nok_sda);} 
 
    output_high(nok_sclk); 
 
    bytefornokia_data_inv=bytefornokia_data_inv>>1; 
 
  } 
 
 
  output_high(nok_cs);   // chip disabled 
 
} 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
void nokia_clear_screen(void) 
 
{ 
 
  nokia_erase_y(0); 
 
  nokia_erase_y(1); 
 
  nokia_erase_y(2); 
 
  nokia_erase_y(3); 
 
  nokia_erase_y(4); 
 
  nokia_erase_y(5); 
 
 
} 
 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
 
void nokia_clear_xy(int8 xnokia, int8 ynokia) 
 
{ 
 
 
  nokia_gotoxy(xnokia,ynokia); 
 
  nokia_printchar(" "); 
 
 
 
} 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
void nokia_print_uparrow(void) 
 
{ 
 
  nokia_write_data(0x04); 
 
  nokia_write_data(0x02); 
 
  nokia_write_data(0x7f); 
 
  nokia_write_data(0x02); 
 
  nokia_write_data(0x04); 
 
  nokia_write_data(0x00); 
 
} 
 
// 
 
void nokia_print_downarrow(void) 
 
{ 
 
  nokia_write_data(0x10); 
 
  nokia_write_data(0x20); 
 
  nokia_write_data(0x7f); 
 
  nokia_write_data(0x20); 
 
  nokia_write_data(0x10); 
 
  nokia_write_data(0x00); 
 
} 
 
// 
 
void nokia_print_leftarrow(void) 
 
{ 
 
  nokia_write_data(0x08); 
 
  nokia_write_data(0x1c); 
 
  nokia_write_data(0x2a); 
 
  nokia_write_data(0x08); 
 
  nokia_write_data(0x08); 
 
  nokia_write_data(0xf8); 
 
} 
 
// 
 
void nokia_print_rightarrow(void) 
 
{ 
 
  nokia_write_data(0x08); 
 
  nokia_write_data(0x08); 
 
  nokia_write_data(0x2a); 
 
  nokia_write_data(0x1c); 
 
  nokia_write_data(0x08); 
 
  nokia_write_data(0x00); 
 
} 
 
// 
 
void nokia_print_degree(void) 
 
{ 
 
  nokia_write_data(0x00); 
 
  nokia_write_data(0x06); 
 
  nokia_write_data(0x09); 
 
  nokia_write_data(0x09); 
 
  nokia_write_data(0x06); 
 
  nokia_write_data(0x00); 
 
 
  // nokia_printchar("  "); 
 
} 
 
// 
 
void nokia_print_lowbatdegree(void) 
 
{ 
 
  nokia_write_data(0x00); 
 
  nokia_write_data(0x06); 
 
  nokia_write_data(0x0f); 
 
  nokia_write_data(0x0f); 
 
  nokia_write_data(0x06); 
 
  nokia_write_data(0x00); 
 
 
  // nokia_printchar("  "); 
 
} 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | 
			 
		  |