****************************************************************************
*´úÂë±àºÅ£º 0.999.0
*Ãû³Æ: ATMega8 Óë SSD1815Òº¾§µÄ½Ó¿ÚÑÝʾ³ÌÐò
*´´½¨ÈÕÆÚ£º 2005Äê3ÔÂ15ÈÕ
*´´½¨ÈË£º ÖÐÓÑÖÇÄܹ¤×÷ÊÒ ÁõÖÒÈÊ
*Ä£¿é¹¦ÄÜ£º
*ÐÞ¸ÄÈÕÆÚ£º 2005Äê3ÔÂ30ÈÕ
*²Î¿¼Îĵµ£º
*оƬÐͺţº AT MEGA8
*оƬÉèÖ㺠Ŀ±êMCU:MEGA8 ¾§Õñ:INT RC 2MHZ
*ÁªÏµ·½Ê½£º Liuzhongren81@sohu.com
****************************************************************************/


/*дºº×ÖÒº¾§×Ó³Ì Òº¾§ÆÁ·ÖΪ4ÐÐ*8Áкº×Ö£¬È«²¿Ê¹ÓÃÄ£Äâ½Ó¿Ú·½Ê½¡£
SSD1815 LCM ½Ó¿Ú³ÌÐò£¨Ä£Äâ8080·½Ê½£© Òº¾§Ä£¿é¹©Ó¦ÉÌ£ºSOLOMON

;***************************************************************************
;Á¬Ïßͼ:
;*LCM---MEGA8* *LCM---MEGA8* *LCM-------MEGA8* *LCM----------MEGA8* *
;*DB0---PB.0* *DB4---PB.4* *D/I-------PD.4* *
;*DB1---PB.1* *DB5---PB.5* *WR--------PD.5* *
;*DB2---PB.2* *DB6---PB.6* *RD--------PD.6* *RST--------VCC* *
;*DB3---PB.3* *DB7---PB.7* *CS1-------PD.7* *CS2----------VCC* *
;×¢:AVR ATMEGA8µÄ¹¤×÷ƵÂÊΪ8MHz *
;***************************************************************************/


#define Uchar unsigned char
#include
#include "hzk.h"

/***********Òº¾§ÏÔʾÆ÷½Ó¿ÚÒý½Å¶¨Òå***************/
//sbit CS1lcm= Pd^7; //
#define CS1lcmON PORTD|=(1<<7)
#define CS1lcmOFF PORTD&=~(1<<7)

//sbit Dilcm= Pd^6; //
#define DilcmON PORTD|=(1<<6)
#define DilcmOFF PORTD&=~(1<<6)

//sbit Wrlcm= Pd^5; //
#define WrlcmON PORTD|=(1<<5)
#define WrlcmOFF PORTD&=~(1<<5)

//Òº¾§²ÉÓÃ8080ϵÁнӿÚЭÒé
//sbit RD= Pd^4; //
#define RDlcmON PORTD|=(1<<4)
#define RDlcmOFF PORTD&=~(1<<4)

//Êý¾Ý¿Ú
#define Datalcm PORTB

/***********³£ÓòÙ×÷ÃüÁîºÍ²ÎÊý¶¨Òå***************/
/*ÏÔʾon */
#define DISPON 0xaf
/*ÏÔʾoff */
#define DISPOFF 0xae
/*ÏÔʾÆðʼÐж¨Òå */
#define DISPFIRST 0x40
/*¶¨Î»É趨ָÁҳ£© */
#define SETP 0xB0
/*¶¨Î»É趨ָÁÁУ©µÍλ×Ö½Ú */
#define SETCL 0x00
/*¶¨Î»É趨ָÁÁУ©¸ßλ×Ö½Ú */
#define SETCH 0x10

/*LCMæÅжÏλ */
#define Lcdbusy 0x80

/**************ÏÔʾ·ÖÇø±ß½çλÖÃ*****************/
/*×óÇø */
#define MODL 0x00
/*×óÇøºÍÓÒÇø·Ö½ç */
#define MODR 0x40
/*ÏÔÊ¾ÇøµÄÓұ߽ç*/
#define LCMLIMIT 132

