⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 串行e2prom93c46扩展.c

📁 单片机 串行E2PROM93C46扩展
💻 C
字号:


/* 文件名:(C12.c)   */
#include<reg51.h>
#include<intrins.h>
#include <absacc.h>
#include<string.h>
#define  uchar unsigned char
#define  uint  unsigned int
#define  COM     XBYTE[0xe100]  /*命令口*/
#define  OUTBIT  XBYTE[0xe101]  /* 位控制口 */
#define  CLK164  XBYTE[0xe102]  /* 段控制口(接164时钟位) */
#define  DAT164  XBYTE[0xe102]  /* 段控制口(接164数据位) */
#define  IN      XBYTE[0xe103]  /* 键盘读入口 */
uint datum;
uint time=0;
sbit SK=P1^5;
sbit DI=P1^6;
sbit DO=P1^7;
sbit CS=P1^4;
sbit K0=P1^3;
uchar    buf[6];                /*  显示缓冲 */
uchar    code    tab[17]={      /*  八段管显示码 */
                          0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7,
                          0x7f, 0x6f,0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0
                          };
void wbyte(uchar  x)
{     uchar i;
      for(i=0;i<8;i++)
      {    DI=x&0x80;
           SK=1;
           SK=0;
           x<<=1;
           _nop_();
      }
}
void delay()
{     uint x;
      x=200; while(--x);
}
start()
{   CS=0;
    SK=0;
    CS=1;
    DI=1;
    SK=1;
    SK=0;
}
void Ewen(void)                      /*擦除写允许*/
{    start();
     wbyte(0x30);
     CS=0;
}
void Ewds()                          /*擦除写禁止 */
{    start();
     wbyte(0x0);
     CS=0;
}
uint Read(uchar adr)                 /*读某地址16位数据 */
{       uchar data i;
        uint  data result;
        start();
        i=adr&0x3f|0x80;             /*发读数据命令 */
        wbyte(i);
        DO=1;
        for(i=0;i<16;i++)            /*接收16位数据*/
        {  SK=1;
           result=(result<<1)|DO;
           SK=0;
        }
        CS=0;
        return(result);
}
void Write(uchar adr,uint dat)       /*写16位数据(dat)到某地址(adr) */
{      uchar data i;
       Ewen();
       delay();                 
       start();
       i=adr&0x3f|0x40;
       wbyte(i);                     /* 发擦除写允许命令*/
       for(i=0;i<16;i++)             /* 写16位数据 */
       {  DI=dat&0x8000;
          SK=1; SK=0;
          dat<<=1;
       }
       CS=0; DO=1;
       CS=1; 
       SK=1;
       _nop_();
       while(!DO)                  /* 判断芯片闲/忙 */
       { SK=0;  SK=1;}             /*忙继续等待      */
       SK=0; 
       CS=0;
       delay();
       Ewds();
}
void Wral()     /*擦除整个空间 */
{   Ewen();
    delay(); 
    start();   
    wbyte(0x20);
    CS=0;
    DO=1;
    CS=1;
    SK=1; 
    SK=0;
    while(!DO)
    {    SK=1;  SK=0;
    }
    CS=0; 
    delay();
    Ewds();
}
void sdelay()         /* 延时子程序 */
{     uint x=200;
      while(--x);
}
void disp()
{       static uchar temp;
        uchar i,j,shift=0x20,x;               /* 从左边开始显示 */
        for(i=0;i<6;i++)                      /*   共6个八段管  */
        {     OUTBIT=00;                      /* 关所有八段管   */
              temp=0;
              x=tab[buf[i]];
              for(j=0;j<8;j++)                /* 送164  */
              {  if( x&0x80)   temp|=1;      
                 else          temp&=0xfe;
                 DAT164=temp;
                 temp|=2;                     /*CLK='1'  */
                 CLK164=temp;
                 temp&=0xfd;;                 /* CLK='0' */
                 CLK164=temp;
                 x=x<<1;
              }
              OUTBIT=shift;                   /* 显示一位八段管 */
              shift>>=1;                      /* 显示下一位     */
              sdelay();
        }
}
main()
{  uchar  data  i;
   SP=0x60;
   PSW=0;
   COM=0x3;
   delay();
   while(1)
   {  if(K0)
      { Write(0x10,0x4121);   /* 向0x10,0x11单元分别写入0x412186xx */
        Write(0x11,0x8600);
        memset(buf,0x0,6);    /*设置显示为"000000"*/
      }
      else
      { datum=Read(0x10);     /* 从0x10,0x11单元分别读数据 */
        buf[0]=(char)((datum&0xf000)>>12);
        buf[1]=(char)((datum&0xf00)>>8);
        buf[2]=(char)((datum&0xf0)>>4);
        buf[3]=(char)(datum&0xf);
        datum=Read(0x11);
        buf[4]=(char)((datum&0xf000)>>12 );
        buf[5]=(char)((datum&0xf00)>>8);
      }
      for(i=0;i<20;i++)
      disp();                  /*显示 */
   }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -