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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7083|回復: 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


回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区不卡 | 一区二区精品电影 | av中文字幕在线 | 女朋友的闺蜜3韩国三级 | 99精品国产一区二区青青牛奶 | aaa精品| 亚洲综合大片69999 | 久久综合一区 | 亚洲男人的天堂网站 | 在线视频 中文字幕 | 国产欧美一区二区三区在线看蜜臀 | 精品日韩在线观看 | 久久一区二区三区四区 | 成年人网站在线观看视频 | 亚洲精品久久久久久久久久吃药 | 蜜桃黄网 | 全免费a级毛片免费看视频免费下 | 欧美日韩午夜精品 | 一级午夜aaa免费看三区 | 亚洲综合色丁香婷婷六月图片 | 成人在线免费观看 | av一级久久| 日韩精品a在线观看图片 | 日本在线视频不卡 | 久久久久久久久久久久久久久久久久久久 | 欧美黄色小视频 | 天天综合久久 | 国产一区二区欧美 | 久久草视频| 久草网在线视频 | 亚洲国产一区二区三区在线观看 | 国产一级片av | 成人欧美一区二区三区视频xxx | 一级毛片在线播放 | 国产激情一区二区三区 | 国产精品不卡 | 青青青伊人 | 夜夜夜久久久 | 97伦理影院 | 久久国产精彩视频 | 国产精品影视在线观看 |