/****************È«¾Ö±äÁ¿¶¨Òå*******************/
Uchar col,row,cbyte; /*ÁÐx,ÐÐ(Ò³)y,Êä³öÊý¾Ý */
Uchar xy; /*»­Ïß·½Ïò±êÖ¾£º1ˮƽ */
Uchar gStr[16]={0,0,0,0,0,0},gLength=0;//×Ö·û´®¼°Æä³¤¶È

/*****************º¯ÊýÁбí**********************/

void Draw1(int Temp,int TimeLeft,int Charged);/*LCDÏÔʾģʽ ½çÃæ1*/
void Draw2(int V1,int V2,int V3,int V4); /*¹ÊÕÏÕï¶Ïģʽ ½çÃæ2*/
void Draw3(int UsedTimes); /*Êý¾Ý¼ìÑéģʽ ½çÃæ3*/

void IntToStr(int IntData, Uchar DigitN); /*½«ÕûÐÍÊý¾Ýת»»Îª×Ö·û´®,·µ»Ø×Ö·û´®µÄ³¤¶È*/
void Delay(Uchar); /*ÑÓʱ£¬Èë¿ÚÊýΪMs */

void Lcminit(void); /*Òº¾§Ä£¿é³õʼ»¯ */
void DelayLCM(void); /*Òº¾§Ö¸ÁîÑÓʱ*/
void lcdbusy(void); /*busyÅжϡ¢µÈ´ý*/

void Putedot(Uchar); /*°ë½Ç×Ö·ûÊä³ö */
void Putcdot(Uchar); /*È«½Ç(ºº×Ö)Êä³ö */
void Wrdata(Uchar); /*Êý¾ÝÊä³ö¸øLCM */
void Lcmcls( void ); /*LCMÈ«ÆÁÄ»ÇåÁã(Ìî³ä0) */
void Locatexy(void); /*¹â±ê¶¨Î» */
void Wrcmd(Uchar); /*×óÇøÃüÁîÊä³ö */
void Putstr(Uchar *puts,Uchar i); /*ÖÐÓ¢ÎÄ×Ö·û´®Êä³ö */
void Rollscreen(Uchar x); /*ÆÁÄ»ÏòÉϹö¶¯ÑÝʾ */
void Rddata(void); /* ´ÓÒº¾§Æ¬É϶ÁÊý¾Ý */
void Linehv(Uchar length); /*ºá(Êú)·½Ïò»­Ïß */
void point(void); /*´òµã */
void Linexy(Uchar endx,Uchar endy); /*»­Ð±Ïß*/
void TestPin(void);/*ͨÓòâÊÔÄ£¿é*/

/****************************************************************************
*´úÂë±àºÅ£º 1.0.0
*Ãû³Æ: ÑÝʾÖ÷³ÌÐò
*Ä£¿é¹¦ÄÜ£º ³õʼ»¯µ¥Æ¬»ú¡¢Òº¾§ÆÁÄ»¡¢ÂÖÁ÷ÏÔʾÈý¸ö½çÃæ
*´´½¨ÈÕÆÚ£º 2005Äê3ÔÂ16ÈÕ
*´´½¨ÈË£º °¢Èʹ¤×÷ÊÒ ÁõÖÒÈÊ
*
*ÐÞ¸ÄÈÕÆÚ£º 2005Äê3ÔÂ30ÈÕ
*²Î¿¼Îĵµ£º
****************************************************************************/
void main(void)

{
Uchar iii;

//OSCCAL=0x7f;
DDRD=0xF0; /* ¶Ë¿ÚD ¸ß4λÊä³ö ¿ØÖÆÒº¾§*/
PORTD=0x80; /* Rw=0 Dc=0 E=0 CS1=1*/
DDRB=0xff; /* ¶Ë¿ÚB Êä³ö ¿ØÖÆÒº¾§Êý¾ÝÏß*/
PORTB=0xff;

col=0;
row=0;

Delay(40); /*ÑÓʱ´óÔ¼40Ms,µÈ´ýÍâÉè×¼±¸ºÃ */

Lcminit(); /*Òº¾§Ä£¿é³õʼ»¯£¬°üÀ¨È«ÆÁÄ»ÇåÆÁ*/


//while(1);

while(1){
TestPin(); /*ָʾµÆÉÁ˸*/

Lcmcls(); /*ÇåÆÁÄ»*/
Draw1(31,5672,99); /*ÏÔʾζȡ¢Ê£Óàʱ¼ä¡¢Ê£ÓàµçÁ¿*/
for(iii=0;iii<10;iii++)
Delay(200); /*ÑÓʱ£¬¿ØÖƹö¶¯ËÙ¶È */

Lcmcls(); /*ÇåÆÁÄ»*/
Draw2(36,36,225,37);/*ÏÔʾ¹ÊÕÏÕï¶Ï¡¢µç³Ø×鲻ƽºâ¡¢Ëĸöµçѹֵ*/
for(iii=0;iii<10;iii++)
Delay(200); /*ÑÓʱ£¬¿ØÖƹö¶¯ËÙ¶È */

Lcmcls(); /*ÇåÆÁÄ»*/

Draw3(130);/*ÏÔʾ½ðÁ£×Óµç³ØÊ¹ÓôÎÊý*/
for(iii=0;iii<10;iii++)
Delay(200); /*ÑÓʱ£¬¿ØÖƹö¶¯ËÙ¶È */

};
}


