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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AT24C02時間記憶

[復制鏈接]
跳轉到指定樓層
樓主
ID:3721 發表于 2015-1-5 21:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. //****************************************************************
  2. /*該程序的功能:利用定時器產生一個0~99秒變化的秒表,并在數碼管上顯
  3.                 示,每一秒中將該變化寫入AT24c02內部。當關閉電源,
  4.                 且再次打開電源時單片機先從AT24c02中將原來寫入的數據
  5.                 讀出來,接著顯示在數碼管上
  6.   應用到的知識:定時器中斷、艾方西(IIC)數據傳輸協議。
  7.   涉及芯片資料:AT24C02,74HC595
  8. */
  9. //****************************************************************
  10. #include<reg52.h>
  11. #define uint unsigned int
  12. #define uchar unsigned char
  13. uchar code num[]={0x80,0xed,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08};//字段的顯示碼
  14. uint p=0,a,b;
  15. //*****AT24c02管腳的定義*********
  16. sbit scl=P0^3;
  17. sbit sda=P0^4;
  18. //*****595數碼管管腳定義*********
  19. sbit rck=P2^0;
  20. sbit sck=P2^1;
  21. sbit si=P2^2;
  22. //********函數的聲明**********
  23. void delayus();
  24. void start();
  25. void stop();
  26. void ack();
  27. void noack();
  28. void write_byte(uchar date);
  29. uchar read_byte();
  30. void xie(uchar add,uchar date);
  31. uchar du(uchar add);
  32. void init_24c02(); //24c02函數初始化
  33. void init_zhongduan(); //中斷函數初始化
  34. void write_595(uchar date);//595寫字節函數

  35. //*******************
  36. void delayus()
  37. {
  38.    ; ; ;
  39. }
  40. /*void delayms(uint t)
  41. {
  42.    uint i,j;
  43.     for(i=t;i>0;i--)
  44.      for(j=110;j>0;j--);
  45. } */
  46. void start()
  47. {
  48.    sda=1;
  49.    delayus();
  50.    scl=1;
  51.    delayus();
  52.    sda=0;
  53.    delayus();
  54. }
  55. void stop()
  56. {
  57.    sda=0;
  58.    delayus();
  59.    scl=1;
  60.    delayus();
  61.    sda=1;
  62.    delayus();
  63. }
  64. void ack()
  65. {
  66.    uint i=0;
  67.    scl=1;
  68.    delayus();
  69.    if((sda==1)&&(i<250))i++;
  70.    scl=0;
  71.    delayus();
  72. }
  73. void noack()
  74. {
  75.     sda=1;
  76.     delayus();
  77.     scl=0;
  78.     delayus();
  79.     scl=1;
  80.     delayus();
  81.     scl=0;
  82.     delayus();
  83. }
  84. void write_byte(uchar date)
  85. {
  86.    uint i;
  87.    scl=0;
  88.    for(i=0;i<8;i++)
  89.     {
  90.         if(date&0x80)
  91.       {
  92.             sda=1;
  93.       }
  94.          else
  95.       {
  96.            sda=0;
  97.       }
  98.          scl=1;
  99.          date=date<<1;
  100.          delayus();
  101.          scl=0;
  102.          delayus();
  103.     }
  104.     sda=1;
  105.     delayus();
  106. }
  107. uchar read_byte()
  108. {
  109.    uint i;
  110.    uchar k=0x00;
  111.    sda=1;
  112.    delayus();
  113.    scl=0;
  114.    delayus();
  115.     for(i=0;i<8;i++)
  116.      {
  117.         scl=1;
  118.         delayus();
  119.         k=k<<1;
  120.         if(sda)
  121.           {
  122.            k++;
  123.           }
  124.         scl=0;
  125.         delayus();
  126.          
  127.      }
  128.     return k;
  129. }
  130. void xie(uchar add,uchar date)
  131. {
  132.     start();
  133.     write_byte(0xa0);
  134.     ack();
  135.     write_byte(add);
  136.     ack();
  137.     write_byte(date);
  138.     ack();
  139.     stop();
  140. }
  141. uchar du(uchar add)
  142. {
  143.    uchar k;
  144.    start();
  145.    write_byte(0xa0);
  146.    ack();
  147.    write_byte(add);
  148.    ack();
  149.   
  150.    start();
  151.    write_byte(0xa1);
  152.    ack();
  153.    k=read_byte();
  154.    noack();
  155.    stop();
  156.    return k;
  157. }
  158. void init_24c02()
  159. {
  160.    sda=1;
  161.    scl=1;
  162. }
  163. void init_zhongduan()
  164. {
  165.    EA=1;//開啟總中斷
  166.    ET1=1;//開啟定時器1中斷
  167.    TMOD=0X10;//設置定時器1為工作方式
  168.    TH1=(65536-50000)/256;//裝初值12兆晶振定時50毫秒數位50000
  169.    TL1=(65536-50000)%256;
  170.    TR1=1; //啟動定時器1
  171. }

  172. void main()
  173. {
  174.    init_zhongduan();
  175.    a=du(2);//讀回斷電時的數據
  176.    b=du(1);
  177.    write_595(num[b]);//數碼管初始化為斷電前得數值
  178.    write_595(num[a]);
  179.    while(1);
  180. }
  181. void cut() interrupt 3
  182. {
  183.    TH1=(65536-50000)/256; //重裝初值
  184.    TL1=(65536-50000)%256;
  185.    p++; //p每加一次就是50毫秒
  186.    write_595(num[b]);
  187.    write_595(num[a]);
  188.      if(p==20) //判斷是否夠一秒
  189.       {
  190.         p=0;//重置0
  191.         a++;
  192.          if(a==10)
  193.           {
  194.            a=0;
  195.          b++;
  196.             if(b==10)b=0;
  197.             xie(1,b);//選地址1儲存b的值
  198.           }
  199.         xie(2,a);//選地址2儲存a的值
  200.       }
  201.      rck=0;
  202.      rck=1;
  203. }
  204. void write_595(uchar date)
  205. {
  206.    uint i;
  207.    for(i=0;i<8;i++)
  208.     {
  209.        sck=0;
  210.        date=date>>1;//移位寄存
  211.        si=CY;
  212.        sck=1;
  213.     }
  214. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品污www一区二区三区 | 91精品国产一区二区三区蜜臀 | 精品国产18久久久久久二百 | www.色综合 | h视频在线观看免费 | 99久久电影 | 天堂av中文在线 | 亚洲天堂中文字幕 | 国产精品精品久久久 | 国产成人在线一区二区 | 久久精选| 欧美不卡视频一区发布 | 羞羞视频网站免费看 | 国产一区二区三区在线视频 | 精品国产伦一区二区三区观看体验 | 亚洲视频一区在线观看 | 97av | 一级片在线播放 | 日韩一区二区三区av | 国产精品999 | 亚洲一区二区三区免费 | 国产精品区二区三区日本 | 激情av免费看 | 黑人巨大精品 | 在线观看亚| 亚洲 成人 在线 | 午夜久久久久 | 激情伊人网 | 日本中文字幕日韩精品免费 | 91 视频网站| 色伊人| 日韩美香港a一级毛片免费 国产综合av | 91手机精品视频 | 欧美日高清视频 | 色综合桃花网 | 久久精品国产亚洲a | 国产h视频| 日韩欧美国产一区二区三区 | 美女久久久久久久 | av天天干| 日韩成人免费av |