時間過的真快轉(zhuǎn)眼天氣冷了,這讓懶惰的我都來不及適應(yīng),最近是東一下西一下的 把 IIC總線接口的EEPROM 勉強學會點,留下點痕跡留著以后品味當時的心情吧!

- # include <reg52.h>
- # define uchar unsigned char //宏定義
- # define uint unsigned int
- uchar shi,ge,dd,ff,write; //定義局變量
- sbit sda=P2^1; //聲明P2口
- sbit scl=P2^0; //聲明P2口
- sbit duan=P2^6;
- sbit wei=P2^7;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
- 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} ; //LED數(shù)組顯示
- void delay() //微秒級延時
- { ; ;}
- void delayms(uchar a) //毫秒延時
- {
- uchar x,y;
- for(x=a;x>0;x--)
- for(y=0;y<110;y++);
- }
- void init() //AT24C02初始化
- {
- sda=1;
- delay();
- scl=1;
- delay();
- }
- void start() //AT24C02啟動信號
- {
- sda=1;
- delay();
- scl=1;
- delay();
- sda=0;
- delay();
- }
- void stop() //AT24C02停止信號
- {
- sda=0;
- delay();
- scl=1;
- delay();
- sda=1;
- delay();
- }
- void respons() //AT24C02應(yīng)答
- {
- uchar i;
- scl=1;
- delay();
- while((sda==1)&&(i<255))i++;
- scl=0;
- delay();
- }
- void write_byte(uchar a) //AT24C02寫一個字節(jié)
- {
- uchar i,j;
- j=a;
- for(i=0;i<8;i++)
- {
- scl=0;
- delay();
- j=j<<1;
- sda=CY;
- scl=1;
- delay();
- }
- scl=0;
- delay();
- sda=1;
- delay();
- }
- uchar read_byte() //AT24C02讀一個字節(jié)
- {
- uchar i,j;
- for(i=0;i<8;i++)
- {
- scl=0;
- delay();
- sda=1;
- delay();
- scl=1;
- j=(j<<1)|sda;
- delay();
- }
- return j;
- }
- void add_write(uchar address,uchar date) //AT240C2任意地址寫一個字節(jié)數(shù)據(jù)
- {
- start();
- write_byte(0xae);
- respons();
- write_byte(address);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- uchar add_read_byte(uchar address) //AT24C02任意地址讀
- {
- uchar w;
- start();
- // respons();
- write_byte(0xae);
- // delayms(100);
- respons();
- write_byte(address);
- respons();
- start();
- write_byte(0xaf);
- respons();
- w=read_byte();
- stop();
- return w;
- }
- void display(uchar shi,uchar ge) //LED數(shù)碼管顯示
- {
- //shi=dd/10;
- //ge=dd%10;
- wei=0;
- duan=1;
- P0=table[shi];
- duan=0;
- P0=0xff;
- wei=1;
- P0=0xfe;
- wei=0;
- delayms(10);
- P0=0xff;
- duan=1;
- P0=table[ge];
- duan=0;
- P0=0xff;
- wei=1;
- P0=0xfd;
- delayms(5);
- wei=0;
- }
- void stime() //初始化定時器0并啟動
- {
- TMOD=0X01;
- TH1=(65535-5000)/256;
- TH0=(65535-5000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void t0()interrupt 1 //定時器0中斷函數(shù)并重新裝初值
- {
- uchar i;
- TH1=(65535-5000)/256;
- TH0=(65535-5000)%256;
- i++;
- if(i==20)
- { write++;
- ff=1;
- i=0;
- if(write==100)
- write=0;
- }
- }
- void main() //主程序
- {
- init();
- write=add_read_byte(5);
- if(write>100)
- write=0;
- stime();
- while(1)
- {
- // dd=write;
-
- if(ff==1)
- {
- add_write(5,write);
- ff=0;
- }
- display(write/10,write%10);
- }
- }
復制代碼
|