欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: DS1302 12/24小時制轉(zhuǎn)換 [打印本頁]

作者: hujia    時間: 2014-11-8 14:35
標(biāo)題: DS1302 12/24小時制轉(zhuǎn)換
DS1302,12小時制更符合中國人的習(xí)慣,網(wǎng)上的資料與視頻都是講24小時制,根本找不到如何實現(xiàn)12小時制或者說得很模糊,看到有人在問如何實現(xiàn)12小時制。于是我就打算搞清楚,希望還在找答案的你,看到這篇文章,能有所幫助。我們來看DS1302的datasheet中關(guān)于小時的部分:
HR
1
0
0
0
0
1
0
RD
W
12/24
0
10
HR
HR
A/P
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
首先確定地址:讀取小時的地址為85H,寫入時的地址為84H。
AM-PM/12-24模式選擇:
小時寄存器的bit7是AM-PM/12-24模式選擇選擇位,這一位為“1”時,選擇了12小時制。因此,這樣實現(xiàn)
12小時制:Write_DS1302(0x84,80)
小時寄存器的bit5為“1”時,為上午。這樣實現(xiàn)12小時制的上午:Write_DS1302(0x84,90)
寫入時間后,我們就可以讀取了:temp=Read_DS1302(0x83)
關(guān)鍵就在于顯示,與12小時有關(guān)的是bit0—bit4,因此,讀到的值需去掉無關(guān)的位,可以這樣:
       temp=Read_DS1302(0x85);//小時數(shù)保存在低5位
       temp<<=3;
       temp>>=3;
左移三位,再右移三位后,temp中就是真正的12小時的16進(jìn)制碼了。
下面附完整原代碼,將其保存為DS1302.h,然后在main中調(diào)用就行。
希望這篇文章對你有用。
/************************************************************
時間函數(shù)
系統(tǒng)時鐘:89C52 12M時鐘頻率
原創(chuàng)作者:花瓣雨  QQ:1276652066
************************************************************/
#ifndef _DS1302_h
#define _DS1302_h
sbit DS1302_scl=P3^6;
sbit io=P3^4;
sbit rst=P3^5;
unsigned char Read_DS1302(unsigned char Addr) //讀取DS1302
{
       unsigned char i,Value;
       rst=0;
       DS1302_scl=0;
       rst=1;
       for(i=0;i<8;i++)
       {
              DS1302_scl=0;
              io=Addr & 0x01;
              DS1302_scl=1;
              Addr>>=1;
       }
       for(i=0;i<8;i++)
       {
              Value>>=1;
              DS1302_scl=0;
              if(io) Value|=0x80;
             DS1302_scl=1;
       }
       rst=0;
       return Value;
}
void Write_DS1302(unsigned char Addr,unsigned char Value) //寫入DS1302
{
      unsigned char i;
       rst=0;
       DS1302_scl=0;
       rst=1;
       for(i=0;i<8;i++)
       {
              DS1302_scl=0;
              io=Addr & 0x01;
              DS1302_scl=1;
              Addr>>=1;
       }
       for(i=0;i<8;i++)
       {
              DS1302_scl=0;
              io=Value & 0x01;
              DS1302_scl=1;
              Value>>=1;
       }
       rst=0;
}
void Set_MIN(unsigned char s)  //1為分鐘加,0為分鐘減
{
      unsigned char temp;
       Write_DS1302(0x8E,0x00);//去除寫保護(hù)
       temp=Read_DS1302(0x83);
       if(s)
       {
              temp+=1;
              if(temp>0x59)
                     temp=0;
              if(temp%0x10>0x09)
                     temp=((temp+0x10) & 0xf0);
       }
       else
       {   
             if(temp>0)
                     temp-=1;
              else
                     temp=0x59;
              if((temp%0x10)>0x09)
                     temp=((temp/0x10)*0x10 + 0x09);
       }
       Write_DS1302(0x82,temp);
       Write_DS1302(0x80,0x00);
}
void Set_HR(unsigned char s) //1為小時加,0為小時減
{
      unsigned char temp;
       Write_DS1302(0x8E,0x00);//去除寫保護(hù)
       temp=Read_DS1302(0x85);//小時數(shù)保存在低5位
       temp<<=3;
       temp>>=3;
       if(s)
       {
              temp+=1;
              if(temp==0x0a)
                     temp=0x10;
              if(temp>0x12)
                     temp=0;
       }
       else
       {   
              if(temp==0)
                     temp=0x12;
              temp-=1;
              if(temp==0x0f)
                     temp=0x09;
       }
       temp=temp | 0x80;
       Write_DS1302(0x84,temp);
}
#endif



作者: qxdqx    時間: 2018-5-28 07:48
謝謝!太好的資料,正想把數(shù)碼管時鐘改為12小時制,小孩子不會看24小時制的鐘。
作者: 歹匕礻申    時間: 2020-5-20 16:02
感謝大佬




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1