#include <REG51.H> #include <intrins.H> #define uchar unsigned char #define uint unsigned int uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uchar ACT[4]={0x7f,0xbf,0xdf,0xef}; sbit SDA = P3^4; sbit SCL = P3^3; bdata char com_data; sbit mos_bit=com_data^7; sbit low_bit=com_data^0; uchar cnt,x; void delay_iic(int n); uchar rd_24c01(char a); void wr_24c01(char a,char b); /***************************************/ void init(void) { TMOD=0x01; TH0=-(1000/256); TL0=-(1000%256); ET0=1; TR0=1; EA=1; } /********************************/ uchar scan_key(void) { uchar temp; temp=P1; return temp; } /********************************/ void delay(uint k) { uint data i,j; for(i=0;i{for(j=0;j<121;j++) {;}} } /******************************/ void main(void) {uchar key_val; init(); while(1) { key_val=scan_key(); switch(key_val) { case 0xef:if(x<255)x++;delay(300);break; case 0xdf:if(x>0)x--;delay(300);break; case 0xbf:EA=0;wr_24c01(10,x);delay_iic(250);EA=1;break; case 0x7f:EA=0;x=rd_24c01(10);delay_iic(250);EA=1;break; default:break; } } } /************************************/ void time0(void) interrupt 1 { uchar dis_val; TH0=-(1000/256); TL0=-(1000%256); dis_val=x; if(++cnt>2)cnt=0; switch (cnt) { case 0:P0=SEG7[dis_val%10];P2=ACT[cnt];break; case 1:P0=SEG7[(dis_val%100)/10];P2=ACT[cnt];break; case 2:P0=SEG7[dis_val/100];P2=ACT[cnt];break; default:break; } } /**************************************/ void start() { SDA=1;_nop_();_nop_();_nop_();_nop_(); SCL=1;_nop_();_nop_();_nop_();_nop_(); SDA=0;_nop_();_nop_();_nop_();_nop_(); SCL=0;_nop_();_nop_();_nop_();_nop_(); } //***************************************** void stop() { SDA=0;_nop_();_nop_();_nop_();_nop_(); SCL=1;_nop_();_nop_();_nop_();_nop_(); SDA=1;_nop_();_nop_();_nop_();_nop_(); } //*********************** void ack() { SCL=1;_nop_();_nop_();_nop_();_nop_(); SCL=0;_nop_();_nop_();_nop_();_nop_(); } //*********************** void shift8(char a) { data uchar i; com_data=a; for(i=0;i<8;i++) { SDA=mos_bit; SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); com_data=com_data*2; } } //****************** uchar rd_24c01(char a) { data uchar i,command; SDA=1;_nop_();_nop_();_nop_();_nop_(); SCL=0;_nop_();_nop_();_nop_();_nop_(); start(); command=160; shift8(command); ack(); shift8(a); ack(); start(); command=161; shift8(command); ack(); SDA=1;_nop_();_nop_();_nop_();_nop_(); for(i=0;i<8;i++) { com_data=com_data*2; SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); low_bit=SDA; SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } stop(); return(com_data); } //***************** void wr_24c01(char a,char b) { data uchar command; _nop_();_nop_();_nop_();_nop_();_nop_(); SDA=1;_nop_();_nop_();_nop_();_nop_(); SCL=0;_nop_();_nop_();_nop_();_nop_(); start(); command=160; shift8(command); ack(); shift8(a); ack(); shift8(b); ack(); stop(); _nop_();_nop_();_nop_();_nop_();_nop_(); } //*************** void delay_iic(int n) { int i; for(i=1;i} |
用户137602 2008-5-7 13:05