/****************************************************************************
*´úÂë±àºÅ£º 1.0.0
*Ãû³Æ: ÑÝʾÖ÷³ÌÐò
*´´½¨ÈÕÆÚ£º 2005Äê3ÔÂ16ÈÕ
*´´½¨ÈË£º °¢Èʹ¤×÷ÊÒ ÁõÖÒÈÊ
*Ä£¿é¹¦ÄÜ£º ³õʼ»¯µ¥Æ¬»ú¡¢Òº¾§ÆÁÄ»¡¢ÂÖÁ÷ÏÔʾÈý¸ö½çÃæ
*ÐÞ¸ÄÈÕÆÚ£º 2005Äê3ÔÂ30ÈÕ
*²Î¿¼Îĵµ£º
****************************************************************************/

/**********************************************************
* ´Ëº¯ÊýÏÔʾ ÎÂ¶È Ê£Óàʱ¼ä ºÍ °Ù·Ö±È£¬²¢»­³öÊ£ÓàµçÁ¿µÄͼÐÎ
* ÊäÈë²ÎÊýÒÀ´ÎΪ ÎÂ¶È Ê£Óàʱ¼ä ºÍ °Ù·Ö±È
*
***********************************************************/
void Draw1(int Temp,int TimeLeft,int Charged)
{

int xP,yP,ChargedP;


col=50;
row=1*8;
Putstr(STR1,5); /*µÚÒ»ÐÐ×Ö·ûÊä³ö£¬10×Ö½Ú"ζÈ: ¡æ" */

col=98; //50+48 ÊäÈëÊý¾Ý
row=1*8;
IntToStr(Temp,0);/* СÊýµãλÊýΪ0 */
Putstr(gStr,gLength); /*ζÈÊä³ö" */


col=50;
row=3*8;
Putstr(STR2,8); /*µÚ¶þÐÐ×Ö·ûÊä³ö£¬8×Ö½Ú"Ê£Óàʱ¼ä" */


col=60;
row=5*8;
Putstr(STR3,8); /*µÚÈýÐÐ×Ö·ûÊä³ö£¬8×Ö½Ú"#####min" */

col=65; //50 ÊäÈëÊý¾ÝÔÚ ¿ªÊ¼µÄ¿Õ°×´¦
row=5*8;
IntToStr(TimeLeft,0);/* СÊýµãλÊýΪ0 */
Putstr(gStr,gLength); /*Ê£Óàʱ¼ä" */



col=35;
row=5*8;
if(Charged==100)
{
Putstr("Ok!",3); /*³äµçÂú*/
}
else
{
Putstr(" %",3); /*µÚÈýÐÐ×Ö·ûÊä³ö£¬8×Ö½Ú"###%" */
col=35;
row=5*8;
IntToStr(Charged,0);/* СÊýµãλÊýΪ0 */
Putstr(gStr,gLength); /*µçÁ¿°Ù·Ö±È" */
}



//¿ªÊ¼×÷ͼ

ChargedP=Charged*64/100;
yP=64-ChargedP;
// xP=-(yP-82)*10/18;

for(yP=64-ChargedP;yP<64;yP++)
{

xP=-(yP-82)*7/18;

// if(yP>40) xP=-(yP-82)*6/18;
if(xP>25)xP=25;
col=20;
row=yP;
xy = 1;
Linehv(xP); /*»­Ò»ÌõºáÏß(0,yP)-(xP,yP) */
}
}


