久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1280|回復: 1
打印 上一主題 下一主題
收起左側

16*64 89C58 LED時鐘

[復制鏈接]
跳轉到指定樓層
樓主
ID:371859 發表于 2018-7-15 10:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define  NOP() { _nop_();_nop_();_nop_();_nop_();}

sbit mm=P0^0;
sbit min=P0^1;
sbit hh=P0^2;
sbit zhuokey=P0^3;
sbit rikey=P0^4;
sbit DAT=P1^4;
sbit CLK=P1^5;
sbit stcp=P1^7;
sbit SCLK = P0^7;  //1302
sbit DSIO = P0^6;  //1302DATA
sbit RST=P0^5; //1302CE

uint num,num1,aa,f;
uchar zhuo,shi,fen,miao;

uchar code taba[]={0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
,0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF};
uchar code tab11[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar code tab0[]={0,0,0,0,0,0,24,24,36,36,66,66,66,66,66,66,66,66,66,66,66,66,36,36,24,24,0,0,0,0,0,0};  //大字0--9
uchar code tab1[]={0,0,0,0,0,0,8,8,14,14,8,8,8,8,8,8,8,8,8,8,8,8,8,8,62,62,0,0,0,0,0,0};
uchar code tab2[]={0,0,0,0,0,0,60,60,66,66,66,66,64,64,32,32,16,16,8,8,4,4,66,66,126,126,0,0,0,0,0,0};
uchar code tab3[]={0,0,0,0,0,0,60,60,66,66,66,66,32,32,24,24,32,32,64,64,66,66,66,66,60,60,0,0,0,0,0,0};
uchar code tab4[]={0,0,0,0,0,0,16,16,16,16,24,24,20,20,18,18,18,18,126,126,16,16,16,16,120,120,0,0,0,0,0,0};
uchar code tab5[]={0,0,0,0,0,0,126,126,2,2,2,2,58,58,70,70,64,64,64,64,66,66,66,66,60,60,0,0,0,0,0,0};
uchar code tab6[]={0,0,0,0,0,0,56,56,36,36,2,2,2,2,58,58,70,70,66,66,66,66,66,66,60,60,0,0,0,0,0,0};
uchar code tab7[]={0,0,0,0,0,0,126,126,34,34,34,34,16,16,16,16,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0};
uchar code tab8[]={0,0,0,0,0,0,60,60,66,66,66,66,66,66,60,60,36,36,66,66,66,66,66,66,60,60,0,0,0,0,0,0};
uchar code tab9[]={0,0,0,0,0,0,28,28,34,34,66,66,66,66,98,98,92,92,64,64,64,64,34,34,30,30,0,0,0,0,0,0};
uchar code tabb[]={0,0,0,0,0,0,0,0,24,0,24,0,0,0,0,0,0,0,0,0,0,0,24,0,24,0,0,0,0,0,0,0};                                           //:
uchar code tab33[]={0,16,252,63,132,16,228,19,132,16,244,23,4,16,228,19,36,18,36,18,228,19,36,18,2,20,1,8,0,0,0,0};          //周
uchar code tab40[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,36,36,36,36,36,36,36,36,36,36,24,24};                 //小字0--9
uchar code tab41[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,12,12,8,8,8,8,8,8,8,8,28,28};
uchar code tab42[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,36,36,32,32,16,16,8,8,4,4,60,60};
uchar code tab43[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,36,36,32,32,24,24,32,32,36,36,24,24};
uchar code tab44[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,24,24,20,20,18,18,62,62,16,16,16,16};
uchar code tab45[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,60,4,4,28,28,32,32,32,32,36,36,24,24};
uchar code tab46[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,28,2,2,2,2,30,30,34,34,34,34,28,28};
uchar code tab47[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,60,16,16,16,16,8,8,8,8,8,8,8,8};
uchar code tab48[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,36,36,36,36,24,24,36,36,36,36,24,24};
uchar code tab49[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,36,36,36,36,56,56,32,32,32,32,24,24};
uchar code tab50[]={8,0,8,8,248,31,132,0,130,0,249,15,136,0,136,0,136,16,255,63,128,0,128,0,128,0,128,0,0,0,0,0};//年
uchar code tab51[]={0,0,240,15,16,8,16,8,240,15,16,8,16,8,16,8,240,15,16,8,16,8,8,8,4,10,2,4,0,0,0,0};//月
uchar code tab10[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void delay1ms(uint e);
void dsq();
void xianshi();
void xianshi1();
void shijianchuli();
void anjian();
void sendbyte();
void Ds1302Write(uchar addr, uchar dat);
uchar Ds1302Read(uchar addr);
void Ds1302Init();
void Ds1302ReadTime();

extern uchar TIME[7];

uchar DisplayData[8];
uchar code READ_1302_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};         //---DS1302寫入和讀取時分秒的地址命令---//
uchar code WRITE_1302_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};         //---秒分時日月周年 最低位讀寫位;-------//
uchar TIME[7] = {0x00, 0x14, 0x21, 0x11, 0x12, 0x06, 0x16};        //---DS1302時鐘初始化2013年1月1日星期二12點00分00秒。---////---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//

