#include <reg52.h> 
#include <function.h> //详见第六章第8讲
#include <lcd.h>      //详见第十一章第3讲
#include <uart.h>     //详见第十章第4讲
    
u8 i=0;
u8 pdata RXDBUF[64];
void COUNT_TIMES()
{
    TMOD&=0xF0;   
    TMOD|=0x01;   
}
  
void UART_LcdFullClear()
{
    if(  RXDBUF[0]== 'L'&&RXDBUF[1]== 'c'&&RXDBUF[2]== 'd'&&RXDBUF[3]=='F'
       &&RXDBUF[4]== 'u'&&RXDBUF[5]== 'l'&&RXDBUF[6]== 'l'&&RXDBUF[7]== 'C'
       &&RXDBUF[8]== 'l'&&RXDBUF[9]== 'e'&&RXDBUF[10]=='a'&&RXDBUF[11]=='r' )                             
    {
        LcdFullClear();
    }
}
  
void UART_LcdShowStr()
{
    u8 lcd_x,lcd_y,z;
    
    if(  RXDBUF[0]=='L'&&RXDBUF[1]=='c'&&RXDBUF[2]=='d'&&RXDBUF[3]=='S'&&RXDBUF[4]=='h'
       &&RXDBUF[5]=='o'&&RXDBUF[6]=='w'&&RXDBUF[7]=='S'&&RXDBUF[8]=='t'&&RXDBUF[9]=='r')                               
    {
        
        if(RXDBUF[12]>='0'&&RXDBUF[12]<='9') 
        {                                    
        
            lcd_x=(RXDBUF[11]-'0')*10;       
            lcd_x+=RXDBUF[12]-'0';           
        }
        else lcd_x=RXDBUF[11]-'0';           
       
        if(RXDBUF[14]>='0'&&RXDBUF[14]<='9') 
        {                                    
        
            lcd_y=RXDBUF[14]-'0';
        }      
        else lcd_y=RXDBUF[13]-'0';           
                                             
                                                                       
                                               
        if(RXDBUF[15]=='"')
        {
            for(z=1; ;z++)
            {
                                                        if(RXDBUF[15+z]=='"')     
                                                        {
                    RXDBUF[15+z]='\0';            
                    break;
                }
            }
            LcdShowStr(lcd_x,lcd_y,RXDBUF+15+1);  
                                                  
        }
        else if(RXDBUF[16]=='"')
        {
            for(z=1; ;z++)
            {
                if(RXDBUF[16+z]=='"')
                {
                    RXDBUF[16+z]='\0';
                    break;
                }
            }
            LcdShowStr(lcd_x,lcd_y,RXDBUF+16+1);
        }    
    }
}
  
void main()
{  
    u8 x;   
    EA = 1;                                  
    COUNT_TIMES();                           
    ConfigUART(9600);
    InitLcd1602();                           
    LcdShowStr(1, 0, "Good Good Study");     
    LcdShowStr(3, 1, "Day Day Up!");         
    
    while(1)
    {      
        if(TH0>=200)                         
        {
            TR0=0;                           
         
            UART_LcdFullClear();             
            UART_LcdShowStr();               
         
            TH0=0;                           
            TL0=0;
            i=0;                             
            for(x=0;x<64;x++)RXDBUF[x]=0x00; 
        }
    } 
}
    
void InterruptUART() interrupt 4
{  
    if (RI)   
    {
        RI = 0;
        TH0=0;
        TL0=0;
              
        TR0=1;
       
        RXDBUF[i]=SBUF; 
        i++;            
    }
}