找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1176|回复: 2
打印 上一主题 下一主题
收起左侧

DS1307时钟芯片,代码案例求分享

[复制链接]
跳转到指定楼层
楼主
ID:339903 发表于 2021-12-3 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5黑币

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:963155 发表于 2022-1-21 09:02 | 只看该作者
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P0^5;
sbit rw=P0^6;
sbit E=P0^7;

sbit scl=P3^4;
sbit sda=P3^5;

sbit kx0=P1^0;
sbit kx1=P1^1;
sbit kx2=P1^2;
sbit kx3=P1^3;
sbit ky0=P1^4;
sbit ky1=P1^5;
sbit ky2=P1^6;
sbit ky3=P1^7;
char pos,num,key,memdata[17],wa[2],dtime[2][8];
uchar code CGCODE[]={
0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//显示年0x00
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//显示月0x01
0x0F,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00 //显示日0x02
};
char vcode[10]={'"','\'',':','w',2,1,0,'C'};
//==============================================================================
int KeyDown()
{char v,x,y;
x=4;y=4;
P1=0x0f;v=P2;
if(v!=0x0f){if(kx0==0)x=0;if(kx1==0)x=1;if(kx2==0)x=2;if(kx3==0)x=3;
             P1=0xf0;if(ky0==0)y=0;if(ky1==0)y=1;if(ky2==0)y=2;if(ky3==0)y=3;
             }
return x*4+y;
}
//################################################################
char cp,vp;
void delay(int ii){int i;for(i=0;i<ii;i++);}
void writeCmd(uchar c){E=0;rw=0;rs=0;delay(5);P2=c;delay(5);E=1;delay(5);E=0; }
void writeDat(uchar c){E=0;rw=0;rs=1;delay(5);P2=c;delay(5);E=1;delay(5);E=0;}
void clr(int ii){char i;if(ii==0){writeCmd(0x80+0x40);for(i=0;i<13;i++)writeDat(' ');}if(ii==1){writeCmd(0x80);for(i=0;i<13;i++)writeDat(' ');}}
void PrtC(char c){if(vp==13){clr(0);writeCmd(0x80+0x40);}if(vp==26){clr(1);writeCmd(0x80);vp=0;}writeDat(c);vp++;}
void PutxyC(char x,char y,uchar c){if(y>0)writeCmd(0x80+0x40+x);else writeCmd(0x80+x);writeDat(c);}
void Prtstr(char *cp){char i=0;while(cp[i]!=0){PrtC(cp[i]);i++;}}
//-------------------------------------------------------
void LM1602_Init(){writeCmd(0x38);delay(500); writeCmd(0x0f);delay(500);writeCmd(0x01);delay(500);}
//#################################################################################
void delay1(){;;}
void IIC_start(){scl=0;sda=1;scl=1;sda=0;}
void IIC_stop(){scl=0;sda=0;scl=1;sda=1;}
void IIC_respons(){int i;scl=1;while((sda==1)&&(i<250))i++;scl=0;}
void IIC_answer(){sda=0;delay1();scl=1;delay1();scl=0;}
void IIC_noanswer(){sda=1;scl=1;delay1();scl=0;}
void IIC_init(){sda=1;delay1();scl=1;delay1();}
void IIC_write_byte(uchar ci)
{char i,temp; temp=ci;
for(i=0;i<8;i++){scl=0;sda=temp&0x80;temp=temp<<1;delay1();scl=1;delay1();scl=0;}}
//--------------------------------------------------------------------------------
uchar IIC_read_byte()
{uchar i,k;
scl=0;delay1();sda=1;delay1();
for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay1();}
return k;
}
//===============================================================================
void IIC_write_addstr(char chip,uint address,char addmode,char str[])
{int i=0;
IIC_start();
IIC_write_byte(chip);IIC_respons();
if(addmode==0){IIC_write_byte(address);IIC_respons();}
else{IIC_write_byte(address>>8);IIC_respons();IIC_write_byte(address&0xff);IIC_respons();}
while(str[i]!=0){IIC_write_byte(str[i]);IIC_respons();i++;}
IIC_stop();
}
//-----------------------------------------------------------------------------------
uchar *IIC_read_addstr(char chip,uchar address,char addmode,int len,char *cp)
{uchar i,dat;
  IIC_start(); IIC_write_byte(chip);IIC_respons();
  if(addmode==0){IIC_write_byte(address);IIC_respons();}
  else{IIC_write_byte(address>>8);IIC_respons();IIC_write_byte(address&0xff);IIC_respons();}
  IIC_start(); IIC_write_byte(chip+1);IIC_respons();
  for(i=0;i<len;i++){cp[i]=IIC_read_byte();if(i==(len-1))IIC_noanswer();else IIC_answer();} IIC_stop();
  return cp;
  }
