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

📄 led移位显示测试.c

📁 采用DS12C887做时钟
💻 C
字号:
  #include <AT89X52.H>
   #include <INTRINS.h> 
 unsigned char code Tab[]={0xff,0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,
                           0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,0xff};
 unsigned char code codedisplay[]={0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDC,0x03,0x03,0xBF,0xDF,0xBF,0x88,0x01,0x97,0xFF,
								   0x97,0xBF,0x5F,0xBF,0xDC,0x03,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xD0,0x01,0xDF,0xFF,/*"桂",0*/
								   0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0x02,0x01,0xEF,0xDF,0xEF,0x9F,0xC7,0x8F,
                                   0xCB,0x4F,0xAB,0x57,0xAE,0xD7,0x6D,0xD9,0xEB,0xDB,0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,/*"林",1*/
								   0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,
								   0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xFE,0xFD,0xFE,0xFD,0xFF,0x01,0xFF,0xFF,/*"电",2*/
								   0xFF,0xFF,0xC0,0x1F,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0xFE,0xFF,0xFE,0xFF,0xFE,0xFB,
								   0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFA,0xFF,0xFD,0xFF};/*"子",3*/
  unsigned char  display_buff[8];
  unsigned char  m,addr,dat=0;
 #ifndef   I2C_H   
  #define   I2C_H   
  typedef   unsigned   char   uchar;     //重新定义数据类型   
  typedef   unsigned   int     uint;       
  const    uchar   WR24C02   =   0xa0;     //读写控制命令    //EEPROM地址+写命令   
  const    uchar   RD24C02   =   0xA1;                       //EEPROM地址+读命令      
  sbit     I2C_SCL   =   P2^4;    //I/O口定义
  sbit     I2C_SDA   =   P2^5;
  bit      ErrorBit;     //用户变量声明      //读写错误标志       1错误     0   正确   
  uchar    idata   ErrorCode;           //错误码    
  uchar    da=0;								  
  //************************函数声明***************************  
  void     Start(void);   
  void     Stop(void);   
  void     Ack(void);   
  void     NoAck(void);   
  void     TestAck(void);   
  void     Write_I2c(uchar   date);   
  uchar    Read_I2c(void);   
  void     DelayMs(uchar   time);   
  void     Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes);   
  void     Read_Date(uchar   StartAddress,uchar   *date,uchar   bytes);   
  #endif   
 unsigned int result,count=0;
 void   Start(void)   
  {       I2C_SDA   =   1;           //起始条件的数据信号   
          _nop_();   
          I2C_SCL   =   1;           //起始条件时钟信号   
          _nop_();                   //信号建立时间>4.7us   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();   
          I2C_SDA   =   0;           //起始信号   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();                   
          _nop_();   
          I2C_SCL   =   0;           //钳住I2C总线,   准备发送或者接受数据   
          _nop_();   
          _nop_();   
  }   
  void   Stop(void)   
  {      I2C_SDA   =   0;             //结束条件的数据信号   
          _nop_();   
          I2C_SCL   =   1;             //结束条件的时钟信号   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();                   
          _nop_();   
          I2C_SDA   =   1;             //结束信号   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();                   
  }   
  void   Ack(void)   
  {      I2C_SDA   =   0;   
          _nop_();   
          _nop_();           
          I2C_SCL   =   1;   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();           
          I2C_SCL   =   0;   
          _nop_();   
          _nop_(); 
		  I2C_SDA   =  1;  
  }   
  void   NoAck(void)   
  {       I2C_SDA   =   1;   
          _nop_();   
          _nop_();   
          I2C_SCL   =   1;   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();   
          _nop_();   
          I2C_SCL   =   0;   
          _nop_();   
          _nop_();   
  }   
  void   TestAck(void)   
  {        I2C_SDA   =   1;   
          _nop_();   
          _nop_();   
          I2C_SCL   =   1;   
          _nop_();   
          _nop_();   
          _nop_();   
          ErrorBit   =   I2C_SDA; 
          I2C_SCL   =   0;   
          _nop_();   
          _nop_();           
  }   
  void   Write_I2c(uchar   date)   
  {       uchar   i; 
          for(i=0;i<8;i++)   
          {   
                  I2C_SDA=date&0x80;                 //送数据到数据线上   
                  date<<=1;   
                  _nop_();                   
                  I2C_SCL=1;                                 //置时钟信号为高电平,使数据有效   
                  _nop_();   
                  _nop_();   
                  _nop_();   
                  _nop_();   
                  _nop_();           
                  I2C_SCL=0;   
                  _nop_(); 
                  _nop_();                   
                    
          }   
  }   
  uchar   Read_I2c(void)   
  {      uchar   i;   
          uchar   byte   =   0;   
          for(i   =   0;   i   <   8;   i++)   
          {      I2C_SCL   =   0;                       //置时钟为低电平,准备接受数据   
                  _nop_();   
                  _nop_();   
                  _nop_();   
                  _nop_();   
                  _nop_();   
                  I2C_SCL   =   1;                     //置时钟为高电平,使数据线数据有效   
                  _nop_();   
                  _nop_();   
                  byte   <<=   1;   
                  byte   |=   I2C_SDA;  
                 _nop_();   
                  _nop_();   
                  I2C_SCL   =   0;   
          }   
          return(byte);   
  }   
  void   DelayMs(uchar   time)   
  {     uchar   i;   
        do   
        {  for(i=0;   i<125 ;   i++);       //*延时   8us   x   125   =   1ms   
        }   
        while   (time--);       
  }   
  void   Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
  {       uchar   i   =   0; 
          Start();   
          Write_I2c(WR24C02);   
          TestAck();  
		  Write_I2c(StartAddress);  
          TestAck();
		   for(i   =   0;i   <   bytes;   i++)   
          {   
             Write_I2c(*date);   
             TestAck(); 
		     date++;   
          }   
                       
          Stop();   
          DelayMs(20);   
  }   
  void   Read_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
  {       uchar   i; 
          Start();   
          Write_I2c(WR24C02);   
		  TestAck();
		  Write_I2c(StartAddress);      
          TestAck(); 
		  Start();  
          Write_I2c(RD24C02);   
          TestAck();  
		   for   (i   =   0;   i<bytes;   i++)   
          {   
             *date=   Read_I2c();
			  
		       Ack();   
               date++;   
          }   
                                     
          NoAck();   
          Stop();   
   
  }   
 
 void delay(void)
{  unsigned char 	i,j;
   for(i=0;i<15;i++){	for(j=0;j<50;j++) ;	}
} 

