51+DS1302+DS18B20+LCD1602-显示时间-温度-å�¯è°ƒæ—?- 百度文库 ÏÂÔØ±¾ÎÄ

}

void init() { uchar num; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); delay(5); write_com(0x80); for(num=0;num<15;num++) { write_date(table[num]); delay(5);

}

write_com(0x80+0x40); for(num=0;num<15;num++) { write_date(table1[num]);

delay(5);

}

}

void Write1302(uchar dat) {

5

uchar i;

SCLK=0; //À­µÍSCLK£¬ÎªÂö³åÉÏÉýÑØÐ´ÈëÊý¾Ý×öºÃ×¼±¸ delay1(2); //ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸ for(i=0;i<8;i++) //Á¬ÐøÐ´8¸ö¶þ½øÖÆÎ»Êý¾Ý {

DATA=dat&0x01; //È¡³ödatµÄµÚ0λÊý¾ÝдÈë1302 delay(2); //ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸ SCLK=1; //ÉÏÉýÑØÐ´ÈëÊý¾Ý delay1(2); //ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸ SCLK=0; //ÖØÐÂÀ­µÍSCLK£¬ÐγÉÂö³å

dat>>=1; //½«datµÄ¸÷Êý¾ÝλÓÒÒÆ1λ£¬×¼±¸Ð´ÈëÏÂÒ»¸öÊý¾Ýλ } }

void WriteSet1302(uchar Cmd,uchar dat) {

RST=0; //½ûÖ¹Êý¾Ý´«µÝ

SCLK=0; //È·±£Ð´Êý¾ÓǰSCLK±»À­µÍ RST=1; //Æô¶¯Êý¾Ý´«Êä

delay1(2); //ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸ Write1302(Cmd); //дÈëÃüÁî×Ö Write1302(dat); //дÊý¾Ý

SCLK=1; //½«Ê±ÖÓµçÆ½ÖÃÓÚÒÑ֪״̬ RST=0; //½ûÖ¹Êý¾Ý´«µÝ }

uchar Read1302(void)

6

{

uchar i,dat;

delay(2); //ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸ for(i=0;i<8;i++) //Á¬Ðø¶Á8¸ö¶þ½øÖÆÎ»Êý¾Ý {

dat>>=1; //½«datµÄ¸÷Êý¾ÝλÓÒÒÆ1룬ÒòΪÏȶÁ³öµÄÊÇ×Ö½ÚµÄ×îµÍλ if(DATA==1) //Èç¹û¶Á³öµÄÊý¾ÝÊÇ1 dat|=0x80; //½«1È¡³ö£¬Ð´ÔÚdatµÄ×î¸ßλ SCLK=1; //½«SCLKÖÃÓÚ¸ßµçÆ½£¬ÎªÏ½µÑضÁ³ö delay1(2); //ÉÔ΢µÈ´ý

SCLK=0; //À­µÍSCLK£¬ÐγÉÂö³åϽµÑØ delay1(2); //ÉÔ΢µÈ´ý }

return dat; //½«¶Á³öµÄÊý¾Ý·µ»Ø }

uchar ReadSet1302(uchar Cmd) {

uchar dat;

RST=0; //À­µÍRST

SCLK=0; //È·±£Ð´Êý¾ÓǰSCLK±»À­µÍ RST=1; //Æô¶¯Êý¾Ý´«Êä Write1302(Cmd); //дÈëÃüÁî×Ö dat=Read1302(); //¶Á³öÊý¾Ý

SCLK=1; //½«Ê±ÖÓµçÆ½ÖÃÓÚÒÑ֪״̬ RST=0; //½ûÖ¹Êý¾Ý´«µÝ

7

return dat; //½«¶Á³öµÄÊý¾Ý·µ»Ø }

void Init_DS1302(void) {

WriteSet1302(0x8E,0x00); //¸ù¾Ýд״̬¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë²»±£»¤Ö¸Áî WriteSet1302(0x80,((0/10)<<4|(0))); //¸ù¾ÝдÃë¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëÃëµÄ³õʼֵ WriteSet1302(0x82,((45/10)<<4|(45))); //¸ù¾Ýд·Ö¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë·ÖµÄ³õʼֵ WriteSet1302(0x84,((15/10)<<4|(15))); //¸ù¾ÝдСʱ¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëСʱµÄ³õʼֵ WriteSet1302(0x86,((29/10)<<4|(29))); //¸ù¾ÝдÈռĴæÆ÷ÃüÁî×Ö£¬Ð´ÈëÈյijõʼֵ WriteSet1302(0x88,((11/10)<<4|(11))); //¸ù¾ÝдÔ¼ĴæÆ÷ÃüÁî×Ö£¬Ð´ÈëÔµijõʼֵ WriteSet1302(0x8c,((10/10)<<4|(10))); //nian WriteSet1302(0x8a,((4/10)<<4|(4))); }

void DisplaySecond(uchar x) {

uchar i,j; i=x/10; j=x;

write_com(0xc7); write_date(0x30+i); write_date(0x30+j); }

void DisplayMinute(uchar x) {

uchar i,j; i=x/10;

8