h>
#include<stdio.h>
#include<intrins.h>
#define ACK 1
#define NO_ACK 0
bit ack;
unsigned char reead,write,write2,i,j;
unsigned int temp;
int g ;
//Function declarations
void cct_init(void);
void delay(int);
void lcdinit(void);
void writecmd(int);
void writedata(char);
void writenum (int);
void ex0_isr (void);
void count (int);
// I2C Declarations
void InitSerial(void);
void DelayMs(unsigned int);
void aknowledge();
void start();
void stop();
void send_byte(unsigned char);
unsigned char read_byte();
void save();
void Read();
//*******************
//Pin description
/*
P2 is data bus
P1.0 is RS
P1.1 is E
*/
//********************
// Defines Pins
sbit RS = P1^0;
sbit E = P1^1;
sbit scl = P1^3; // connect to SCL pin (Clock)
sbit sda = P1^4; // connect to SDA pin (Data)
// ***********************************************************
// Main program
//
void main(void)
{
InitSerial();
DelayMs(5);
cct_init(); //Make all ports zero
lcdinit(); //Initilize LCD
writedata('C'); //write
writedata('o'); //write
writedata('u'); //write
writedata('n'); //write
writedata('t'); //write
writedata('s'); //write
writedata(' '); //write
writedata(':'); //write
void writedata(char t)
{
RS = 1; // => RS = 1
P2 = t; //Data transfer
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
}
void count(int j)
{
j=g;
writecmd(0x88);
if(j<10)
writenum(j+0x30);
else
{
writenum((j/10)+0x30);
writenum((j%10)+0x30);
}
}
void writenum (int i)
{
RS = 1; // => RS = 1
P2 = i; //Data transfer
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
}
void writecmd(int z)
{
RS = 0; // => RS = 0
P2 = z; //Data transfer
E = 1; // => E = 1
delay(150);
E = 0; // => E = 0
delay(150);
}
void lcdinit(void)
{
///////////// Reset process from datasheet /////////
delay(15000);
writecmd(0x30);
delay(4500);
writecmd(0x30);
delay(300);
writecmd(0x30);
delay(650);
/////////////////////////////////////////////////////
writecmd(0x38); //function set
writecmd(0x0c); //display on,cursor off,blink off
writecmd(0x01); //clear display
writecmd(0x06); //entry mode, set increment
}
void ex0_isr (void) interrupt 0
{
int f;
f=g;
f++;
if(f==100) // If Count reaches 100
{
f = 0;
writecmd(0x89);
writedata(' ');
}
g=f;
save();
count();
}
//---------------------------------------
//---------------------------------------
void InitSerial(void)
TR1 = 1; // Timer 1 on
}
void Read()
{
start();
send_byte(0xA0);
aknowledge();
send_byte(0x00);
aknowledge();
start();
send_byte(0xA1); //device address
aknowledge();
g=read_byte();
aknowledge();
stop();
}
//---------------------------------------
// Delay mS function
//---------------------------------------
while(count)
i = 115;
while(i>0) i--;
count--;