http://www.pudn.com/ > AVRMega8_SSD1815C.rar > AVRMega8_SSD1815C.c


/**************************************************************************** 
*´úÂë±àºÅ£º	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--; 
} 
}