找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1801|回复: 2
收起左侧

单片机小白关于使用AT24C02的问题

[复制链接]
ID:768342 发表于 2020-6-4 17:06 | 显示全部楼层 |阅读模式
IMG_20200604_165715.jpg
51hei截图20200604170529.png
在截图中要求的基础上实现按9清除 按10存储在AT24C02中 按返回数码管重新显示之前点确认存在芯片中的数,大佬看一下程序逻辑哪儿有问题
  1. #include<reg51.h>
  2. #include<AT24C02.h>
  3. #define uchar unsigned char
  4. #define        uint unsigned int
  5. sbit P3_2=P3^2;
  6. uchar code led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,     
  7. 0x6d,0x7d,0x07,0x7f,0x6f,0x00};  
  8. uchar code BitCode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};   
  9. uchar huanchong[]={10,10,10,10,10,10,10,10};            
  10. uchar convert[]={10,10,10,10,10,10,10,10};              
  11. uchar a=0;
  12. sbit        SDA = P3^1;                        
  13. sbit        SCL = P3^0;                        
  14. #define E2PROM_ADDR  0x12


  15. void dnms(uchar n)
  16. {
  17.         uchar i;
  18.         for(i=0;i<n;i++)
  19.                 delay1ms();
  20. }

  21. void int0()  interrupt 0
  22. {
  23.         uchar code RowCode[]={0xfe,0xfd,0xfb,0xf7};     
  24.         uchar temp,row,column,i,y,z;
  25.         uchar m,n;
  26.         P1=0xf0;                    
  27.         temp = P1 & 0xf0;
  28.             if (temp != 0xf0)                          
  29.                         {
  30.        P2=0xff;
  31.        switch (temp)
  32.                    {                                      
  33.                                  case 0x70: column = 3; break;
  34.                                  case 0xb0: column = 2; break;
  35.                                  case 0xd0: column = 1; break;
  36.                                  case 0xe0: column = 0; break;
  37.                                  default: break;
  38.                          }
  39.                          for (i=0;i<4;i++)                     
  40.                          {
  41.                                  P1 = RowCode[i];
  42.                                  temp = P1 & 0xf0;
  43.                                  if (temp !=0xf0)
  44.                                  {
  45.                                          row = i;break;
  46.                                  }
  47.                          }
  48.                          y= row *4 + column;                    
  49.                          if(y<10)
  50.                          {
  51.                                  if(a<8)
  52.                                  {                        
  53.                                          huanchong[a++]=y;
  54.                              m=a;
  55.                                          for(n=0;n<a;n++)
  56.                        {
  57.                                 convert[n]=huanchong[--m];  
  58.                                                 
  59.                              }   
  60.                                  }
  61.                          }
  62.              if(y==10)
  63.                          {                          
  64.                                  P2=0xff;
  65.                                  a=0;                           
  66.                                  for(z=0;z<8;z++)
  67.                                  {
  68.                                          huanchong[z]=10;              
  69.                                          convert[z]=10;               
  70.                                  }
  71.                    }
  72.                         while((P1 & 0xf0) !=0xf0);         
  73.          }
  74.                         
  75. }

  76. void start()
  77. {
  78.         SDA = 1;        
  79.         SCL = 1;        
  80.         NOP4();
  81.         SDA = 0;        
  82.         NOP4();
  83.         SCL = 0;        
  84. }

  85. void stop()
  86. {
  87.         SDA = 0;        
  88.         SCL = 1;        
  89.         NOP4();
  90.         SDA = 1;        
  91.         NOP4();
  92.         SDA = 0;
  93.         SCL = 0;
  94. }


  95. void Write_E2PROM(uchar add,uchar dat)
  96. {
  97.         start();
  98.         Write_E2PROM(E2PROM_ADDR);               
  99.   Write_E2PROM(add);                        
  100.         Write_E2PROM(dat);                        
  101.         stop();                                                
  102.         dnms(4);
  103. }

  104. uchar        Read_E2PROM(uchar set_addr)
  105. {
  106.         start();
  107.         Read_E2PROM(E2PROM_ADDR);               
  108.         Read_E2PROM(set_addr);               
  109.         return (Read_E2PROM());               
  110. }

  111. void BufToSeg(void)                        
  112. {                       
  113.         uchar i=0;
  114.         uchar x;
  115.   for(i=0;i<8;i++)
  116.          {
  117.         
  118.            P0=led_mod[10];                       
  119.                  P2= BitCode[i];                       
  120.                  P0=led_mod[convert[i]];               
  121.                  if(P1=0x7b){
  122.                   Write_E2PROM(0x00,convert[i]);
  123.                  }
  124.                  if(P1=0xe7){
  125.                         x=Read_E2PROM(0x00);
  126.                         P0=led_mod[10];                       
  127.                         P2= BitCode[x];                       
  128.                   P0=led_mod[convert[x]];               
  129.                  }
  130.         }
  131. }



  132. void main(void)
  133. {
  134.         EA=1;
  135.         EX0=1;                        
  136.         IT0=1;                        
  137.         while(1)
  138.         {
  139.                 P1=0x0f;
  140.                 BufToSeg();

  141.         }
  142. }
复制代码
回复

使用道具 举报

ID:584814 发表于 2020-6-6 08:44 | 显示全部楼层
自己把程序逐行注释一下然后就全明白了
回复

使用道具 举报

ID:769497 发表于 2020-6-6 19:46 | 显示全部楼层
请问24c02是咋用的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表