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

標題: AT24C02時間記憶 [打印本頁]

作者: heicc    時間: 2015-1-5 21:17
標題: AT24C02時間記憶
  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. }
復制代碼







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 二区成人 | 一级大黄色片 | 久草精品视频 | 青青草视频免费观看 | 婷婷丁香综合网 | 欧美在线一区二区三区 | 国精久久 | 午夜男人天堂 | 国产午夜精品久久久 | 成人在线视频一区 | 中文字幕成人免费视频 | 久久爱综合 | 日韩欧美在线免费观看视频 | 国产精品成人在线播放 | 亚洲综合伊人 | 91看片在线 | 欧美电影一区 | 欧美成人a | 青青草精品 | 日本精品在线一区 | 久久国产成人 | 国产精品国产三级国产aⅴ无密码 | 国产亚洲成av人在线观看导航 | 黄色片免费看视频 | 日本视频在线 | 国产一级片网站 | 亚洲欧美激情精品一区二区 | 免费xxxx大片国产在线 | 久久中文一区二区 | 亚洲视频中文字幕 | 亚洲一区二区精品 | 午夜在线精品偷拍 | 国产乱码精品一区二区三区忘忧草 | 成人高清在线 | 91免费看片| 99re国产视频 | 欧美亚洲高清 | 精品乱码一区二区三四区视频 | 国产精品免费一区二区三区四区 | 国产成人免费 | 性欧美xxxx |