您当前的位置:五五电子网电子知识单片机-工控设备51单片机PCF8563时钟+AT24C02+LCD12864显示时钟程序 正文
PCF8563时钟+AT24C02+LCD12864显示时钟程序

PCF8563时钟+AT24C02+LCD12864显示时钟程序

点击数:7467 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   51单片机
            }
        }
    }

    if(newtimebit==1&&recpcokbit==1)
    {
//设定新的系统时间
        Uchar *pcfsetip;
        newtimebit=0;
        recpcokbit=0;
        pcfsetip=&recdata[1];
        SetPCF8563(pcfsetip);
        WritePCF8563(0x00,0x00);
        WritePCF8563(0x01,0x00);
        WritePCF8563(0x0d,0x83);
    }        
}

//以下为串行口中断程序,用于接收串行数据
void rs232(void) interrupt 4
{
    if(RI==1)
    {    
        
//原输入格式为AA 秒,分,时 日,星期,月年
        if (SBUF==0xaa)
        {
            newtimebit=1;
            pcpointer=0;
        }
        RI = 0;
        recdata[pcpointer++]=SBUF;
        if(pcpointer==8)
        {
            pcpointer =0;
            recpcokbit =1;        //指针还原,置收到完整的控制码            
        }
    }
    else
    {
        TI = 0;
    }            
}

void time2(void) interrupt 5
{
    TF2 = 0;
    TH2 = 0x4c;                    //50ms
    TL2 = 0x00;
}

        

/*---------------LCD驱动要用到的一些子程序--------------------*/
/*向LCD写指令*/
void lcdwrite_cmd(Uchar cmd_dat)
{
    D_I = 0;
    R_W = 0;
    E = 0;
    LCDPORT = cmd_dat;
    SomeNOP();
    E = 1;
    SomeNOP();
    E = 0;
}
/*向LCD写数据*/
void lcdwrite_dat(Uchar dot_dat)
{
    D_I = 1;
    R_W = 0;
    E = 0;
    LCDPORT = dot_dat;
    SomeNOP();
    E = 1;
    SomeNOP();
    E = 0;
}
/*判断LCD是否处于*/
void lcd_busy()
{
    Uchar i;
    D_I = 0;
    R_W = 1;
    while(1)
    {
        E = 0;
        LCDPORT = 0xff;
        SomeNOP();
        E = 1;
        SomeNOP();
        i = LCDPORT;
        E = 0;
        if(i<0x80) break;
    }
}

Uchar  lcdread_dat(void)
{    Uchar i;
    D_I = 1;
    R_W = 1;
    E = 0;
    LCDPORT = 0xff;
    SomeNOP();
    E =1;
    SomeNOP();
    i = LCDPORT;
    E = 0;
    LCDPORT =0xff;
    SomeNOP();
    E = 1;
    SomeNOP();
    i =LCDPORT;
    E =0;
    return(i);
}

//开LCD显示
void lcddispon(void)
{
    CS1=0;CS2=1;
    lcdwrite_cmd(0x3f);
    CS1=1;CS2=0;
    lcdwrite_cmd(0x3f);
}
//关LCD显示
void lcddispoff(void)
{
    CS1=0;CS2=1;
    lcdwrite_cmd(0x3e);
    CS1=1;CS2=0;
    lcdwrite_cmd(0x3e);
}
//对整屏清除,就是写空的数据
void lcdclrall(void)
{
    Uchar i,j;
    for(i=0;i<8;i++)
    {
        CS1=0;CS2=1;
        lcdwrite_cmd(i|0xb8);
        lcdwrite_cmd(0x40);
        for(j=64;j>0;j--)
        {
            lcdwrite_dat(0x00);
            lcd_busy();
//            P3_1=!P3_1;
        }
            
        CS1=1;CS2=0;
        lcdwrite_cmd(i|0xb8);
        lcdwrite_cmd(0x40);
        for(j=64;j>0;j--)
        {
            lcdwrite_dat(0x00);
            lcd_busy();
        }
    }
}

//LCD初始化
void lcdini(void)
{
    CS1=0;CS2=1;
    lcdwrite_cmd(0xc0);                //从第0行开始显示

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]  下一页


本文关键字:程序  51单片机单片机-工控设备 - 51单片机