/**********************************************************
* ´Ëº¯ÊýÏÔʾ V1 V2 V3 V4 µçѹֵ
* ÊäÈë²ÎÊýÒÀ´ÎΪ V1 V2 V3 V4
*
***********************************************************/
void Draw2(int V1,int V2,int V3,int V4)
{
Uchar i;
col=20;
row=0*8;
Putstr(STR4,5); /*µÚÒ»ÐÐ×Ö·ûÊä³ö£¬10×Ö½Ú"¹ÊÕÏÕï¶Ï£º" */

col=20;
row=2*8;
Putstr(STR5,6); /*µÚ¶þÐÐ×Ö·ûÊä³ö£¬12×Ö½Ú"µç³Ø×鲻ƽºâ" */

col=20;
row=4*8;
IntToStr(V1,1);/* СÊýµãλÊýΪ1 */
for(i=gLength;i>0;i--)
{
gStr[i+3-1]= gStr[i-1];
}
gStr[0]='V';
gStr[1]='1';
gStr[2]='=';
gStr[3+gLength]='v';
Putstr(gStr,gLength+4); /*V1" */


col=75; //
row=4*8;
IntToStr(V2,1);/* СÊýµãλÊýΪ1 */
for(i=gLength;i>0;i--)
{
gStr[i+3-1]= gStr[i-1];
}
gStr[0]='V';
gStr[1]='2';
gStr[2]='=';
gStr[3+gLength]='v';
Putstr(gStr,gLength+4); /*V2" */

col=20;
row=6*8;
IntToStr(V3,2);/* СÊýµãλÊýΪ2 */
for(i=gLength;i>0;i--)
{
gStr[i+3-1]= gStr[i-1];
}
gStr[0]='V';
gStr[1]='3';
gStr[2]='=';
gStr[3+gLength]='v';
Putstr(gStr,gLength+4); /*V3" */


col=75; //
row=6*8;
IntToStr(V4,1);/* СÊýµãλÊýΪ1 */
for(i=gLength;i>0;i--)
{
gStr[i+3-1]= gStr[i-1];
}
gStr[0]='V';
gStr[1]='4';
gStr[2]='=';
gStr[3+gLength]='v';
Putstr(gStr,gLength+4); /*V4" */
}


/**********************************************************
* ´Ëº¯ÊýÏÔʾ »¶Ó­½çÃæºÍʹÓôÎÊý
* ÊäÈë²ÎÊýÒÀ´ÎΪ ʹÓôÎÊý
*
***********************************************************/
void Draw3(int UsedTimes)
{
//´Ëº¯ÊýÏÔʾ ÎÂ¶È Ê£Óàʱ¼ä ºÍ °Ù·Ö±È


col=20;
row=1*8;
Putstr(STR6,7); /*µÚÒ»ÐÐ×Ö·ûÊä³ö£¬16×Ö½Ú"»¶Ó­Ê¹ÓýðÁ£×Ó" */

col=20;
row=3*8;
Putstr(STR7,7); /*µÚ¶þÐÐ×Ö·ûÊä³ö£¬8×Ö½Ú"ϵÁÐï®Àë×Óµç³Ø" */

col=20;
row=5*8;
Putstr(STR8,7); /*µÚÈýÐÐ×Ö·ûÊä³ö£¬8×Ö½Ú"ÒÑʹÓãº####´Î" */
col=80; // ÊäÈëÊý¾ÝÔÚ ÖмäµÄ¿Õ°×´¦£¬µÚ6¸ö×Ö½Ú
row=5*8;
IntToStr(UsedTimes,0);/* СÊýµãλÊýΪ0 */
Putstr(gStr,gLength); /*ʹÓôÎÊý" */
}


/****************************************************************************
*´úÂë±àºÅ£º 1.0.0
*Ãû³Æ: ͨÓòâÊÔÄ£¿é
*´´½¨ÈÕÆÚ£º 2005Äê3ÔÂ29ÈÕ
*´´½¨ÈË£º °¢Èʹ¤×÷ÊÒ ÁõÖÒÈÊ
*Ä£¿é¹¦ÄÜ£º ²âÊԹܽţ¬²¢¸ø³ö¹¤×÷ָʾ
*ÐÞ¸ÄÈÕÆÚ£º 2005Äê3ÔÂ30ÈÕ
*²Î¿¼Îĵµ£º
****************************************************************************/

