5v供电,我把所有地址管脚都拉低了,怎么在串口收到的是0x01?
- #include<reg51.h>
- #include<intrins.h>
- #include<USART.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SCL=P2^1;
- sbit SDA=P2^0;
- uchar code displaycode[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
- uchar code displaybit[]={0xfe,0xfd,0xfb,0xf7};
- uchar displaybuf[3];
- void delayX2us(uchar x) //????
- {
- while(--x);
- }
- void delayXms(uchar x) //????
- {
- uchar i;
- while(x--)
- {
- for(i=250;i>0;i--)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- void start ()
- {
- SDA=1;
- delayX2us(2);
- SCL=1;
- delayX2us(2);
- SDA=0;
- delayX2us(2);
- }
- void stop ()
- {
- SDA=0;
- delayX2us(2);
- SCL=1;
- delayX2us(2);
- SDA=1;
- delayX2us(2);
- }
- void init()
- {
- SCL=1;
- delayX2us(2);
- SDA=1;
- delayX2us(2);
- }
- void responds()
- {
- uchar i;
- i=0;
- SCL=1;
- delayX2us(2);
- while(SDA==1&&i<200)
- i++;
- SCL=0;
- delayX2us(2);
- }
- void write_dat (uchar dat) //?????
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- SCL=0;
- delayX2us(2);
- SDA=(bit)(dat&0x80);
- delayX2us(2);
- SCL=1;
- delayX2us(2);
- SCL=0;
- delayX2us(2);
- dat<<=1;
- }
- SDA=1;
- delayX2us(2);
- }
- void write(uchar dat,uchar add) // ?????dat???add
- {
- start();
- write_dat(0xa0);
- responds();
- write_dat(add);
- responds();
- write_dat(dat);
- responds();
- stop();
- }
- uchar read_dat () //?????
- {
- uchar i;
- uchar dat;
- bit j;
- for (i=0;i<8;i++)
- {
- dat<<=1;
- SCL=0;
- j=SDA;
- delayX2us(2);
- SCL=1;
- if(j==1)
- {
- dat|=0x01;
- }
- SCL=0;
- }
- return dat;
- }
- uchar read (uchar add) //???add???????
- {
- uchar dat;
- start();
- write_dat(0xa0);
- responds();
- write_dat(add);
- responds();
- start();
- write_dat(0xa1);
- responds();
- dat=read_dat();
- delayX2us(2);
- stop();
- return dat;
- }
- void display(uchar dat) //????
- {
- uchar bai,shi,ge,i;
- bai=dat/100;
- shi=dat%100/10;
- ge=dat%10;
- displaybuf[0]=bai;
- displaybuf[1]=shi;
- displaybuf[2]=ge;
- for(i=0;i<3;i++)
- {
- P0=displaycode[displaybuf[i]];
- P1=displaybit[i];
- delayX2us(5);
- P1=0xff;
- }
- }
- void main ()
- {int i=0;
- uchar dat,add,k;
- dat=212;
- add=2;
- USART_Init();
- init();
- start();
- write_dat(0xa0);
- delayX2us(2);
- SCL=1;
- while(SDA==1&&i<200)
- i++;
- SBUF=SDA;
- while(1);
- }
复制代码
一周热门 更多>