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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4729|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)簡單易懂的ds1302時(shí)間代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:126738 發(fā)表于 2018-12-24 16:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
ds1302 數(shù)碼管顯示時(shí)間,年份,日期交互顯示, 51單片機(jī)適用的代碼,簡單易懂,包括的功能有,定時(shí)報(bào)警亮燈,定時(shí)控制,可改寫成控制家電代碼

單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[17]={
  5. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  6. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
  7. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼

  8. sbit wei = P2^7 ;
  9. sbit duan = P2^6 ;
  10. sbit TCE=P1^2;
  11. sbit TCLK=P1^0;
  12. sbit TIO =P1^1;

  13. uchar position[] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};          //8個(gè)數(shù)碼管位選數(shù)組
  14. uchar udata[]={1,2,16,4,5,16,7,8};


  15. uchar code write_addr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
  16. uchar code read_addr[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};   

  17. #define hex(dat) (dat / 10 * 16 + (dat % 10)) //十進(jìn)制轉(zhuǎn)BCD碼  
  18. #define dec(dat) ((dat >> 4)* 10 + (dat & 0x0f)) //BCD碼轉(zhuǎn)十進(jìn)制

  19. /*形式上為十六進(jìn),數(shù)值是BCD碼*/
  20. //存儲格式是BCD碼秒   分   時(shí)   日   月   周   年
  21. //uchar time[7]={0x50,0x59,0x14,0x20,0x06,0x06,0x19};

  22. /*如果數(shù)值時(shí)間是十進(jìn)制,寫入時(shí)間時(shí)要先轉(zhuǎn)化為BCD碼*/
  23. uchar time[7]={0,59,15,15,12,6,18}; //十進(jìn)制
  24. uchar settime[3] = {5,59,15};         //定時(shí)時(shí)間設(shè)置

  25. uchar i,changeflag=0;
  26. uint num=0;
  27. uchar temp[7];

  28. /*******向DS1302讀入一字節(jié)數(shù)據(jù)*********/
  29. uchar DS1302Read(uchar add)  
  30. {   uchar a, d=0;  
  31.     TCE = 0;  
  32.     TCLK = 0;  
  33.     TCE=1;  
  34.     for(a=0; a<8; a++)   //發(fā)送控制字節(jié)  
  35.     {  
  36.         TCLK=0;  
  37.         TIO= add & 0x01;  
  38.         TCLK=1;//制造上升沿  
  39.         add>>=1;  
  40.     }  
  41.     for(a=0; a<8; a++)   //讀1字節(jié)數(shù)據(jù)  
  42.     {  
  43.         TCLK=1;  
  44.         d >>= 1;//右移1位  
  45.         TCLK=0;//制造下降沿  
  46.         if(TIO) {//如果讀到1  
  47.             d |= 0x80;//把最高位置1  
  48.         }  
  49.     }  
  50.     TCE=0;              //拉低TCE  
  51.     return dec(d);        //讀取的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制  
  52.   //return d;  
  53. }
  54. /*******向DS1302寫入一字節(jié)數(shù)據(jù)*********/  
  55. void DS1302Write(uchar add,uchar d)  
  56. {  
  57.     uchar i;  
  58.     d = hex(d);   //轉(zhuǎn)換為BCD碼  
  59.     TCE=0;      //拉低TCE引腳,終止數(shù)據(jù)傳輸  
  60.     TCLK=0;     //拉低TCLK引腳,清零時(shí)鐘線  
  61.     TCE=1;      //拉高TCE引腳,所有數(shù)據(jù)傳輸都要拉高TCE腳,啟動控制邏輯  
  62.     //先寫入控制字節(jié)  
  63.     for(i=0; i<8; i++)  
  64.     {  
  65.         TIO= add & 0x01;    //TIO引腳準(zhǔn)備好要寫入的1位數(shù)據(jù)  
  66.         TCLK=1;             //TCLK上升沿,1位數(shù)據(jù)從TIO腳寫入,低位先寫入  
  67.         add>>=1;          //數(shù)據(jù)右移1位  
  68.         TCLK=0;             //拉低TCLK,為下次寫入準(zhǔn)備,循環(huán)8次寫入1字節(jié)  
  69.     }  
  70.     //再寫入數(shù)據(jù)字節(jié)  
  71.     for(i=0; i<8; i++)  
  72.     {  
  73.         TIO= d & 0x01;  
  74.         TCLK=1;  
  75.         d>>=1;  
  76.         TCLK=0;  
  77.     }  
  78.     TCE=0;      //數(shù)據(jù)傳輸完拉低TCE  
  79. }

  80. void DS1302Init()
  81. {
  82.         uchar i;
  83.         DS1302Write(0x8e,0x00);//關(guān)閉寫保護(hù)
  84.         for(i=0;i<7;i++)
  85.                 DS1302Write(write_addr[i],time[i]);
  86.         DS1302Write(0x8e,0x80);
  87. }
  88. void DS1302ReadTime()
  89. {
  90.         udata[0] = temp[2]/10;
  91.         udata[1] = temp[2]%10;
  92.         udata[2] = 16;         
  93.         udata[3] = temp[1]/10;
  94.         udata[4] = temp[1]%10;
  95.         udata[5] = 16;
  96.         udata[6] = temp[0]/10;
  97.         udata[7] = temp[0]%10;

  98. }
  99. void  DS1302ReadTimeyear()
  100. {
  101.         udata[0] = 2;
  102.         udata[1] = 0;
  103.         udata[2] = temp[6]/10;
  104.         udata[3] = temp[6]%10;
  105.        
  106.         udata[4] = temp[4]/10;
  107.         udata[5] = temp[4]%10;
  108.        
  109.         udata[6] = temp[3]/10;
  110.         udata[7] = temp[3]%10;
  111. }

  112. void Init_Timer0(void)
  113. {
  114.         TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
  115.         TH0=(65536-1000)/256;              //給定初值
  116.         TL0=(65536-1000)/256;
  117.         EA=1;            //總中斷打開
  118.         ET0=1;           //定時(shí)器中斷打開
  119.         TR0=1;           //定時(shí)器開關(guān)打開
  120. }

  121. void main()
  122. {
  123.         Init_Timer0();
  124.         DS1302Init();

  125.         while(1)
  126.         {         
  127.                 uchar i;
  128.                 for(i=0;i<7;i++)
  129.                         temp[i] = DS1302Read(read_addr[i]);
  130.                 if(!changeflag)
  131.                         DS1302ReadTime() ;
  132.                 else
  133.                         DS1302ReadTimeyear();
  134.                
  135.                 if(temp[0] == settime[0] && temp[1] == settime[1] && temp[2] == settime[2])
  136.                 {
  137.                           P1 &= 0xf;
  138.                           
  139.                 }
  140.         }
  141. }
  142. void Timer0_isr(void) interrupt 1
  143. {
  144.         static uchar i;
  145.         TH0=(65536-1000)/256;              //給定初值
  146.         TL0=(65536-1000)/256;
  147.         P0=0xff;
  148.         duan =1;
  149.         P0=table[udata[i]];
  150.         duan = 0;
  151.         P0=0xff;
  152.         wei = 1;
  153.         P0 = position[i];
  154.         wei =0;
  155.         i++;
  156.         num++;
  157.         if(num > 30000)
  158.         {
  159.                 num=0;
  160.                 changeflag = ~changeflag ;
  161.         }       
  162.         if(i == 8)
  163.                 i=0;
  164. }