void TestPin(void)
{ int i;
DDRC=0x20;

for(i=0;i<1;i++)
{
PORTC&=~(1<<5); Delay(10);
PORTC|=(1<<5); Delay(10);
}

}

/**********************************************************
* ½«ÕûÐÍÊý¾Ýת»»Îª×Ö·û´®,·µ»Ø×Ö·û´®µÄ³¤¶È
* ת»»¹ýµÄÊý¾Ý·ÅÔÚ È«¾Ö±äÁ¿ gStr ÖÐ
***********************************************************/
void IntToStr(int IntData, Uchar DigitN)
{ Uchar position=15,i;
Uchar sig;
if(IntData<0)
{ sig=1;
IntData=-IntData;
}

while(IntData)
{
gStr[position]= IntData%10+0x30;
IntData=IntData/10;
position--;
if(15-position==DigitN)
{
gStr[position]='.';
position--;
}
}
if(sig==1)
{
gStr[position]='-';
}
gLength=15-position;

//×ó¶ÔÆë
for(i=0;i< gLength;i++)
{
gStr[i]=gStr[position+1];
position++;
}
}


/************************************************/
/*»­Ïß¡£ÈÎÒâ·½ÏòµÄбÏߣ¬²»Ö§³Ö´¹Ö±µÄ»òˮƽÏß */
/************************************************/

void Linexy(Uchar endx,Uchar endy)
{
register Uchar t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
Uchar incx,incy;

/* compute the distance in both directions */
delta_x=endx-col;
delta_y=endy-row;

/* compute the direction of the increment ,
an increment of "0" means either a vertical or horizontal lines */

if(delta_x>0) incx=1;
else if( delta_x==0 ) incx=0;
else incx=-1;


if(delta_y>0) incy=1;
else if( delta_y==0 ) incy=0;
else incy=-1;

/* determine which distance is greater */

//Çó¾ø¶ÔÖµ
if(delta_x<0)delta_x=-delta_x;
if(delta_y<0)delta_y=-delta_y;

if( delta_x > delta_y ) distance=delta_x;
else distance=delta_y;

/* draw the line */
for( t=0;t <= distance+1; t++ ) {
point();
xerr += delta_x ;
yerr += delta_y ;
if( xerr > distance ) {
xerr-=distance;
col+=incx;
}
if( yerr > distance ) {
yerr-=distance;
row+=incy;
}

}
}

/****************************************/
/*»­Ïß¡£Ö»ÌṩX»òY·½ÏòµÄ£¬²»Ö§³ÖбÏß */
/****************************************/
void Linehv(Uchar length)
{
Uchar xs,ys;
if (xy)
{ys = col; //ºáÏß
for (xs=0;xs7*8) row=0; /*Èç¹ûÐÐÔ½½ç£¬·µ»ØÊ×ÐÐ */
} /*Éϰë¸ö×Ö·ûÊä³ö½áÊø */

col = bakerx; /*ÁÐ¶ÔÆë */
row = bakery+8; /*Ö¸Ïòϰë¸ö×Ö·ûÐÐ */
/*ϰë¸ö×Ö·ûÊä³ö£¬8ÁÐ */
for(i=0;i<8;i++)
{
cbyte = Ezk[x]; /*È¡µãÕóÂë */
Wrdata(cbyte); /*дÊä³öÒ»×Ö½Ú */
x++;
col++;
if (col==LCMLIMIT){col=0;row=row+16;}; /*ÏÂÒ»ÁУ¬Èç¹ûÁÐÔ½½ç»»ÐÐ*/
if (row>7*8) row=8; /*Èç¹ûÐÐÔ½½ç£¬·µ»ØÊ×ÐÐ */
} /*ϰë¸ö×Ö·ûÊä³ö½áÊø */
row=bakery;
} /*Õû¸ö×Ö·ûÊä³ö½áÊø */


