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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602顯示DS1302時鐘

[復制鏈接]
跳轉到指定樓層
樓主
本人正在學習單片機,已超過2個月,此程序適合學習過單片機的新手借鑒和討論,注釋詳盡。
本程序不可通過按鍵設置時間,可按鍵設置時間的程序正在創作。詳細程序可下載附件。
  1. #include <reg52.h>
  2. #include"inc/lcd.h"

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit IO = P3^6;
  6. sbit SCLK = P3^5;
  7. sbit RST = P3^7;
  8. sbit ACC_0 = ACC^0;//累加器第一位
  9. sbit ACC_7 = ACC^7;//累加器最后一位

  10. //寫的地址
  11. uchar code write_addr[7]=

  12. {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};   
  13. //讀的地址
  14. uchar code read_addr[7]=

  15. {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};   

  16. /*形式上為十六進,數值是BCD碼*/
  17. //存儲格式是BCD碼秒   分   時   日   月   周   年
  18. uchar

  19. time[7]={0x00,0x14,0x11,0x13,0x12,0x04,0x19};

  20. /*如果數值時間是十進制,寫入時間時要先轉化為BCD碼*/
  21. //uchar time[7]={0,25,15,15,12,6,18}; //十進制

  22. void write_byte(uchar dat)//寫一個字節
  23. {        
  24.         uchar i;
  25.         ACC=dat;
  26.         for(i=8;i>0;i--)
  27.         {
  28.                 IO=ACC_0;
  29.                 SCLK=0;
  30.                 SCLK=1;
  31.                 ACC=ACC>>1;
  32.         }
  33.          /*
  34.         uchar i;
  35.         for(i=0;i<8;i++)
  36.         {
  37.                 IO = (bit)(dat & 0x01);
  38.                 SCLK = 0;
  39.                 SCLK = 1;
  40.                 dat >>= 1;
  41.         }
  42.          */         
  43. }


  44. uchar read_byte()                       //讀一個字節
  45. {        
  46.         uchar i;                                       

  47.          
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 ACC_7=IO;
  51.                 SCLK=1;
  52.                 SCLK=0;
  53.                 ACC=ACC>>1;
  54.         }
  55.         IO=0;
  56.         return (ACC);
  57.         /*
  58.         uchar dat,i;
  59.         for(i=0;i<8;i++)
  60.         {
  61.         

  62.         if(IO == 1)
  63.                 {
  64.                         

  65. dat = dat|0x80;
  66.                 }
  67.                 SCLK = 1;
  68.                 SCLK = 0;
  69.                 dat >>= 1;        
  70.         }
  71.         IO = 0;
  72.         return (dat);
  73.         */
  74. }

  75. void write_1302(uchar add,uchar dat)    //向1302芯片寫

  76. 函數,指定寫入地址,數據
  77. {

  78.         RST=0;
  79.         SCLK=0;
  80.         RST=1;
  81.         write_byte(add);
  82.         write_byte(dat);
  83.         SCLK=1;
  84.         RST=0;
  85. }


  86. uchar read_1302(uchar add)                   //從1302

  87. 讀數據函數,指定讀取數據來源地址
  88. {
  89.         uchar temp;
  90.         RST=0;
  91.         SCLK=0;
  92.         RST=1;
  93.         write_byte(add);
  94.         temp=read_byte();
  95.         SCLK=1;
  96.         RST=0;
  97.         return(temp);
  98. }


  99. void ds1302_init()
  100. {
  101.         uchar k;
  102.     write_1302(0x8e,0x00);  //禁止寫保

  103. 護,即允許數據寫入
  104.     for(k=0;k<7;k++)   //寫入7個字節

  105. 的時鐘信號:分秒時日月周年
  106.     {
  107.       write_1302

  108. (write_addr[k],time[k]);
  109.     }
  110.     write_1302

  111. (0x8e,0x80);  //打開寫保護

  112.         /*//寫入時間時要先轉化為BCD碼
  113.         uchar i,tmp;
  114.         write_1302(0x8e,0x00);  //禁止寫保護,即允許數

  115. 據寫入
  116.         for (i=0; i<7; i++)  
  117.         {
  118.                 tmp = time[i] / 10;
  119.                 time[i] = time[i] % 10;
  120.                 time[i] = time[i] + tmp*16;        // 十

  121. 進制轉化為BCD格式
  122.                 write_1302(write_addr[i],time[i]);
  123.                 //寫入7個字節的時鐘信號:分秒時日月周


  124.         }
  125.     write_1302(0x8e,0x80);  //打開寫保護
  126.         */
  127. }

  128. void BCD_STRING(uchar bcd, uchar *str) //BCD轉化為字符


  129. {         
  130.          *str = (bcd >> 4) + '0';
  131.         *(str+1) = (bcd & 0x0f) + '0';
  132. }

  133. void read_time(uchar *timedata)
  134. {
  135.         uchar n;
  136.         for(n=0;n<7;n++)
  137.         {
  138.                  timedata[n]=read_1302(read_addr[n]);  

  139. //讀取分秒時日月周年
  140.         }        
  141.         BCD_STRING(timedata[6], LCD_TIME+0);//轉化后年

  142. ,存放在LCD_TIME
  143.         BCD_STRING(timedata[4], LCD_TIME+2);//轉化后月
  144.         BCD_STRING(timedata[3], LCD_TIME+4);//轉化后日
  145.         BCD_STRING(timedata[5], LCD_TIME+6);//轉化后周
  146.         BCD_STRING(timedata[2], LCD_TIME+8);//轉化后時
  147.         BCD_STRING(timedata[1], LCD_TIME+10);//轉化后


  148.         BCD_STRING(timedata[0], LCD_TIME+12);//轉化后


  149. }

  150. void main()
  151. {
  152.         ds1302_init();//1302初始化,設定時間
  153.         Lcd_init();         //        lcd初始化
  154.         while(1)
  155.         {
  156.                 read_time(&time); //讀取時間
  157.                 lcd_dis();         //        顯示在lcd
  158.         }
  159. }