void Ds1302Write(uchar addr, uchar dat)
{
        uchar n;
        RST = 0;
          NOP();

        SCLK = 0;//先將SCLK置低電平。
          NOP();
        RST = 1; //然后將RST(CE)置高電平。
          NOP();

        for (n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                  NOP();
                SCLK = 0;
                  NOP();
        }
        for (n=0; n<8; n++)//寫入8位數據
        {
                DSIO = dat & 0x01;
                dat >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                  NOP();
                SCLK = 0;
                  NOP();       
        }       
                 
        RST = 0;//傳送數據結束
          NOP();
}

uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        NOP();

        SCLK = 0;//先將SCLK置低電平。
        NOP();
        RST = 1;//然后將RST(CE)置高電平。
        NOP();

        for(n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                NOP();
                SCLK = 0;//DS1302下降沿時,放置數據
                NOP();
        }
        NOP();
        for(n=0; n<8; n++)//讀取8位數據
        {
                dat1 = DSIO;//從最低位開始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                NOP();
                SCLK = 0;//DS1302下降沿時,放置數據
                NOP();
        }

        RST = 0;
    NOP();        //以下為DS1302復位的穩定時間,必須的。
        SCLK = 1;
        NOP();
        DSIO = 0;
        NOP();
        DSIO = 1;
        NOP();
        return dat;       
}
//uchar BCD_Decimal(uchar bcd) //BCD碼轉十進制函數,輸入BCD,返回十進制
//   {
//    uchar Decimal;
//    Decimal=bcd>>4;
//    return(Decimal=Decimal*10+(bcd&=0x0F));
//    }
uchar BCD_Decimal(uchar bcd)
     {
      return bcd/16*10+bcd%16;
      }

void Ds1302Init()
{
        uchar n;
        Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
        for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
        {
                Ds1302Write(WRITE_1302_ADDR[n],TIME[n]);       
        }
        Ds1302Write(0x8E,0x80);                 //打開寫保護功能
}

void Ds1302ReadTime()
{
        uchar n;
        for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
        {
                TIME[n] = Ds1302Read(READ_1302_ADDR[n]);
        }
               
}

void main()
{  
   Ds1302Init();       
   if(mm==0&min==0&hh==0){Ds1302Init();}
   while(1)
  {
   Ds1302ReadTime();
   if((TIME[0]/16*10+TIME[0]%16)%10==5|(TIME[0]/16*10+TIME[0]%16)%10==6|(TIME[0]/16*10+TIME[0]%16)%10==7){xianshi1();}
   else{xianshi();}
   anjian();
   }
   }




void sendbyte(uchar num1)   
{
  for(f=0;f<8;f++)
        {
  DAT=num1&0x01;
  num1>>=1;
  CLK=0;
  NOP();
  CLK=1;
  NOP();
        }
}


