找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1992|回复: 0
打印 上一主题 下一主题
收起左侧

24C08多花样流水灯单片机实验代码

[复制链接]
跳转到指定楼层
楼主
ID:351087 发表于 2018-6-13 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验用

单片机源程序如下:

  1. /****************************************************************
  2.                                                               
  3.             程序名称:   24C08多花样流水灯实验
  4.             版本:   VER1.0
  5.             适用板本:  YL-51开发板
  6.                   
  7. *****************************************************************/

  8. #include <reg52.h>
  9. #include <intrins.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. #define OP_WRITE 0xa0          // 器件地址以及写入操作
  13. #define OP_READ  0xa1           // 器件地址以及读取操作
  14. uchar code display[72]={
  15.         0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
  16.         0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
  17.         0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
  18.         0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
  19.         0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,
  20.         0x9F,0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,
  21.         0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
  22.         0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
  23.         0xAA,0x55,0x18,0xFF,0xF0,0x0F,
  24.         0x00,0xFF,0x00,0xFF };
  25. sbit SDA = P2^0;
  26. sbit SCL = P2^1;
  27. void start();
  28. void stop();
  29. uchar shin();
  30. bit shout(uchar write_data);
  31. void write_byte( uchar addr, uchar write_data);
  32. void fill_byte(uchar fill_size,uchar fill_data);
  33. void delayms(uint ms);
  34. uchar read_current();
  35. uchar read_random(uchar random_addr);
  36. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  37. /**********************************************************/
  38. main(void)
  39. {
  40.    uchar i;
  41.    SDA = 1;
  42.    SCL = 1;
  43.    fill_byte(72,0xff);          // 将前72字节填充0xff
  44.    for(i = 0 ; i < 72; i++)    //写入显示代码到AT24C02
  45.     {
  46.       write_byte(i,display[i]);
  47.     }
  48.    for(i =0 ;i <72 ; i++)      //从AT24C02移出数据送到P0口显示
  49.    {
  50.       P1 = read_random(i);
  51.       delayms(350);
  52.    }  
  53. }
  54. /**********************************************************/
  55. void start()
  56. //开始位
  57. {
  58.    SDA = 1;
  59.    SCL = 1;
  60.    delayNOP();
  61.    SDA = 0;
  62.    delayNOP();
  63.    SCL = 0;
  64. }
  65. /**********************************************************/
  66. void stop()
  67. // 停止位
  68. {
  69.    SDA = 0;
  70.    delayNOP();
  71.    SCL = 1;
  72.    delayNOP();
  73.    SDA = 1;
  74. }
  75. /**********************************************************/
  76. uchar shin()
  77. // 从AT24C02移出数据到MCU
  78. {
  79.    uchar i,read_data;
  80.    for(i = 0; i < 8; i++)
  81.    {
  82.     SCL = 1;
  83.     read_data <<= 1;
  84.     read_data |= SDA;
  85.     SCL = 0;
  86.    }
  87.     return(read_data);
  88. }
  89. /**********************************************************/
  90. bit shout(uchar write_data)  
  91. // 从MCU移出数据到AT24C02
  92. {
  93.    uchar i;
  94.    bit ack_bit;
  95.    for(i = 0; i < 8; i++)   // 循环移入8个位
  96.    {
  97.      SDA = (bit)(write_data & 0x80);
  98.     _nop_();
  99.     SCL = 1;
  100.     delayNOP();
  101.     SCL = 0;
  102.     write_data <<= 1;
  103.    }
  104.    SDA = 1;                     // 读取应答
  105.    delayNOP();
  106.    SCL = 1;
  107.    delayNOP();
  108.    ack_bit = SDA;
  109.    SCL = 0;
  110.    return ack_bit;            // 返回AT24C02应答位
  111. }
  112. /**********************************************************/
  113. void write_byte(uchar addr, uchar write_data)
  114. // 在指定地址addr处写入数据write_data
  115. {
  116.    start();
  117.    shout(OP_WRITE);
  118.    shout(addr);
  119.    shout(write_data);
  120.    stop();
  121.    delayms(10);          // 写入周期
  122. }
  123. /**********************************************************/
  124. void fill_byte(uchar fill_size,uchar fill_data)
  125. // 填充数据fill_data到EEPROM内fill_size字节
  126. {
  127.    uchar i;
  128.    for(i = 0; i < fill_size; i++)
  129.    {
  130.      write_byte(i, fill_data);
  131.    }
  132. }
  133. /**********************************************************/
  134. uchar read_current()
  135. // 在当前地址读取
  136. {
  137.    uchar read_data;
  138.    start();
  139.    shout(OP_READ);
  140.    read_data = shin();
  141.    stop();
  142.    return read_data;
  143. }
  144. /**********************************************************/
  145. uchar read_random(uchar random_addr)
  146. // 在指定地址读取
  147. {
  148.    start();
  149.    shout(OP_WRITE);
  150.    shout(random_addr);
  151.    return(read_current());
  152. }
  153. /**********************************************************/
  154. void delayms(uint ms)  
  155. // 延时子程序
  156. {
  157.    uchar k;
  158.    while(ms--)
  159.    {
  160.       for(k = 0; k < 120; k++);
  161.    }
  162. }

复制代码

所有资料51hei提供下载:
014-24C02多花样流水灯实验.rar (2.01 KB, 下载次数: 15)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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