復制代碼

}4SPVY4XKK)9U[K18KL5{_B.png (44.67 KB, 下載次數: 62)

}4SPVY4XKK)9U[K18KL5{_B.png

LCD顯示時鐘.rar

35.36 KB, 下載次數: 59, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:721769 發表于 2021-4-1 16:51 | 只看該作者
請問博主, 你用的是C52芯片嗎?
回復

使用道具 舉報

板凳
ID:900518 發表于 2021-4-17 10:27 | 只看該作者
一直想搞一個DS1302時鐘 學習一下了  謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.奇米| 国产一区二 | 色视频在线播放 | 超碰在线免费公开 | 免费在线观看一区二区三区 | 狠狠色综合网站久久久久久久 | 国产精品视频在线播放 | 99pao成人国产永久免费视频 | 中文字幕亚洲视频 | 免费在线看a | 成人精品一区二区 | 天天视频一区二区三区 | 日韩欧美福利视频 | 天天干狠狠 | 国产高清在线精品 | 精品福利av导航 | 在线一区视频 | 国产成人精品网站 | 日本韩国电影免费观看 | 综合久久综合久久 | 精品在线免费看 | 伊人爽 | jizz亚洲人| 日韩一二区 | av中文字幕网站 | 羞羞视频网站在线观看 | 国产精品综合视频 | 一区二区三区中文字幕 | 欧美成人影院在线 | 国产高清在线 | 精品国产一区二区三区成人影院 | 国产情侣在线看 | 欧美一区二区三区精品免费 | 精品国产免费一区二区三区五区 | 天堂在线一区 | 超碰免费观看 | 日韩色视频 | 美女久久久久久久 | 中文字幕在线观看一区 | 免费在线观看成年人视频 | 精品免费国产视频 |