已經(jīng)解決了
謝謝大家了 大家么事可以看哈!
可以斷電存儲!!!!!!
#include<reg52.h> char code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f } ;
sbit dula=P2^6; sbit wela=P2^7; sbit sda=P2^0; //數(shù)據(jù)線 sbit scl=P2^1; //時鐘線 char aa ,bb,cc,temp,shi,ge,tt; int read_add(char); char read_byte(); void delay() //延時5微秒 {; ;}
void delay1(int z) { int x,y; for(x=0;x<z;x++) for(y=0;y<110;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() //應(yīng)答信號 { char i; scl=1; delay(); while((sda==1)&&(i<250)) //等待應(yīng)答 如果有應(yīng)答或者一段時間后沒有應(yīng)答就跳出 i++; scl=0; delay(); }
void init() //初始化 { aa=0; bb=0; cc=1; tt=read_add(23); temp=tt; ge= tt%10; shi=tt/10; // temp=0; //sda=1; //把總線打開 // scl=1; TMOD=0X01; //打開計數(shù)器0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; EA=1; ET0=1; }
void write_byte(char date) //讀取一個字節(jié) { char i,temp; temp=date; scl=0; delay(); for(i=0;i<8;i++) //移動八位是一個字節(jié) { temp=temp<<1; //左移移位后 將最高位移到了CY當(dāng)中 sda=CY; //將最高位送出去 delay(); scl=1; delay(); scl=0; delay(); } sda=1; //釋放總線 delay(); }
char read_byte() //讀字節(jié) { char i,j,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); j=sda; k=(k<<1)|j;//將j給k八次 剛好k里面存著八個數(shù)據(jù) scl=0; delay(); } return k; }
void write_add(char address,char date) //在制定的位置寫數(shù)據(jù) { start(); write_byte(0xa0);//這是器件的地址 前四位固定 后三位是0 最后一個是0 表示往里面寫數(shù)據(jù) respons();//寫完后等待應(yīng)答 write_byte(address);//寫地址 器件內(nèi)部存儲的地址 respons(); write_byte(date);//往里面寫數(shù)據(jù) respons(); stop(); }
int read_add(char address) { char date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } void display(int shi,int ge) { /* P0=0X00; P1=0x0e; P0=table[bai]; delay(z); */ // dula=0; dula=1; P0=table[ge]; //送數(shù)字8到段碼端口 // dula=1; dula=0;
wela=0; P0=0xfd; //數(shù)碼管位選 wela=1; wela=0;;
//dula=1; // write_add(bb,table[shi]); // delay1(100); // dula=1; // P0=table[shi]; // dula=0; // write_add(bb,table[shi]); // delay1(100); delay1(1); /* wela=1; P0=0xfd; wela=0; delay1(1); */ // dula=0; dula=1; P0=table[shi]; //送數(shù)字8到段碼端口 // dula=1; dula=0;
wela=0; P0=0xfe; //數(shù)碼管位選 wela=1; wela=0; //dula=1; // write_add(bb,table[ge]); // delay1(100); // dula=1; // dula=0; // write_add(cc,table[ge]); delay1(1); /* wela=1; P0=0xfe; wela=0; delay1(1); */ } void main() { init(); /* wela=1; P0=0xfc; wela=0; */ while(1) { if(aa==20) { aa=0; temp++; write_add(23,temp); if(temp==100) temp=0; shi=temp/10; ge=temp%10; } display( shi, ge); /* write_add(23,table[]); delay1(100); P1=read_add(23); */ } // while(1); } void timer0() interrupt 1 { A TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; } |