|
本实验是基于单片机的秒表程序上读写数据至24c02芯片,如数码管显示18,关掉电源,重新给单片机上电,然后可以看到数码管上的数字会重18开始继续及时。
- #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;
- }
- }
复制代码
|
评分
-
查看全部评分
|