void xianshi()
{
  uchar i,temp,temp1;
   for(i=0;i<16;i++)
   {       
        temp1=BCD_Decimal(TIME[2]);
                temp=temp1/10%10 ;
                switch(temp)
                {
          case 0:sendbyte(tab0[i*2]);break;
                  case 1:sendbyte(tab1[i*2]);break;
                  case 2:sendbyte(tab2[i*2]);break;
                  case 3:sendbyte(tab3[i*2]);break;
                  case 4:sendbyte(tab4[i*2]);break;
                  case 5:sendbyte(tab5[i*2]);break;
                  case 6:sendbyte(tab6[i*2]);break;
                  case 7:sendbyte(tab7[i*2]);break;
                  case 8:sendbyte(tab8[i*2]);break;
                  case 9:sendbyte(tab9[i*2]);break;
           }
        temp=temp1%10;
            switch(temp)
                {
          case 0:sendbyte(tab0[i*2+1]);break;
                  case 1:sendbyte(tab1[i*2+1]);break;
                  case 2:sendbyte(tab2[i*2+1]);break;
                  case 3:sendbyte(tab3[i*2+1]);break;
                  case 4:sendbyte(tab4[i*2+1]);break;
                  case 5:sendbyte(tab5[i*2+1]);break;
                  case 6:sendbyte(tab6[i*2+1]);break;
                  case 7:sendbyte(tab7[i*2+1]);break;
                  case 8:sendbyte(tab8[i*2+1]);break;
                  case 9:sendbyte(tab9[i*2+1]);break;
           }
             temp1=BCD_Decimal(TIME[0]);
          if(temp1%10%2==0){sendbyte(tabb[i*2]);}
                  else{
          sendbyte(tab10[i*2]);}

        temp1=BCD_Decimal(TIME[1]);
                temp=temp1/10%10 ;
                switch(temp)
                {
          case 0:sendbyte(tab0[i*2]);break;
                  case 1:sendbyte(tab1[i*2]);break;
                  case 2:sendbyte(tab2[i*2]);break;
                  case 3:sendbyte(tab3[i*2]);break;
                  case 4:sendbyte(tab4[i*2]);break;
                  case 5:sendbyte(tab5[i*2]);break;
                  case 6:sendbyte(tab6[i*2]);break;
                  case 7:sendbyte(tab7[i*2]);break;
                  case 8:sendbyte(tab8[i*2]);break;
                  case 9:sendbyte(tab9[i*2]);break;
           }
        temp=temp1%10;
                         switch(temp)
                {
          case 0:sendbyte(tab0[i*2+1]);break;
                  case 1:sendbyte(tab1[i*2+1]);break;
                  case 2:sendbyte(tab2[i*2+1]);break;
                  case 3:sendbyte(tab3[i*2+1]);break;
                  case 4:sendbyte(tab4[i*2+1]);break;
                  case 5:sendbyte(tab5[i*2+1]);break;
                  case 6:sendbyte(tab6[i*2+1]);break;
                  case 7:sendbyte(tab7[i*2+1]);break;
                  case 8:sendbyte(tab8[i*2+1]);break;
                  case 9:sendbyte(tab9[i*2+1]);break;
           }

                temp1=BCD_Decimal(TIME[0]);
                temp=temp1/10%10;
                         switch(temp)
                {
          case 0:sendbyte(tab40[i*2]);break;
                  case 1:sendbyte(tab41[i*2]);break;
                  case 2:sendbyte(tab42[i*2]);break;
                  case 3:sendbyte(tab43[i*2]);break;
                  case 4:sendbyte(tab44[i*2]);break;
                  case 5:sendbyte(tab45[i*2]);break;
                  case 6:sendbyte(tab46[i*2]);break;
                  case 7:sendbyte(tab47[i*2]);break;
                  case 8:sendbyte(tab48[i*2]);break;
                  case 9:sendbyte(tab49[i*2]);break;
           }
        temp=temp1%10;
                    switch(temp)
                {
          case 0:sendbyte(tab40[i*2+1]);break;
                  case 1:sendbyte(tab41[i*2+1]);break;
                  case 2:sendbyte(tab42[i*2+1]);break;
                  case 3:sendbyte(tab43[i*2+1]);break;
                  case 4:sendbyte(tab44[i*2+1]);break;
                  case 5:sendbyte(tab45[i*2+1]);break;
                  case 6:sendbyte(tab46[i*2+1]);break;
                  case 7:sendbyte(tab47[i*2+1]);break;
                  case 8:sendbyte(tab48[i*2+1]);break;
                  case 9:sendbyte(tab49[i*2+1]);break;
                  }

                  sendbyte(tab33[i*2]);
                  sendbyte(tab33[i*2+1]);

                  temp1=BCD_Decimal(TIME[5]);
                  temp=temp1%10;
                  switch(temp)
                  {
                   case 7: sendbyte(tab1[i*2+1]);break;
                   case 1: sendbyte(tab2[i*2+1]);break;
                   case 2: sendbyte(tab3[i*2+1]);break;
                   case 3: sendbyte(tab4[i*2+1]);break;
                   case 4: sendbyte(tab5[i*2+1]);break;
                   case 5: sendbyte(tab6[i*2+1]);break;
                   case 6: sendbyte(tab7[i*2+1]);break;
//                   case 7: sendbyte(tab7[i*2+1]);break;
                     }

        stcp=0;
    NOP();
        stcp=1;
    NOP();
    P1=taba[i];
        }
   }


