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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS1307+兩個74HC573顯示8位數碼管沒鬼影采用定時器掃描,單片機時鐘程序

[復制鏈接]
跳轉到指定樓層
樓主
下載下來直接用


單片機源程序如下:
  1. #ifndef __DS1307_H__
  2. #define __DS1307_H__
  3. #include <STC89C5xRC.h>
  4. #include "intrins.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit sda=P2^0;//;模擬I2C 數據傳送位
  8. sbit scl=P2^1;//;模擬I2C 時鐘控制狀態標志
  9. uchar Hours,Minutes,Seconds,Year,Month,Date,Weeks;

  10. uchar Decimal_to_BCD(uchar temp)//十進制轉換成BCD碼
  11. {
  12. uchar a,b,c;
  13.         a=temp;
  14.         b=0;
  15.         while(a>=10)
  16.                 {
  17.                         a=a-10;
  18.                         b=b+16;
  19.                         c=a+b;
  20.                         temp=c;
  21.                 }          
  22.         return temp;
  23. }
  24. uchar BCD_to_Decimal(uchar temp)//BCD碼轉換成十進制
  25. {
  26.         uchar a,b,c;
  27.         a=temp;
  28.         b=0;
  29.         while(a>=16)
  30.                 {
  31.                         a=a-16;
  32.                         b=b+10;
  33.                         c=a+b;
  34.                         temp=c;
  35.                 }          
  36.         return temp;
  37. }
  38. void delay_5us()//5us延時
  39. {
  40.         _nop_();
  41.         _nop_();
  42.         _nop_();
  43. }
  44. void star_1307()//開始
  45. {
  46.         sda=1;
  47.         delay_5us();//5us延時
  48.         scl=1;
  49.         delay_5us();//5us延時
  50.         sda=0;
  51.         delay_5us();//5us延時
  52. }
  53. void stop_1307()//停止
  54. {
  55.         sda=0;
  56.         delay_5us();//5us延時
  57.         scl=1;
  58.         delay_5us();//5us延時
  59.         sda=1;
  60.         delay_5us();//5us延時
  61. }
  62. void ack_1307()//應答
  63. {
  64. uchar z=0;
  65.         while((sda==1)&&(z<50))z++;//條件判斷, sda=1,則沒有應答。如果沒有應答則延時:z<50,z++;后返回
  66.         scl=0;
  67.         delay_5us();//5us延時
  68. }
  69. void write_1307(uchar slave_write_address,uchar byte_address,uchar data_data)//寫一個數據
  70. {
  71. uchar temp,temp1,i,ii;
  72.         star_1307();                                //開始
  73.         for(ii=0;ii<3;ii++)//根據 24CXX文檔資料,和時序圖,按順序送:器件寫地址,字節地址,數據
  74.         {
  75.                 if(ii==0)
  76.                 {
  77.                         temp=slave_write_address;//送 器件寫地址
  78.                         temp1=slave_write_address;
  79.                 }
  80.                 else if(ii==1)
  81.                 {
  82.                         temp=byte_address;//送 字節地址
  83.                         temp1=byte_address;
  84.                 }
  85.                 else if(ii==2)
  86.                 {
  87.                         temp=data_data;//送 數據
  88.                         temp1=data_data;
  89.                 }
  90.                 for(i=0;i<8;i++)
  91.                 {
  92.                         scl=0;
  93.                         delay_5us();//5us延時
  94.                         temp=temp1;
  95.                         temp=temp&0x80;//相 與 后,把不相關的位清零
  96.                         if(temp==0x80)//根據前面 相 與 后,判斷 temp是否等于0x80,是則該位為 1                        
  97.                                 sda=1;
  98.                         else
  99.                                 sda=0;
  100.                        
  101.                         delay_5us();//5us延時
  102.                         scl=1;
  103.                         delay_5us();//5us延時
  104.                         scl=0;
  105.                         delay_5us();//5us延時
  106.                         temp1=temp1<<1;//向左移出1位
  107.                        
  108.                 }
  109.                 sda=1;
  110.                 delay_5us();//5us延時
  111.                 scl=1;
  112.                 delay_5us();//5us延時
  113.                 ack_1307();
  114.         }
  115.         stop_1307();//停止
  116. }
  117. uchar read_1307(uchar slave_write_address,uchar byte_address,uchar slave_read_address)//讀一個數據
  118. {
  119. uchar temp,temp1,i,ii,x,data_data;
  120.         star_1307();//開始
  121.         for(ii=0;ii<3;ii++)//根據 24CXX文檔資料,和時序圖,按順序送:器件寫地址,字節地址,器件讀地址
  122.         {
  123.                 if(ii==0)
  124.                         {
  125.                         temp=slave_write_address;//送 器件寫地址
  126.                         temp1=slave_write_address;
  127.                         }
  128.                 else if(ii==1)
  129.                         {
  130.                         temp=byte_address;//送 字節地址
  131.                         temp1=byte_address;
  132.                         }
  133.                 else if(ii==2)
  134.                         {
  135.                         star_1307();//開始
  136.                         temp=slave_read_address;//送 器件讀地址
  137.                         temp1=slave_read_address;
  138.                         }
  139.                 for(i=0;i<8;i++)//開始讀數據
  140.                         {
  141.                                 scl=0;
  142.                                 delay_5us();//5us延時
  143.                                 temp=temp1;
  144.                                 temp=temp&0x80;// 相 與 后,把不相關的位清零
  145.                                 if(temp==0x80)//根據前面 相 與 后,判斷 temp是否等于0x80,是則該位為 1
  146.                                
  147.                                 sda=1;
  148.                                 else
  149.                                 sda=0;
  150.                                
  151.                                 delay_5us();//5us延時
  152.                                 scl=1;
  153.                                 delay_5us();//5us延時
  154.                                 scl=0;
  155.                                 delay_5us();//5us延時
  156.                                 temp1=temp1<<1;//向左移出1位
  157.                         }
  158.                 sda=1;
  159.                 delay_5us();//5us延時
  160.                 scl=1;
  161.                 delay_5us();//5us延時
  162.                 ack_1307();//應答
  163.         }
  164.         for(x=0;x<8;x++)
  165.         {
  166.                 data_data=data_data<<1;//向左移入1位
  167.                 sda=1;
  168.                 delay_5us();//5us延時
  169.                 scl=0;
  170.                 delay_5us();//5us延時
  171.                 scl=1;
  172.                 delay_5us();//5us延時
  173.                 if(sda==1)//判斷 數據線是否是高電平
  174.                 data_data|=0x01;//把讀到的數據 或 0X01
  175.         }
  176.         ack_1307();//應答
  177.         stop_1307();//停止
  178.         return data_data;//返回讀到的數據
  179. }
  180. void init_1307()//初始化
  181. {
  182.         Hours=23;
  183.         Minutes=14;
  184.         Seconds=11;
  185.         Year=17;   
  186.         Month=11;
  187.         Date=24;
  188.         Weeks=5;       
  189.         Seconds=Decimal_to_BCD(Seconds);//十進制轉換成BCD碼
  190.         Minutes=Decimal_to_BCD(Minutes);//十進制轉換成BCD碼
  191.         Hours=Decimal_to_BCD(Hours);//十進制轉換成BCD碼
  192.         Date=Decimal_to_BCD(Date);//十進制轉換成BCD碼
  193.         Year=Decimal_to_BCD(Year);//十進制轉換成BCD碼
  194.         Month=Decimal_to_BCD(Month);//十進制轉換成BCD碼

  195.         write_1307(0xd0,0x00,Seconds);//寫入秒
  196. ……………………

  197. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
DS1307萬年歷程序.rar (30.02 KB, 下載次數: 62)




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

使用道具 舉報

沙發
ID:1 發表于 2017-12-20 00:22 | 只看該作者
樓主能提供一下電路圖嗎?
回復

使用道具 舉報

板凳
ID:264021 發表于 2017-12-26 22:43 | 只看該作者
這么簡單的程序一看就知道啦還要原理圖,你應該先去玩流水燈
回復

使用道具 舉報

地板
ID:210375 發表于 2018-3-18 11:18 | 只看該作者
挺不錯的,點個贊
回復

使用道具 舉報

5#
ID:457181 發表于 2020-5-6 10:22 | 只看該作者
謝謝分享!!!!
回復

使用道具 舉報

6#
ID:748788 發表于 2020-8-17 08:34 | 只看該作者
單片機學習習 發表于 2017-12-26 22:43
這么簡單的程序一看就知道啦還要原理圖,你應該先去玩流水燈

樓主懟版主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人亚洲精品自产在线 | 黄色毛片网站在线观看 | 久久91av| 日本不卡在线观看 | h视频免费在线观看 | 免费观看一级毛片 | 国产精品揄拍一区二区 | 欧美日韩一区二区三区四区五区 | 国产一区精品在线 | 久久综合激情 | 欧美日在线 | 亚洲一区日韩 | 黄色大片免费网站 | 一区二区三区视频 | 亚洲成人福利视频 | 国产一级视频 | 国产综合久久 | 亚洲欧美在线免费观看 | 国产一区二区三区视频 | 色综合桃花网 | 午夜噜噜噜 | 免费av一区二区三区 | 超碰97人人人人人蜜桃 | 91视频在线| a在线视频 | 岛国视频| 成人免费看片 | 色综合久久久久 | 午夜精品久久 | 精品久久久久久久 | 中文字幕一区二区三区精彩视频 | 激情五月激情综合网 | 日韩国产在线观看 | 成人一区二区三区 | 日韩福利| 国产美女黄色片 | 久久草在线视频 | 欧美日韩在线免费 | 欧美日韩成人在线 | 国产欧美日韩一区二区三区在线观看 | 久久久91精品国产一区二区三区 |