/****************************************/
/* È«½Ç×Ö·ûµãÕóÂëÊý¾ÝÊä³ö */
/****************************************/
void Putcdot(Uchar Order)
{
Uchar i,bakerx,bakery; /*¹²¶¨Òå3¸ö¾Ö²¿±äÁ¿ */
int x; /*Æ«ÒÆÁ¿£¬×Ö·ûÁ¿ÉٵĿÉÒÔ¶¨ÒåΪUCHAR */
bakerx = col; /*ÔÝ´æx,y×ø±ê£¬Òѱ¸Ï°ë¸ö×Ö·ûʹÓà */
bakery = row;
x=Order * 0x20; /*ÿ¸ö×Ö·û32×Ö½Ú */

/*Éϰë¸ö×Ö·ûÊä³ö£¬16ÁÐ */
for(i=0;i<16;i++)
{
Wrdata(Hzk[x]); /*дÊä³öÒ»×Ö½Ú */
x++;
col++;
if (col==LCMLIMIT){ col=0;row+=16;} /*ÏÂÒ»ÁУ¬Èç¹ûÁÐÔ½½ç»»ÐÐ*/
if (row>6*8) row=0; /*Èç¹ûÐÐÔ½½ç£¬·µ»ØÊ×ÐÐ */
} /*Éϰë¸ö×Ö·ûÊä³ö½áÊø */

/*ϰë¸ö×Ö·ûÊä³ö£¬16ÁÐ */
col = bakerx;
row = bakery+8;
for(i=0;i<16;i++) /*ϰ벿·Ö*/
{
Wrdata(Hzk[x]);
x++;
col++;
if (col==LCMLIMIT){col=0;row+=16;} /*ÏÂÒ»ÁУ¬Èç¹ûÁÐÔ½½ç»»ÐÐ*/
if (row>7*8) row=8; /*Èç¹ûÐÐÔ½½ç£¬·µ»ØÊ×ÐÐ */
} /*ϰë¸ö×Ö·ûÊä³ö½áÊø */
row = bakery;
} /*Õû¸ö×Ö·ûÊä³ö½áÊø */

/****************************************/
/* ÇåÆÁ£¬È«ÆÁÄ»ÇåÁã */
/****************************************/
void Lcmcls( void )
{
for(row=0;row<64;row+=8)
{ //col=20;
// Locatexy(); /*×ø±ê¶¨Î» */
for(col=20;col<132;col++)
{
// Locatexy(); /*×ø±ê¶¨Î» */
Wrdata(0x00);
// TestPin();

}
}

}

/****************************************/
/* ´ÓÒº¾§Æ¬É϶ÁÊý¾Ý£¬±£ÁôÔÚÈ«¾Ö±äÁ¿ÖÐ */
/****************************************/

void Rddata(void)
{
Locatexy(); /*×ø±ê¶¨Î»£¬·µ»ØÊ±±£Áô·ÖÇø×´Ì¬²»±ä */

DDRB=0x00;
DilcmON; /*Êý¾Ý*/

WrlcmON; /*¶ÁÊý¾Ý*/
RDlcmOFF; /*¶ÁÈëµ½LCM*/

CS1lcmOFF;//Ñ¡ÖÐоƬ

//DelayLCM();

cbyte = PINB; /*Ðé¶ÁÒ»´Î */

RDlcmON;
//Locatexy(); /*×ø±ê¶¨Î»£¬·µ»ØÊ±±£Áô·ÖÇø×´Ì¬²»±ä */
//DelayLCM();
DilcmON; /*Êý¾Ý*/
WrlcmON; /*¶ÁÊý¾Ý*/
RDlcmOFF; /*¶ÁÈëµ½µ¥Æ¬»ú*/
//DelayLCM();

DDRB=0x00;
cbyte = PINB; /*´ÓÊý¾Ý¿Ú¶ÁÊý¾Ý£¬Õæ¶Á */
RDlcmON;
CS1lcmON;
}

/****************************************/
/* Êý¾ÝдÊä³ö */
/****************************************/

void Wrdata(Uchar X)
{
RDlcmON;
Locatexy(); /*×ø±ê¶¨Î»£¬·µ»ØÊ±±£Áô·ÖÇø×´Ì¬²»±ä */
lcdbusy();

DDRB=0xff;
DilcmON; /*Êý¾ÝÊä³ö*/
WrlcmOFF; /*дÊä³ö */
CS1lcmOFF; //Ƭѡ


Datalcm = X; /*Êý¾ÝÊä³öµ½Êý¾Ý¿Ú */

WrlcmON; /*¶ÁÈëµ½LCM*/
CS1lcmON; //Ƭѡ
RDlcmON;
}


/********************************/
/* ÃüÁîÊä³öµ½Òº¾§¿ØÖÆ¿Ú */
/********************************/

