求大哥们帮我看看这个程序啊,为什么显示不了时间

2019-07-15 21:15发布

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rest=P3^5;//ds1302-5
sbit dates=P3^6;//ds1302-6
sbit sclk=P3^7;//ds1302-7
sbit acc0=ACC^0;
sbit acc7=ACC^7;
//595端口
sbit  SD=P2^2;
sbit  SCK=P2^1;
sbit  RCK=P2^3;
uchar nian,yue,ri,shi,fen,miao,xingqi;
uint day1;
bit b1,b2,b3,b4,b5,time_bz,power_bz;  
uchar disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//595串入并出
void  WR1_595(uchar num1)
{
    uchar date;  
   uchar b;
   date=num1;
                                                  
  for(b=0;b<=7;b++)
    {
     if((date&0x80)==0x80)   //最高位为1,则向SDATA_595发送1
            SD=1;            //发出数据的最高位
         else  
            SD=0;
         
         date<<=1;               //左移位
         SCK=0;          
         _nop_();
         _nop_();
         SCK=1;            //产生上升沿
            }
}

/*写操作*/
void delay()
{
        uchar n;
        for(n=0;n<10;n++);
}

void write(uchar da)
{
        uchar i;
        ACC=da;
        for(i=8;i>0;i--)
        {
                dates=acc0;
                sclk=0;
                sclk=1;
                ACC>>=1;
        }
}
/*读操作*/
uchar read()
{
        uchar i;
        for(i=0;i<8;i++)
        {
                ACC>>=1;
                sclk=1;
                sclk=0;
                acc7=dates;
        }
        return(ACC);
}
/*写数据*/
void write_time(uchar address,uchar date)
{
        rest=0;
        sclk=0;
        rest=1;
        write(address);
        write(date);
        rest=0;
        sclk=1;
}
/*读数据*/

uchar read_time(uchar address)
{
        uchar temp;
        rest=0;
        sclk=0;
        rest=1;
        write(address);
        temp=read();
        rest=0;
        sclk=1;
        dates=0;   //必须加上
        return (temp);
}
          

/*=======================================*/       
void write_tt1(uchar address,uchar time)//写时间
{
        uchar temp1,temp2;
        temp1=time/10;
        temp2=time%10;
        time=(temp1<<4)|temp2;
        write_time(address,time);
}

/*==============================*/
uchar read_tt1(uchar addr)
{
                uchar temp;
                temp=read_time(addr);
                temp=temp/16*10+temp%16;
                return temp;
}
void write_tt()
{       
        write_time(0x8e,0x00);  //WP=0 写操作
        write_tt1(0x80,0x01);    //0x80是写秒数据
        write_tt1(0x82,0x01);         //0x82是写分数据
        write_tt1(0x84,0x01);         //0x82是写时数据
        write_tt1(0x86,0x01);            //0x82是写日数据
        write_tt1(0x88,0x01);         //0x82是写月数据
        write_tt1(0x8a,0x01);         //0x8a是写星期数据
        write_tt1(0x8c,0x01); //0x82是写年数据
        write_time(0x8e,0x80);   //WP=1 写保护
}
void read_tt()        //读时间
{
        fen=read_tt1(0x83);
        shi=read_tt1(0x85);
        ri=read_tt1(0x87);
        yue=read_tt1(0x89);
        nian=read_tt1(0x8d);
        xingqi=read_tt1(0x8b);       
        miao=read_tt1(0x81);

        if(miao>59)
        {
                if((miao&0x80)&&(miao&0x7f)<60)
                {
                        write_time(0x8e,0x00); //WP=0 写操作
                        write_tt1(0x80,miao&0x7f);//0x80是写秒数据
                        write_time(0x8e,0x80); //WP=1 写保护
                }
                else
                {
                        if(fen<59)
                                fen+=1;
                        write_time(0x8e,0x00); //WP=0 写操作
                        write_tt1(0x80,0x00);//0x80是写秒数据
                        write_tt1(0x82,fen);//0x80是写分数据
                        write_time(0x8e,0x80); //WP=1 写保护
                }
        }

        if(shi==0&&fen==0&&miao==0&&time_bz==0)
        {
                time_bz=1;
                day1=day1+1;
        }
        if(shi!=0&&fen!=0&&miao!=0)
                time_bz=0;       
}                  
void display()
{
RCK=0;
        WR1_595(disp_code[2]);
        WR1_595(disp_code[0]);
        //WR1_595(disp_code[nian]);
        WR1_595(disp_code[nian]);
        //WR1_595(disp_code[yue]);
        WR1_595(disp_code[yue]);
        //WR1_595(disp_code[ri]);
        WR1_595(disp_code[ri]);
        //WR1_595(disp_code[shi]);
        WR1_595(disp_code[shi]);
        //WR1_595(disp_code[fen]);
        WR1_595(disp_code[fen]);       
        WR1_595(disp_code[miao]);
        RCK=1;       
}
void main()
{
       
while(1)
{       
        write_tt();
        read_tt();
        display();
        delay();
  }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。