void showdatetime()
{ char i;
  for(i=0;i<8;i++)dtime[1][i]=dtime[0][i];
  PrtC(dtime[0][6]/16+0x30);PrtC(dtime[0][6]%16+0x30);PrtC(0);
  PrtC(dtime[0][5]/16+0x30);PrtC(dtime[0][5]%16+0x30);PrtC(1);
  PrtC(dtime[0][4]/16+0x30);PrtC(dtime[0][4]%16+0x30);PrtC(2);
  PrtC(dtime[0][3]/16+0x30);PrtC(dtime[0][3]%16+0x30);PrtC('W');
  PrtC(dtime[0][2]/16+0x30);PrtC(dtime[0][2]%16+0x30);PrtC(':');
  PrtC(dtime[0][1]/16+0x30);PrtC(dtime[0][1]%16+0x30);PrtC('\'');
  PrtC(dtime[0][0]/16+0x30);PrtC(dtime[0][0]%16+0x30);PrtC('"');
  num=(dtime[1][pos]/16)*10+dtime[1][pos]%16;
}
void showitem()
{writeCmd(0x80+15);
writeDat(vcode[pos]);
num=(dtime[1][pos]/16)*10+dtime[1][pos]%16;
PutxyC(14,1,num/10+0x30);
writeDat(num%10+0x30);
}
void showedit()
{dtime[1][pos]=num/10*16+num%10;
  PutxyC(14,1,num/10+0x30);
  writeDat(num%10+0x30);
}
//################################################################
void main()
{char i,j;
pos=0;num=0;
  writeCmd(0x38);
  writeCmd(0x0f);
  writeCmd(0x40);
  for(i=0;i<24;i++)writeDat(CGCODE[i]);
  j=rand()%16;
  IIC_read_addstr(0xa0,j*16,1,16,memdata);
  for(i=0;i<13;i++)PrtC(memdata[i]);
  IIC_read_addstr(0xd0,0,0,7,dtime[0]);showdatetime();
  PutxyC(13,0,'|');PutxyC(13,1,'|');showitem();
  while(1)
  {key=KeyDown();
   if((key>=0)&&(key<16))
           {while(KeyDown()==key);P0=key;
                    if(key==0){IIC_write_addstr(0xd0,0x07,1,"\x10");}
            if(key==1){wa[0]=num/10*16+num%10;wa[1]=0;IIC_write_addstr(0xd0,pos,0,wa);}
                        if(key==2){;}
            if(key==3){IIC_read_addstr(0xd0,0,0,7,dtime[0]);showdatetime();showedit();}
                        if(key==4){pos++;if(pos==8)pos=0;showitem();}
                        if(key==5){pos--;if(pos<0)pos=7;showitem();}
                        if(key==6){num++;showedit();}
            if(key==7){if(num>0)num--;showedit();}

            if(key== 8){for(j=0;j<16;j++){IIC_write_addstr(0xa0,j*16,1,"aaaaaaaaaaaaaaaa");delay(500);}Prtstr("aOK");}
            if(key== 9){for(j=0;j<16;j++){IIC_write_addstr(0xa0,j*16,1,"bbbbbbbbbbbbbbbb");delay(500);}Prtstr("bOK");}
                        if(key==10){for(j=0;j<16;j++){IIC_write_addstr(0xa0,j*16,1,"cccccccccccccccc");delay(500);}Prtstr("cOK");}
                        if(key==11){for(j=0;j<4;j++){IIC_read_addstr(0xa0,j*16,1,16,memdata);for(i=0;i<13;i++)PrtC(memdata[i]);delay(500);}}

            if(key==12){}
            if(key==13){}
                        if(key==14){for(i=0;i<16;i++)PrtC(i+0x30);delay(3000);}
                        if(key==15){LM1602_Init();vp=0;}
                        }
   };
}
回复

使用道具 举报

板凳
ID:276663 发表于 2022-1-21 10:03 | 只看该作者
DS1307是5V供电的注意一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表