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;xs 7*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--; } }