爱问知识人 爱问教育 医院库

基于单片机和ds1302的万年历程序(其实只有时分秒)程序中缺少手动调节时间后再写入1302的程序,

首页

基于单片机和ds1302的万年历程序(其实只有时分秒)程序中缺少手动调节时间后再写入1302的程序,

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit jiak=P2^3;
sbit youyik=P2^2;
sbit zuoyik=P2^1;
sbit jiank=P2^0;
sbit int1k=P3^3;
sbit CLK=P3^5;//1302时钟信号线
sbit IO=P3^6;//1302的I/O数据线
sbit RST=P3^7;//1302的RST复位线
void InputByte(uchar);//输入1Byte
uchar OutputByte(uchar);//输出1Byte
void W1302(uchar,uchar);
uchar R1302(uchar);
uchar tab[6];
void display();
uchar a,c,i,b,m;//c表示中断次数a表示数码管移位次数
uint temp;
uchar tab1[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06};
uchar code tab2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90}; 
//延时1ms
void delay(uint z)
{
 uint x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
//往1302写入1Byte d为写入的数据入口参数
void InputByte(uchar date)
{
 uchar i;
 ACC=date;
 for(i=8;i>0;i--)
 {
  IO=ACC0;//相当于汇编中的RRC
  CLK=1;
  CLK=0;
  ACC=ACC>>1;
 }
}
//从1302读取1Byte数据返回值ACC
uchar OutputByte(void)
{
 uchar i;
 for(i=8;i>0;i--)
 {
  ACC=ACC>>1;
  ACC7=IO;
  CLK=1;
  CLK=0;
 }
 return(ACC);
}
//往1302写入数据先写地址后写数据 ucADD ucDA是入口参数
void W1302(uchar addr,uchar date)
{
 RST=0;
 CLK=0;
 RST=1;
 InputByte(addr);//写地址
 InputByte(date);//写1Byte数据
 CLK=1;
 RST=0;
}  
//读取1302某地址的数据 先写地址 后读数据 ucAddr入口地址 ucDa是返回值
uchar R1302(uchar addr)
{
 uchar date;
 RST=0;
 CLK=0;
 RST=1;
 InputByte(addr);//写地址
 date=OutputByte();//读1Byte数据
 CLK=1;
 RST=0;
 return(date);
}
void display()
{
 uchar addr=0x80;
 if(int1k==0)   //扫描p3
 {
  delay(20);
  if(int1k==0)
  {
   while(!int1k);
   a=0;
   c++;
   if(c==2)c=0;
  }
 }
 if(c==1)
 {
  if(youyik==0)          //扫描键盘
  {
   delay(20);
   if(youyik==0)
   {
    while(!youyik);
     a++;
     if( a==6) a=0;
   }
  }
  if(zuoyik==0)
  {
   delay(20);
   if(zuoyik==0)
   {
    while(!zuoyik);
    if( a==0)
     a=6;
     a--;
   }
  }
  for(i=0;i<6;i++)  //这个循环是个关键
  {
   if( a==i)
   {
    SBUF=0xff;
    b=a;
   }
    else SBUF=tab2[tab[i]];
   while(!TI);
   TI=0;
  }
  delay(100);
  if(b==a)
  {
   if(jiak==0)
   {
    delay(20);
    if(jiak==0)
    {
     while(!jiak);
     tab[b]++;
     if(tab[b]==10)tab[b]=0;
     
    }
   }
   if(jiank==0)
   {
    delay(20);
    if(jiank==0)
    {
     while(!jiank);
     if(tab[b]==0)tab[b]=10;
     tab[b]--; 
    }
   }
   }
 }
  for(i=0;i<6;i++)
  {
   
   SBUF=tab2[tab[i]];
   while(!TI);
   TI=0;
  }
  delay(50);
}
void main()
{
 uchar miao,fen,shi;
 uchar Curtime[7];
 uchar i1;
 uchar addr=0x80;
 W1302(0x8e,0x00);//控制命令字节WP=0 写操作
 for(i1=0;i1<7;i1++)
 {
  W1302(addr,tab1[i1]);//秒分时日月星期年
  addr+=2;
 }
 W1302(0x8e,0x80);//控制命令字节WP=1写保护
 while(1)
 {
  if(c==1)
  display();
  else
  {
   uchar i2;
   uchar addr=0x81;
   for(i2=0;i2<7;i2++)
   {
    Curtime[i2]=R1302(addr);//格式秒分时日月星期年
    addr+=2;
   }
   miao=Curtime[0];
   fen=Curtime[1];
   shi=Curtime[2];
   tab[5]=miao%16;
   tab[4]=miao/16;
   tab[3]=fen%16;
   tab[2]=fen/16;
   tab[1]=shi%16;
   tab[0]=shi/16;
   display();
    }
 }
}

提交回答

类似问题

相关推荐

正在加载...
最新资料 推荐信息 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):