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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS1302 12/24小時制轉換

[復制鏈接]
跳轉到指定樓層
樓主
ID:26188 發表于 2014-11-8 14:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
DS1302,12小時制更符合中國人的習慣,網上的資料與視頻都是講24小時制,根本找不到如何實現12小時制或者說得很模糊,看到有人在問如何實現12小時制。于是我就打算搞清楚,希望還在找答案的你,看到這篇文章,能有所幫助。我們來看DS1302的datasheet中關于小時的部分:
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小時制。因此,這樣實現
12小時制:Write_DS1302(0x84,80)
小時寄存器的bit5為“1”時,為上午。這樣實現12小時制的上午:Write_DS1302(0x84,90)
寫入時間后,我們就可以讀取了:temp=Read_DS1302(0x83)
關鍵就在于顯示,與12小時有關的是bit0—bit4,因此,讀到的值需去掉無關的位,可以這樣:
       temp=Read_DS1302(0x85);//小時數保存在低5位
       temp<<=3;
       temp>>=3;
左移三位,再右移三位后,temp中就是真正的12小時的16進制碼了。
下面附完整原代碼,將其保存為DS1302.h,然后在main中調用就行。
希望這篇文章對你有用。
/************************************************************
時間函數
系統時鐘:89C52 12M時鐘頻率
原創作者:花瓣雨  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);//去除寫保護
       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);//去除寫保護
       temp=Read_DS1302(0x85);//小時數保存在低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


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

使用道具 舉報

沙發
ID:140183 發表于 2018-5-28 07:48 | 只看該作者
謝謝!太好的資料,正想把數碼管時鐘改為12小時制,小孩子不會看24小時制的鐘。
回復

使用道具 舉報

板凳
ID:371032 發表于 2020-5-20 16:02 | 只看該作者
感謝大佬
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表