void Wrcmd(Uchar X)
{
lcdbusy(); /*È·¶¨·ÖÇø£¬·µ»ØÊ±±£Áô·ÖÇø×´Ì¬²»±ä*/

DDRB=0xFF;
DilcmOFF; /*ÃüÁî²Ù×÷ */

RDlcmON;
WrlcmOFF; /*дÊä³ö */
CS1lcmOFF;

Datalcm = X; /*Êý¾ÝÊä³öµ½Êý¾Ý¿Ú */
WrlcmON;
CS1lcmON;
DilcmON; //дµ½LCMÖÐ
//RDlcmON;DelayLCM();RDlcmON; /*¶ÁÈëµ½LCM*/
}


/********************************************************/
/* ·ÖÇø²Ù×÷ÔÊÐíµÈ´ý,·µ»ØÊ±±£Áô·ÖÇøÑ¡Ôñ״̬ */
/********************************************************/
void lcdbusy(void)
{
//return;//debug
DilcmOFF; /*CLR DI */
WrlcmON; /*SETB RW */
RDlcmOFF;
CS1lcmOFF; // CS1LCM = 0; /*CLR CS1 */

DDRB=0x00;

//
while(PINB & Lcdbusy);

CS1lcmON;
RDlcmON;
WrlcmON;
DilcmON;
}


/********************************************************/
/*¸ù¾ÝÉ趨µÄ×ø±êÊý¾Ý£¬¶¨Î»LCMÉϵÄÏÂÒ»¸ö²Ù×÷µ¥ÔªÎ»Öà */
/********************************************************/
void Locatexy(void)
{
cbyte=((row&0x3F) >>3) |SETP;
Wrcmd(cbyte);//ÉèÖÃÒ³µØÖ·

cbyte=col&0x0f |SETCL;
Wrcmd(cbyte); //ÉèÖÃÁеØÖ· µÍ
cbyte=((col&0xF0)>>4)|SETCH;
Wrcmd(cbyte); //ÉèÖÃÁеØÖ· ¸ß

}

/********************************/
/*Òº¾§ÆÁ³õʼ»¯ */
/********************************/

void Lcminit(void)
{
int i;
DilcmOFF;//LCDµÄD/C½ÅÔÚÒ»¿ªÊ¼µÄʱºòÓ¦¸ÃÉèΪ0


cbyte = 0xA0; /*¶ÎÖØÅÅ*/
Wrcmd(cbyte);

cbyte = 0xC0; /*ÉèÖÃÊä³öɨÃè·½Ïò*/
Wrcmd(cbyte);

cbyte = 0xA2; /*ÉèÖÃÆ«Ñ¹1/9*/
Wrcmd(cbyte);

// cbyte = 0xA7; /*ÉèÖ÷´ÏÔ*/
// Wrcmd(cbyte);


cbyte = 0x2F; /*ÉèÖõçÔ´¿ØÖƼĴæÆ÷ ÄÚ²¿¸ºÑ¹Éú³É,ÄÚ²¿µ÷ÀíÄ£¿é,ÄÚ²¿Êä³ö»º³å*/
Wrcmd(cbyte);

cbyte = 0x27; /*ÉèÖÃÄÚ²¿µç×èµ÷Õû±È*/
Wrcmd(cbyte);

cbyte = 0x81; /*ÉèÖöԱȶÈ*/
Wrcmd(cbyte);
cbyte = 0xff; /*¶Ô±È¶ÈÑ¡Ôñ*/
Wrcmd(cbyte);


cbyte = 0xAF; /*´ò¿ªÏÔʾÆÁ */
Wrcmd(cbyte);


cbyte = DISPFIRST; /*¶¨ÒåÏÔʾÆðʼÐÐΪÁã */
Wrcmd(cbyte);

Wrcmd(0xE0); //½øÈë¶Á¸Äдģʽ
// Wrcmd(0xEE);

Lcmcls();

col=20; /*ÇåÆÁ */
row=0;
Locatexy();
}



void DelayLCM(void) /*Òº¾§Ö¸ÁîÑÓʱ*/
{
Uchar i;
for(i=0;i<2;i++);
}

/********************************/
/* ÑÓʱ */
/********************************/
void Delay(Uchar MS)
{
Uchar us,usn;
while(MS!=0)
{ usn = 4;
while(usn!=0)
{
us=0xf0;
while (us!=0){us--;};
usn--;
}
MS--;
}
}