void xianshi1()
{
  uchar i,temp,temp1;
   for(i=0;i<16;i++)
   {       
        temp1=BCD_Decimal(TIME[6]);
                temp=temp1/10%10 ;
                switch(temp)
                {
          case 0:sendbyte(tab0[i*2]);break;
                  case 1:sendbyte(tab1[i*2]);break;
                  case 2:sendbyte(tab2[i*2]);break;
                  case 3:sendbyte(tab3[i*2]);break;
                  case 4:sendbyte(tab4[i*2]);break;
                  case 5:sendbyte(tab5[i*2]);break;
                  case 6:sendbyte(tab6[i*2]);break;
                  case 7:sendbyte(tab7[i*2]);break;
                  case 8:sendbyte(tab8[i*2]);break;
                  case 9:sendbyte(tab9[i*2]);break;
           }
        temp=temp1%10;
            switch(temp)
                {
          case 0:sendbyte(tab0[i*2+1]);break;
                  case 1:sendbyte(tab1[i*2+1]);break;
                  case 2:sendbyte(tab2[i*2+1]);break;
                  case 3:sendbyte(tab3[i*2+1]);break;
                  case 4:sendbyte(tab4[i*2+1]);break;
                  case 5:sendbyte(tab5[i*2+1]);break;
                  case 6:sendbyte(tab6[i*2+1]);break;
                  case 7:sendbyte(tab7[i*2+1]);break;
                  case 8:sendbyte(tab8[i*2+1]);break;
                  case 9:sendbyte(tab9[i*2+1]);break;
           }

         sendbyte(tab50[i*2]);
                   sendbyte(tab50[i*2+1]);

        temp1=BCD_Decimal(TIME[4]);
                temp=temp1/10%10 ;
                switch(temp)
                {
          case 0:sendbyte(tab0[i*2]);break;
                  case 1:sendbyte(tab1[i*2]);break;
                  case 2:sendbyte(tab2[i*2]);break;
                  case 3:sendbyte(tab3[i*2]);break;
                  case 4:sendbyte(tab4[i*2]);break;
                  case 5:sendbyte(tab5[i*2]);break;
                  case 6:sendbyte(tab6[i*2]);break;
                  case 7:sendbyte(tab7[i*2]);break;
                  case 8:sendbyte(tab8[i*2]);break;
                  case 9:sendbyte(tab9[i*2]);break;
           }
        temp=temp1%10;
                         switch(temp)
                {
          case 0:sendbyte(tab0[i*2+1]);break;
                  case 1:sendbyte(tab1[i*2+1]);break;
                  case 2:sendbyte(tab2[i*2+1]);break;
                  case 3:sendbyte(tab3[i*2+1]);break;
                  case 4:sendbyte(tab4[i*2+1]);break;
                  case 5:sendbyte(tab5[i*2+1]);break;
                  case 6:sendbyte(tab6[i*2+1]);break;
                  case 7:sendbyte(tab7[i*2+1]);break;
                  case 8:sendbyte(tab8[i*2+1]);break;
                  case 9:sendbyte(tab9[i*2+1]);break;
           }

         sendbyte(tab51[i*2]);
                 sendbyte(tab51[i*2+1]);

                temp1=BCD_Decimal(TIME[3]);
                temp=temp1/10%10;
                         switch(temp)
                {
          case 0:sendbyte(tab0[i*2]);break;
                  case 1:sendbyte(tab1[i*2]);break;
                  case 2:sendbyte(tab2[i*2]);break;
                  case 3:sendbyte(tab3[i*2]);break;
                  case 4:sendbyte(tab4[i*2]);break;
                  case 5:sendbyte(tab5[i*2]);break;
                  case 6:sendbyte(tab6[i*2]);break;
                  case 7:sendbyte(tab7[i*2]);break;
                  case 8:sendbyte(tab8[i*2]);break;
                  case 9:sendbyte(tab9[i*2]);break;
           }
        temp=temp1%10;
                    switch(temp)
                {
          case 0:sendbyte(tab0[i*2+1]);break;
                  case 1:sendbyte(tab1[i*2+1]);break;
                  case 2:sendbyte(tab2[i*2+1]);break;
                  case 3:sendbyte(tab3[i*2+1]);break;
                  case 4:sendbyte(tab4[i*2+1]);break;
                  case 5:sendbyte(tab5[i*2+1]);break;
                  case 6:sendbyte(tab6[i*2+1]);break;
                  case 7:sendbyte(tab7[i*2+1]);break;
                  case 8:sendbyte(tab8[i*2+1]);break;
                  case 9:sendbyte(tab9[i*2+1]);break;
                  }



        stcp=0;
    NOP();
        stcp=1;
    NOP();
    P1=taba[i];
        }
   }

