找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4261|回复: 5
收起左侧

at24c20的应用 基于单片机的秒表程序上读写数据至24c02芯片

[复制链接]
ID:84299 发表于 2015-11-11 20:21 | 显示全部楼层 |阅读模式
本实验是基于单片机的秒表程序上读写数据至24c02芯片,如数码管显示18,关掉电源,重新给单片机上电,然后可以看到数码管上的数字会重18开始继续及时。
  1.         #include<reg51.h>
  2.                 #define uchar unsigned char
  3.                 #define uint unsigned int

  4.                 bit write=0;
  5.                 sbit sda=P2^0;
  6.                 sbit scl=P2^1;
  7.                 sbit wei0=P1^0;
  8.                 sbit wei1=P1^1;
  9.                 uchar sec,tcnt;
  10.                 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  11.                 void delay()
  12.                 { ; ; }
  13.                 void delayms(uint z)
  14.                 {
  15.                         uint x,y;
  16.                         for(x=z;x>0;x--)
  17.                         for(y=110;y>0;y--);

  18.                 }
  19.                 void start()
  20.                 {
  21.                         sda=1;
  22.                         delay();
  23.                         scl=1;
  24.                         delay();
  25.                         sda=0;
  26.                         delay();
  27.                 }
  28.                 void stop()
  29.                 {
  30.                         sda=0;
  31.                         delay();
  32.                         scl=1;
  33.                         delay();
  34.                         sda=1;
  35.                         delay();
  36.                 }
  37.                 void respons()
  38.                 {
  39.                         uchar i;
  40.                         scl=1;
  41.                         delay();
  42.                         while((sda==1)&&(i<250))i++;
  43.                         scl=0;
  44.                         delay();
  45.                 }
  46.                 void init()
  47.                 {
  48.                         sda=1;
  49.                         delay();
  50.                         scl=1;
  51.                         delay();
  52.                 }
  53.                 void write_byte(uchar date)
  54.                 {
  55.                         uchar i,temp;
  56.                         temp=date;
  57.                         for(i=0;i<8;i++)
  58.                         {
  59.                                 temp=temp<<1;
  60.                                 scl=0;
  61.                                 delay();
  62.                                 sda=CY;
  63.                                 delay();
  64.                                 scl=1;
  65.                                 delay();
  66.                         }
  67.                         scl=0;
  68.                         delay();
  69.                         sda=1;
  70.                         delay();
  71.                 }
  72.                 uchar read_byte()
  73.                 {
  74.                         uchar i,k;
  75.                         scl=0;
  76.                         delay();
  77.                         sda=1;
  78.                         delay();
  79.                         for(i=0;i<8;i++)
  80.                         {
  81.                                 scl=1;
  82.                                 delay();
  83.                                 k=(k<<1)|sda;
  84.                                 scl=0;
  85.                                 delay();
  86.                         }
  87.                     return k;
  88.                 }
  89.                 void write_add(uchar address,uchar date)
  90.                 {
  91.                         start();
  92.                         write_byte(0xa0);
  93.                         respons();
  94.                         write_byte(address);
  95.                         respons();
  96.                         write_byte(date);
  97.                         respons();
  98.                         stop();
  99.                 }
  100.                 uchar read_add(uchar address)
  101.                 {
  102.                         uchar date;
  103.                         start();
  104.                         write_byte(0xa0);
  105.                         respons();
  106.                         write_byte(address);
  107.                         respons();
  108.                         start();
  109.                         write_byte(0xa1);
  110.                         respons();
  111.                         date=read_byte();
  112.                         stop();
  113.                         return date;

  114.                 }
  115.                 void display(uchar shi,uchar ge)
  116.                 {
  117.                        
  118.                         wei0=1;
  119.                         wei1=1;
  120.                         P0=table[shi];
  121.                         wei0=0;
  122.                         delayms(10);
  123.                         wei0=1;
  124.                         wei1=0;
  125.                         P0=table[ge];
  126.                         delayms(10);
  127.                         wei1=1;
  128.                 }
  129.                 void main()
  130.                 {
  131.                         init();
  132.                         sec=read_add(2);
  133.                         if(sec>100)sec=0;
  134.                         TMOD=0x01;
  135.                         ET0=1;
  136.                         EA=1;
  137.                         TH0=(65536-50000)/256;
  138.                         TL0=(65536-50000)%256;
  139.                         TR0=1;
  140.                         while(1)
  141.                         {
  142.                                 display(sec/10,sec%10);
  143.                                 if(write==1)
  144.                                 {
  145.                                         write=0;
  146.                                         write_add(2,sec);
  147.                                 }
  148.                         }
  149.                 }
  150.                 void t0() interrupt 1
  151.                 {
  152.                          TH0=(65536-50000)/256;
  153.                         TL0=(65536-50000)%256;
  154.                         tcnt++;
  155.                         if(tcnt==20)
  156.                         {
  157.                                 tcnt=0;
  158.                                 sec++;
  159.                                 write=1;
  160.                                 if(sec==100)
  161.                                 sec=0;
  162.                         }
  163.                 }
复制代码


at24c02.rar

34.29 KB, 下载次数: 15, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

ID:1 发表于 2015-11-12 00:23 | 显示全部楼层
楼主能分享下电路图吗?
回复

使用道具 举报

ID:84299 发表于 2015-11-12 12:34 | 显示全部楼层
admin 发表于 2015-11-12 00:23
楼主能分享下电路图吗?

不好意思,我没有画电路图,这些程序都是基于我自己焊的板子写的,一般的开发板都有这些硬件吧。
回复

使用道具 举报

ID:95423 发表于 2015-11-12 13:10 | 显示全部楼层
这是郭天祥的。
回复

使用道具 举报

ID:84299 发表于 2015-11-12 13:14 | 显示全部楼层
是啊,上学期刚开始学单片机的时候学的。
回复

使用道具 举报

ID:114643 发表于 2016-4-17 22:44 来自手机 | 显示全部楼层
很好,3231时钟有点象。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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