C51程序先显示程序.doc
#include<reg52.h>#define uchar unsigned char#define uint unsigned intbit write=0;sbit scl=P33;sbit sda=P34;uchar code bable=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uchar aa;uint sec;void delay();void xunhuan(uint z)uint x,y;for(x=z;x>0;x-) for(y=110;y>0;y-);void start()scl=1;sda=1;delay();sda=0;delay();scl=0;void stop()scl=0;sda=0;scl=1;delay();sda=1;delay();void answer()sda=0;scl=0;scl=1;delay();scl=0;void unanswer()sda=1;scl=0;scl=1;delay();scl=0;void init()sda=1;delay();scl=1;delay();void wr_by(uchar dig)uchar temp,i;temp=dig;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 re_by()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 wr_dig(uchar address,uint dig)start();wr_by(0xa0);answer();wr_by(address);answer();wr_by(dig/100);answer();wr_by(dig%100);unanswer();stop();uchar re_dig(uchar address)uint dig,dig1;start();wr_by(0xa0);answer();wr_by(address);answer();start();wr_by(0xa1);answer();dig=re_by();answer();dig1=re_by();unanswer();stop();return (dig*100+dig1);void display (uchar qian,uchar bai,uchar shi,uchar ge)P2=bable0;P0=tableqian;xunhuan(3); P2=bable1;P0=tablebai;xunhuan(3);P2=bable2;P0=tableshi;xunhuan(3);P2=bable3;P0=tablege;xunhuan(3);void main()init();sec=re_dig(1);if(sec>10000)sec=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1)display(sec/1000,sec%1000/100,sec%100/10,sec%10);if(write=1) write=0;wr_dig(1,sec);void inter() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;if(aa=2) aa=0;write=1;sec+;if(sec=10000)sec=0;