void anjian()
{   uchar temp;
    if(min==0)
    {
    delay1ms(5);
    if(min==0){num++;}
    if(num==20){num=0;fen++;}
    if(fen==60){fen=0;}
        temp=fen/10*16+fen%10;         //10轉16進制BCD
        Ds1302Write(0x8E,0X00);       
        Ds1302Write(0x82,temp) ;
        Ds1302Write(0x8E,0x80);
        }
   if(hh==0)
  {
   delay1ms(5);
   if(hh==0){num++;}
   if(num==20){num=0;shi++;}
   if(shi==24){shi=0;}
   temp=shi/10*16+shi%10;
           Ds1302Write(0x8E,0X00);       
        Ds1302Write(0x84,temp) ;
        Ds1302Write(0x8E,0x80);
   }
   if(mm==0)
   {
   delay1ms(5);
   if(mm==0){miao=0;}
    Ds1302Write(0x8E,0X00);       
        Ds1302Write(0x80,miao) ;
        Ds1302Write(0x8E,0x80);
   }
   if(zhuokey==0)
   {
   delay1ms(30);
   if(zhuokey==0){num++;}
   if(num==20){num=0;zhuo++;}
   if(zhuo==7){zhuo=1;}
    Ds1302Write(0x8E,0X00);       
        Ds1302Write(0x8a,zhuo) ;
        Ds1302Write(0x8E,0x80);
   }
   }

void delay1ms(uint e)
{
uchar a,b,c,d;
for(d=e;d>0;d--)
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2018-7-15 16:46 | 只看該作者
此貼補全原理圖后可獲得積分
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品在线| 欧美自拍视频 | 精品日韩一区二区三区av动图 | 黄色一级网 | 亚洲欧洲日韩 | 一区二区视频 | 久久99深爱久久99精品 | 色资源在线 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 欧美一区不卡 | 免费看一区二区三区 | 免费观看av | 亚洲精品国产电影 | 91精品综合久久久久久五月天 | 国产美女网站 | 日韩欧美国产精品一区二区 | 亚洲电影一区二区三区 | 日韩中文字幕一区二区 | 作爱视频免费观看 | 日日操夜夜摸 | 91小视频在线 | 欧美日韩三级 | 国产美女在线看 | 欧洲av一区 | 日本中文字幕日韩精品免费 | 99精品久久 | 偷牌自拍| 国产一区黄色 | 欧美久久国产 | 欧美日韩国产中文 | 欧美日一区二区 | 天堂久久一区 | 久久久综合色 | 国产精品久久久久久久久久免费看 | 日日夜夜视频 | 四虎海外 | 最新免费黄色网址 | 亚洲一av | 亚洲第一天堂 | 国产福利视频网站 | 国产一区二区三区四区在线观看 |