找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用24C02芯片實現(xiàn)單片機(jī)開機(jī)次數(shù)記憶 源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:190326 發(fā)表于 2017-4-17 09:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. //開機(jī)次數(shù)記憶
  2. #include<reg52.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. bit  write=0;           //寫24C02的標(biāo)志;
  6. sbit sda=P2^0;                        
  7. sbit scl=P2^1;
  8. sbit dula=P2^6;
  9. sbit wela=P2^7;
  10. sbit RST=P2^5;   //時鐘
  11. sbit CS_DA =P2^4 ;  //HJ-1G DAC
  12. sbit JD=P0^6;
  13. sbit FM=P2^3;


  14. uchar sec,tcnt;
  15. uchar code table[]={
  16. 0x3f,0x06,0x5b,0x4f,
  17. 0x66,0x6d,0x7d,0x07,
  18. 0x7f,0x6f,0x77,0x7c,
  19. 0x39,0x5e,0x79,0x71};
  20. void ioin()  //IO口繼電器、數(shù)碼管鎖存函數(shù)
  21.    {         
  22.           wela=1;
  23.      P0 = 1;  
  24.           JD = 0;   
  25.      wela=0;
  26.           dula=1;
  27.           P0=0;
  28.           dula=0;
  29.     }
  30. void delay()
  31. { ;; }
  32. void delay1ms(uint z)
  33. {
  34.         uint x,y;
  35.         for(x=z;x>0;x--)
  36.                 for(y=110;y>0;y--);
  37. }
  38. void start()  //開始信號
  39. {        
  40.         sda=1;
  41.         delay();
  42.         scl=1;
  43.         delay();
  44.         sda=0;
  45.         delay();
  46. }
  47. void stop()   //停止
  48. {
  49.         sda=0;
  50.         delay();
  51.         scl=1;
  52.         delay();
  53.         sda=1;
  54.         delay();
  55. }
  56. void respons()  //應(yīng)答
  57. {
  58.         uchar i;
  59.         scl=1;
  60.         delay();
  61.         while((sda==1)&&(i<250))i++;
  62.         scl=0;
  63.         delay();
  64. }
  65. void init()
  66. {
  67.    RST=0; //總線時鐘低電評
  68.    CS_DA =0 ;
  69.         sda=1;
  70.         delay();
  71.         scl=1;
  72.         delay();
  73. }
  74. void write_byte(uchar date)
  75. {
  76.         uchar i,temp;
  77.         temp=date;
  78.         for(i=0;i<8;i++)
  79.         {
  80.                 temp=temp<<1;
  81.                 scl=0;
  82.             delay();
  83.                 sda=CY;
  84.                 delay();
  85.                 scl=1;
  86.                 delay();
  87.         }
  88.         scl=0;
  89.         delay();
  90.         sda=1;
  91.         delay();
  92. }
  93. uchar read_byte()
  94. {
  95.         uchar i,k;
  96.         scl=0;
  97.         delay();
  98.         sda=1;
  99.         delay();
  100.         for(i=0;i<8;i++)
  101.         {
  102.                 scl=1;
  103.                 delay();        
  104.                 k=(k<<1)|sda;
  105.                 scl=0;
  106.                 delay();        
  107.         }
  108.         return k;
  109. }
  110. void write_add(uchar address,uchar date)
  111. {
  112.         start();
  113.         write_byte(0xa0);
  114.         respons();
  115.         write_byte(address);
  116.         respons();
  117.         write_byte(date);
  118.         respons();
  119.         stop();
  120. }
  121. uchar read_add(uchar address)
  122. {
  123.         uchar date;
  124.         start();
  125.         write_byte(0xa0);
  126.         respons();
  127.         write_byte(address);
  128.         respons();
  129.         start();
  130.         write_byte(0xa1);
  131.         respons();
  132.         date=read_byte();
  133.         stop();
  134.         return date;
  135. }
  136. void display(uchar bai_c,uchar sh_c)        //顯示程序
  137. {
  138.    dula=0;
  139.    P0=table[bai_c];                //顯示第一位
  140.    dula=1;
  141.    dula=0;
  142.    wela=0;
  143.    P0=0x7e;
  144.    wela=1;
  145.    wela=0;
  146.    delay1ms(5);
  147.    dula=0;
  148.    P0=table[sh_c];                //顯示第二位
  149.    dula=1;
  150.    dula=0;
  151.    wela=0;
  152.    P0=0x7d;
  153.    wela=1;
  154.    wela=0;
  155.    delay1ms(5);
  156. }
  157. void main()
  158. {
  159.    ioin();
  160.         init();
  161.         sec=read_add(2);    //讀出保存的數(shù)據(jù)賦于sec
  162.         if(sec>100)        //防止首次讀取出錯誤數(shù)據(jù)
  163.                 sec=0;
  164.         TMOD=0x01;                          //定時器工作在方式1
  165.         ET0=1;
  166.         EA=1;
  167.         TH0=(65536-50000)/256; //對TH0 TL0賦值
  168.         TL0=(65536-50000)%256; //使定時器0.05秒中斷一次
  169.         TR0=1;                 //開始計時
  170.         while(1)
  171.         {
  172.                 display(sec/10,sec%10);
  173.                 if(write==1)                       //判斷計時器是否計時一秒
  174.                 {
  175.                         write=0;              //清零
  176.                         write_add(2,sec);            //在24c02的地址2中寫入數(shù)據(jù)sec
  177.                 }
  178.         }
  179. }
  180. void t0() interrupt 1 //定時中斷服務(wù)函數(shù)
  181. {
  182.         TH0=(65536-50000)/256; //對TH0 TL0賦值
  183.         TL0=(65536-50000)%256; //重裝計數(shù)初值
  184.         tcnt++;        //每過50ms tcnt加一
  185.         if(tcnt==20)  //計滿20次(1秒)時
  186.         {
  187.             tcnt=0;   //重新再計
  188.             sec++;
  189.             write=1;  //1秒寫一次24C02
  190.             if(sec==100) //定時100秒,再從零開始計時
  191.                     sec=0;
  192.         }
  193. }



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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表