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

📄 sjxs.c

📁 LCD1602驱动程序
💻 C
字号:
#include <AT89X51.h>
#define Data P0

sbit RS=P1^7;
sbit RW=P1^6;
sbit E=P2^6;

void delay(unsigned int k) 
{ 
  unsigned int i,j; 
  for(i=k;i>0;i--) 
  for(j=50;j>0;j--) ; 
}

unsigned char ReadStatus(void)
{
  Data=0xFF;
  RS=0;
  RW=1;   
  E=1;
  while(Data&0x80);
  return(Data);
  delay(2);
  E = 0;
}

void wr_com(unsigned char com)
{
  ReadStatus();
  Data=com;
  RS=0;
  RW=0;
  E=1;
  delay(2);
  E = 0;
 }

void wr_dat(unsigned char dat)
{
  ReadStatus();
  Data=dat;
  RS=1;
  RW=0;
  E=1; 
  delay(2);
  E=0;
}

void LCD_Init(void)
{
  Data=0x0;
  wr_com(0x38);
  delay(5);
  wr_com(0x38);
  delay(5);
  wr_com(0x38);
  delay(5);
  wr_com(0x38);
  wr_com(0x08);
  wr_com(0x01);
  wr_com(0x06);
  wr_com(0x0C);
}

void GotoXY(unsigned char x,unsigned char y)
{
  x&=0x01;
  y&=0x0F;
  y|=(x==0)?0x80:0xC0;
  wr_com(y);
  do{
      y=ReadStatus();
	  }while((y&0x80)==0x80);
   }

void disp(unsigned char x,unsigned char y,unsigned char _char)
{
  GotoXY(x,y);
  wr_dat(_char);
  }

/***********************************************************************************/

unsigned char second=55,minute=58,hour=23,day=29,month=11,year=07;  
unsigned char n_50m_second;            
unsigned char days_of_month;  
          
unsigned char calculate_days(void)      
{
 unsigned int temp;
 switch (month)
  {
   case 1:
   case 3:
   case 5:
   case 7:
   case 8:
   case 10:
   case 12:
           return 31;  
           break;
   case 4:
   case 6:
   case 9:
   case 11:            
           return 30; 
           break;
   case 2:
           temp=2000+year; 
           if((((temp%4)==0)&&((temp%100)!=0))||((temp%400)==0))
            {
             return 29;    
            }
           else
            {
             return 28;    
            }
     }
}

void timer0_isr(void) interrupt 1 using 1     
{
 TL0=0xB0;
 TH0=0x3C;                             
 n_50m_second++;
 if(n_50m_second>=20)                  
  {
   n_50m_second=0;                     
   second++;                           
   if(second==60)                     
    {
     second=0;                         
     minute++;                         
     if(minute==60)                   
      {
       minute=0;                       
       hour++;                         
       if(hour==24)                    
        {
         hour=0;                      
         day++;                        
         days_of_month=calculate_days();
         if(day>days_of_month)         
          {
           day=1;                      
           month++;                   
           if(month>12)               
            {
             month=1;                  
             year++;                   
             if(year>=100)            
              {
               year=0;                
              }
            }
          }
        }
      }
    }
  } 
}

void disp_timer(void)
{ disp(0,4,hour/10+48);
  disp(0,5,hour%10+48);
  disp(0,6,':');
  disp(0,7,minute/10+48);
  disp(0,8,minute%10+48);
  disp(0,9,':');
  disp(0,0xA,second/10+48);
  disp(0,0xB,second%10+48);
  disp(1,3,'2');
  disp(1,4,'0');
  disp(1,5,year/10+48);
  disp(1,6,year%10+48);
  disp(1,7,'-');
  disp(1,8,month/10+48);
  disp(1,9,month%10+48);
  disp(1,0xA,'-');
  disp(1,0xB,day/10+48);
  disp(1,0xC,day%10+48);
  }


void main(void)
{
  TMOD=0x11;                 
  ET0=1;                     
  TR0=1;                     
  EA=1;                                     
  LCD_Init();
  while(1)
{ 
  delay(100);
  disp_timer(); 
  }
}

⌨️ 快捷键说明

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