void main(void)
  {	SCON=0; 	P1=0; SP=0x70;
	 // dat=&display_buff;
	 //for(addr=0;addr<113;addr++)
	   // { Write_Date(addr,codedisplay+dat,1);dat++;      }
    Write_Date(0+16,codedisplay,16);Write_Date(16+16,codedisplay+16,16);Write_Date(32+16,codedisplay+32,16);Write_Date(48+16,codedisplay+48,16);
	Write_Date(64+16,codedisplay+64,16);Write_Date(80+16,codedisplay+80,16);Write_Date(96+16,codedisplay+96,16);Write_Date(112+16,codedisplay+112,16);
   while(1)	   
    {         	
				  for(m=0;m<16;m++)
				   {   Read_Date(2*m+16,display_buff,1);Read_Date(2*m+1+16,display_buff+1,1);Read_Date(32+2*m+16,display_buff+2,1);Read_Date(32+2*m+1+16,display_buff+3,1);
				       Read_Date(64+2*m+16,display_buff+4,1);Read_Date(64+2*m+1+16,display_buff+5,1);Read_Date(96+2*m+16,display_buff+6,1);Read_Date(16+96+2*m+1,display_buff+7,1);
				       SBUF=display_buff[0];    while(!TI) ; TI=0;
		               SBUF=display_buff[1];    while(!TI) ; TI=0; 
			           SBUF=display_buff[2];   while(!TI) ; TI=0; 
			           SBUF=display_buff[3];    while(!TI) ; TI=0;
					   SBUF=display_buff[4];    while(!TI) ; TI=0; 
					   SBUF=display_buff[5];    while(!TI) ; TI=0; 
			           SBUF=display_buff[6];    while(!TI) ; TI=0;
					   SBUF=display_buff[7];    while(!TI) ; TI=0;
					   SBUF=Tab[2*m]; while(!TI) ; TI=0;
					   SBUF=Tab[2*m+1];while(!TI) ; TI=0; 
				   	   
					   P3_4=0;P3_4=1;	P3_4=0;
	                   //delay();
	                  }
	   }
	   }










			   	   
                  
			   
			   
     

⌨️ 快捷键说明

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