找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1758|回复: 0
收起左侧

EEPROM基本应用之存一首歌

[复制链接]
ID:21069 发表于 2018-12-21 04:41 | 显示全部楼层 |阅读模式
QQ截图20181221043750.jpg

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define NOP4() {_nop_();_nop_();_nop_();_nop_();}

  6. sbit SCL = P1^0;
  7. sbit SDA = P1^1;
  8. sbit SPK = P3^0;

  9. uchar code HI_LIST[] =
  10. {
  11.          0,226,229,232,233,236,238,240,241,242,245,246,247,248
  12. };
  13. uchar code LO_LIST[] =
  14. {
  15.          0,4,13,10,20,3,8,6,2,23,5,26,1,4,3
  16. };
  17. uchar code Song_24C04[] =
  18. {
  19.          1,2,3,1,1,2,3,1,3,4,5,3,4,5
  20. };
  21. uchar sidx;

  22. void DelayMS(uint x)
  23. {
  24.         uchar t;
  25.         while(x--)
  26.         {
  27.                  for(t=120;t>0;t--);
  28.         }
  29. }

  30. void Start()
  31. {
  32.          SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;
  33. }

  34. void Stop()
  35. {
  36.          SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;
  37. }

  38. void RACK()
  39. {
  40.          SDA=1;NOP4();SCL=1;NOP4();SCL=0;
  41. }

  42. void NO_ACK()
  43. {
  44.          SDA=1;SCL=1;NOP4();SCL=0;SDA=0;
  45. }


  46. void Write_IIC(uchar addr,uchar dat)
  47. {
  48.          Start();
  49.         Write_A_Byte(0xa0);
  50.         Write_A_Byte(addr);
  51.         Write_A_Byte(dat);
  52.         Stop();
  53.         DelayMS(10);
  54. }

  55. uchar Read_A_Byte()
  56. {
  57.          uchar i,b;
  58.         for(i=0;i<8;i++)
  59.         {
  60.                  SCL=1;b<<=1;B|=SDA;SCL=0;
  61.         }
  62.         return b;
  63. }

  64. uchar Read_Current()
  65. {
  66.          uchar d;
  67.         Start();
  68.         Write_A_Byte(0xa1);
  69.         d=Read_A_Byte();
  70.         NO_ACK();
  71.         Stop();
  72.         return d;
  73. }

  74. uchar Random_Read(uchar addr)
  75. {
  76.          Start();
  77.         Write_A_Byte(0xa0);
  78.         Write_A_Byte(addr);
  79.         Stop();
  80.         return Read_Current();               
  81. }


  82. void main()
  83. {
  84.          uchar i;
  85.         IE=0x82;
  86.         TMOD=0x00;
  87.         for(i=0;i<14;i++)
  88.         {
  89.                  Write_IIC(i,Song_24C04[i]);        
  90.         }
  91.         while(1)
  92.         {
  93.                  for(i=0;i<14;i++)
  94.                 {
  95.                          sidx=Random_Read(i);
  96.                         TR0=1;
  97.                         DelayMS(300);
  98.                 }
  99.         }
  100. }
复制代码


完整代码见附件

EEPROM基本应用.rar (8.69 KB, 下载次数: 20)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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