復(fù)制代碼

所有資料51hei提供下載:
DS1302.zip (32.12 KB, 下載次數(shù): 55)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:468209 發(fā)表于 2019-12-16 10:14 來自手機(jī) | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:607143 發(fā)表于 2020-3-28 20:32 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品国产 | 国产精品1区2区 | 一区二区在线不卡 | 中文字幕加勒比 | 亚洲欧美国产一区二区三区 | 欧美八区 | 国产午夜精品一区二区三区四区 | 欧美激情精品久久久久久免费 | 国产乱一区二区三区视频 | 国产色婷婷精品综合在线手机播放 | 一区二区三区中文 | 国产欧美久久精品 | www.五月婷婷.com | 黄色亚洲网站 | 成人av在线播放 | 精品久久久久久亚洲精品 | 九九综合 | 波波电影院一区二区三区 | 国产免费看 | 欧美日韩在线视频观看 | 伊人网伊人 | www.亚洲免费 | 狠狠操电影 | 精品在线看 | 日本韩国电影免费观看 | 特黄小视频 | 欧美在线网站 | 久久爱黑人激情av摘花 | 四季久久免费一区二区三区四区 | 久久国产综合 | 亚洲一区二区成人 | 美人の美乳で授乳プレイ | 91成人在线视频 | 成人免费视频观看视频 | 岛国av免费观看 | 久久久久亚洲精品 | 国产精品99久久久久久久久久久久 | 欧美日韩成人在线 | 成人三级av | 精品免费国产视频 | 欧美成人久久 |