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

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

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

//aa 00 47 13 25 63 00 04 04
//     秒 分 时  日 星期和月(最高3位0-6,代表1-7) 
#include <intrins.h>
#include<AT89x52.h>
#include "hcLCDdot.h"            //点阵库
#define Uchar unsigned char
#define Uint  unsigned int
#define SomeNOP(); _nop_();_nop_();_nop_(); 
/*LCD驱动要用到的一些口线定意*/
#define LCDPORT P0
sbit D_I = P3^7;
sbit R_W = P3^6;
sbit E = P3^5;
sbit CS1 = P3^2;
sbit CS2 = P3^4;
sbit RST = P3^3;
/*I2C要用到的口线定意*/
sbit SDA = P2^7;
sbit SCL = P2^6;

////////////以下为函数声明///////////////////////////////
//LCD驱动要用到的一些函数
void lcdwrite_cmd(Uchar cmd_dat);
void lcdwrite_dat(Uchar dot_dat);
void lcd_busy();
Uchar  lcdread_dat(void);
void lcddispon(void);
void lcddispoff(void);
void lcdclrall(void);
void lcdini(void);
void Hz12disp(Uchar Nowrow,Uchar Nowcol,Uchar CHplace);
void ASC12disp(Uchar Nowrow,Uchar Nowcol,Uchar ASCplace);
void flashlogo(Uchar Bmpcol);
void Disp128_64(Uchar BMPplace);
void delay(void);
//I2C驱动要用到的一些函数
void Delay_1ms(Uchar time);
void I2CStart(void);    
void I2CStop(void);
void ACK(void);            //AcknowLEDge信号
void NACK(void);            //没有Acknowledge信号
void AutoACK(void);        //在一定的时间内自动确定ACK的信号//
void Writex(Uchar j);
Uchar Readx(void);
void X24_Write(Uchar Addresshigh,Uchar Addresslow,Uchar Write_date);
Uchar X24_Read(Uchar Addresshigh,Uchar Addresslow);
void X24_WritePage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Writeip);
void X24_ReadPage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *ReaDIP);
void GetPCF8563(Uchar idata *Getip);
void SetPCF8563(Uchar idata *Setip);
Uchar ReadPCF8563(Uchar AddrePCF);
void WritePCF8563(Uchar AddrePCF,Uchar PCFdata);
void SetWaring (Uchar Wyear,Uchar Wmonth,Uchar Wday);
bit CheckTime(void);
void rs232(void);
void time0(void);
/*定义一个接收的数组*/
Uchar data recdata[8];            //
Uchar idata L24cxxdata[64];        //用于读出或写入24C16的数据
Uchar idata cLOCkdata[7];        //系统时钟
Uchar pcpointer,timecount,timecount2,*gettimeip;                //用于设定从PC接收和发的指针
/*定义二个地址编码寄存器,设定地址线稳定时间,定时器2的延时时间参数,动画的时位置参数,发码结束后取消静音的时间*/
Uchar data MCaddreh,MCaddrel,MCaddtime,time2_1s,time2_10s,time2_10sx,logocol;
Uint data nomutetime;    
Uchar newbmpcount;
/*定义标志位存放的寄存器*/
Uchar bdata myflag,myflag2,bmpflag;                //定义一个用于标志寄存器存放的
sbit nomutebit = myflag^0;        //用于开始取消静音标志
sbit recpcokbit = myflag^1;        //用于设定接收到一个完整的控制指令码
sbit returnbit = myflag^2;        //用于向PC回传数据标志
sbit findokbit = myflag^3;        //寻找到明码地址
sbit sendbit = myflag^4;        //开始发码
sbit timenewbit = myflag^5;        //时钟更新标志
sbit callnewbit = myflag^6;        //有新的呼叫
sbit endnewbit=myflag^7;        //呼叫结束

sbit w24cxxbit = myflag2^0;        //设定明码表
sbit timeoutbit =myflag2^1;
sbit newtimebit = myflag2^2;    //设定新的系统时间
sbit r_lbit    = bmpflag^0;
sbit b_wbit = bmpflag^1;        //图和文字标志
sbit newbmpbit = bmpflag^2;        //更新图片
void main(void)
{    
    TH0 = 0xf8;                    //2ms
    TL0 = 0xce;
    TH1 = 0xfd;                    //以9600Baud的速率和PC机通信
    TL1 = 0xfd;    
    TH2 = 0x4c;                    //50ms
    TL2 = 0x00;
    T2CON = 0x00;
    TMOD = 0x21;                //Time0为16位,Time1为8位常数自装
    SCON = 0x50;
    IP = 0x10;
    TR0 = 1;
    TR1 = 1;
    TR2 = 1;
    time2_1s=0x14;
    time2_10s=0x0a;
    time2_10sx=0x0c;
    IE = 0x92;                    //Time0,Time2,RS232中断
    timecount = 0x64;
    timecount2 = 0x32;
    newbmpcount = 0x01;
    logocol =0;
    r_lbit =0;
    timeoutbit =0;
    b_wbit=1;
//    setadd(80);

    lcdini();
    while(1)
    {
        lcdclrall();
        HZ12disp(0x00,0x04,0x01);            //承
        HZ12disp(0x00,0x10,0x02);            //接
        HZ12disp(0x00,0x1C,0x03);            //单

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


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