|
本實驗是基于單片機的秒表程序上讀寫數(shù)據(jù)至24c02芯片,如數(shù)碼管顯示18,關(guān)掉電源,重新給單片機上電,然后可以看到數(shù)碼管上的數(shù)字會重18開始繼續(xù)及時。
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- bit write=0;
- sbit sda=P2^0;
- sbit scl=P2^1;
- sbit wei0=P1^0;
- sbit wei1=P1^1;
- uchar sec,tcnt;
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void delay()
- { ; ; }
- void delayms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void start()
- {
- sda=1;
- delay();
- scl=1;
- delay();
- sda=0;
- delay();
- }
- void stop()
- {
- sda=0;
- delay();
- scl=1;
- delay();
- sda=1;
- delay();
- }
- void respons()
- {
- uchar i;
- scl=1;
- delay();
- while((sda==1)&&(i<250))i++;
- scl=0;
- delay();
- }
- void init()
- {
- sda=1;
- delay();
- scl=1;
- delay();
- }
- void write_byte(uchar date)
- {
- uchar i,temp;
- temp=date;
- for(i=0;i<8;i++)
- {
- temp=temp<<1;
- scl=0;
- delay();
- sda=CY;
- delay();
- scl=1;
- delay();
- }
- scl=0;
- delay();
- sda=1;
- delay();
- }
- uchar read_byte()
- {
- uchar i,k;
- scl=0;
- delay();
- sda=1;
- delay();
- for(i=0;i<8;i++)
- {
- scl=1;
- delay();
- k=(k<<1)|sda;
- scl=0;
- delay();
- }
- return k;
- }
- void write_add(uchar address,uchar date)
- {
- start();
- write_byte(0xa0);
- respons();
- write_byte(address);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- uchar read_add(uchar address)
- {
- uchar date;
- start();
- write_byte(0xa0);
- respons();
- write_byte(address);
- respons();
- start();
- write_byte(0xa1);
- respons();
- date=read_byte();
- stop();
- return date;
- }
- void display(uchar shi,uchar ge)
- {
-
- wei0=1;
- wei1=1;
- P0=table[shi];
- wei0=0;
- delayms(10);
- wei0=1;
- wei1=0;
- P0=table[ge];
- delayms(10);
- wei1=1;
- }
- void main()
- {
- init();
- sec=read_add(2);
- if(sec>100)sec=0;
- TMOD=0x01;
- ET0=1;
- EA=1;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- while(1)
- {
- display(sec/10,sec%10);
- if(write==1)
- {
- write=0;
- write_add(2,sec);
- }
- }
- }
- void t0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- tcnt++;
- if(tcnt==20)
- {
- tcnt=0;
- sec++;
- write=1;
- if(sec==100)
- sec=0;
- }
- }
復(fù)制代碼
|
-
-
at24c02.rar
2015-11-11 20:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
34.29 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5
評分
-
查看全部評分
|