微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于ds1302的电子日历系统

基于ds1302的电子日历系统

时间:09-19 来源:互联网 点击:

  #define er 0x80+0x40

  sbit DQ = P3^5;

  sbit RS=P1^7;

  sbit E=P2^4;

  sbit RW=P1^6;

  sbit IO=P1^5;

  sbit SCLK=P1^4;

  sbit RST=P2^2;

  sbit ACC0=ACC^0;

  sbit ACC7=ACC^7;

  sbit key1=P1^0;

  sbit key2=P1^2;

  sbit key3=P1^3;

  uchar code tab1[]={"20 - - "};

  uchar code tab2[]={" : : "};

  void delay(uint xms)

  {

  uint x,y;

  for(x=xms;x》0;x--) ;

  for(y=110;y》0;y--);

  }

  //液晶写入指令函数

  write_1602com(uchar com)

  {

  RS=0;

  RW=0;

  P0=com;

  delay(1);

  E=1;

  delay(1);

  E=0;

  }

  //液晶写入数据函数

  write_1602dat(uchar dat)

  {

  RS=1;

  RW=0;

  P0=dat;

  delay(1);

  E=1;

  delay(1);

  E=0;

  }

  //液晶初始化函数

  lcd_init()

  {

  write_1602com(0x38);

  write_1602com(0x0c);

  write_1602com(0x06);

  write_1602com(0x01);

  write_1602com(yh+1);

  for(a=0;a《14;a++)

  {

  write_1602dat(tab1[a]);

  delay(3);

  }

  write_1602com(er+2);

  for(a=0;a《8;a++)

  {

  write_1602dat(tab2[a]);

  delay(3);

  }

  }

  /***************DS1302有关子函数********************/

  //写一个字节

  void write_byte(uchar dat)

  {

  ACC=dat;

  RST=1;

  for(a=8;a》0;a--)

  {

  IO=ACC0;

  SCLK=0;

  SCLK=1;

  ACC=ACC》》1;

  }

  }

  //读一个字节

  uchar read_byte()

  {

  RST=1;

  for(a=8;a》0;a--)

  {

  ACC7=IO;

  SCLK=1;

  SCLK=0;

  ACC=ACC》》1;

  }

  return (ACC);

  }

  //向1302芯片写函数,指定写入地址,数据

  void write_1302(uchar add,uchar dat)

  {

  RST=0;

  SCLK=0;

  RST=1;

  write_byte(add);

  write_byte(dat);

  SCLK=1;

  RST=0;

  }

  //从1302读数据函数,指定读取数据来源地址

  uchar read_1302(uchar add)

  {

  uchar temp;

  RST=0;

  SCLK=0;

  RST=1;

  write_byte(add);

  temp=read_byte(); SCLK=1;

  RST=0; return(temp);

  }

  //BCD码转十进制函数,输入BCD,返回十进制

  uchar BCD_Decimal(uchar bcd)

  {

  uchar Decimal;

  Decimal=bcd》》4;

  return(Decimal=Decimal*10+(bcd&=0x0F));

  }

  //1302芯片初始化子函数(2012-06-26,00:00:00,week2)

  void ds1302_init()

  {

  RST=0;

  SCLK=0;

  write_1302(0x8e,0x00);

  write_1302(0x80,0x00);

  write_1302(0x82,0x00);

  write_1302(0x84,0x00);

  write_1302(0x8a,0x02);

  write_1302(0x86,0x26);

  write_1302(0x88,0x06);

  write_1302(0x8c,0x12);

  write_1302(0x8e,0x80);

  }

  //时分秒显示子函数

  void write_sfm(uchar add,uchar dat)

  {

  uchar gw,sw;

  gw=dat%10;

  sw=dat/10;

  write_1602com(er+add);

  write_1602dat(0x30+sw);

  write_1602dat(0x30+gw);

  }

  //年月日显示子函数

  void write_nyr(uchar add,uchar dat)

  {

  uchar gw,sw;

  gw=dat%10;

  sw=dat/10;

  write_1602com(yh+add);

  write_1602dat(0x30+sw);

  write_1602dat(0x30+gw);

  }

  //写星期函数

  void write_week(uchar week)

  {

  write_1602com(yh+0x0c);

  switch(week

  {

  case 1:

  write_1602dat(‘M’);

  write_1602dat(‘O’);

  write_1602dat(‘N’);

  break;

  case 2:

  write_1602dat(‘T’);

  write_1602dat(‘U’);

  write_1602dat(‘E’);

  break;

  case 3:

  write_1602dat(‘W’);

  write_1602dat(‘E’);

  write_1602dat(‘D’);

  break;

  case 4:

  write_1602dat(‘T’

  write_1602dat(‘H’);

  write_1602dat(‘U’);

  break;

  case 5:

  write_1602dat(‘F’);

  write_1602dat(‘R’);

  write_1602dat(‘I’);

  break;

  case 6:

  write_1602dat(‘S’);

  write_1602dat(‘T’);

  write_1602dat(‘A’);

  break;

  case 7:

  write_1602dat(‘S’);

  write_1602dat(‘U’);

writ

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top