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

📄 1602串.c

📁 单片机1602显示
💻 C
字号:


//1602串口显示不需判别忙信号//

#include"AT89X51.H"
#define uchar unsigned char
#define ufloat unsigned float

sbit LCD_RS=P0^0;
sbit LCD_RW=P0^1;
sbit LCD_E=P0^2;

sbit CLK=P0^3;
sbit Clear=P0^4;
sbit LCD_Data=P0^5;

char a[]={'1','q','w','e','f','s','c','f','s','c','v'};
char b[]={'0','1','2','3','4','5','6','7','8','9'};


int h,m,s,count=1;
void delay(unsigned char time)
  {
   uchar i,k;
   for(i=time;i>0;i--)
   for(k=248;k>0;k--) ;
}
/////将一个字节转换成数据流/////////////
void TransBit(uchar WCLCD)   //char->bit
{
  int i;
 // CLK=0;     
  Clear=1;   //CLK上升沿时输出全为零
  for(i=0;i<8;i++)   //数据流处理
    {	 
	  LCD_Data=WCLCD&0x80;	  
      CLK=0;     ////CLK下降沿时读取数据
	  delay(2);
	  CLK=1;
	  WCLCD<<=1;
	}
}
////////写指令////////
void WriteCommandLCD(uchar WDLCD) 
  {
   TransBit(WDLCD);
   LCD_RS=0;
   LCD_RW=0;
   LCD_E=0;
   LCD_E=0;
   LCD_E=1;
  }

////////写数据////////
void WriteDataLCD(uchar WDLCD)
  {
   TransBit(WDLCD);
   LCD_RS=1;
   LCD_RW=0;
   LCD_E=0;
   LCD_E=0;
   LCD_E=1; 
  }

/////按指定位置显示一个字符X不能大于15,Y不能大于1/////
void DisplayOneChar(uchar X,uchar Y,uchar Num)
  {
 
   Y&=0x01;
   X&=0x0F; //限制X不能大于15,Y不能大于1
   if(Y) X+=0xc0; //当要显示第二行时地址码+0xc0;
   else X+=0x80;
   WriteCommandLCD(X); //发送地址码
   WriteDataLCD(Num);
  }

/////按指定位置显示一串字符/////
void DisplayListChar(uchar X,uchar Y,uchar *DData)
  {
   uchar ListLength;   
   ListLength=0;
   while(DData[ListLength]>0x20) //若到达字串尾则退出
     {
      if(X<=15) //X坐标应小于15
        {
         DisplayOneChar(X,Y,DData[ListLength]); //显示单个字符
         ListLength++;
         ++X;
        }
     }
  }

///显示数字////
void DisplayNumChar(uchar X,uchar Y,int Num,char length)
  {
   char i;
    int e=1,num;
    num=Num;
   for(i=0;i<length-1;i++)
     {      
         e*=10;              
      }
   for(i=0;i<length;i++)
     {
       if(X<=15)
        {
          DisplayOneChar(X,Y,b[(num/e)]);
          X++;
          num-=(num/e)*e;
          e/=10;
    	}
     }
  }
//////显示光标程序////////
void LocateXY(uchar X,uchar Y)
  { uchar temp;
    Y&=0x01;
   X&=0x0F; //限制X不能大于15,Y不能大于1
   if(Y) X+=0xc0; //当要显示第二行时地址码+0xc0;
   else X+=0x80;
   temp=X;
   WriteCommandLCD(temp);
  }
void LCDInit(void) //LCM初始化
  {
   delay(3);
   WriteCommandLCD(0x38); //显示模式设置
   delay(3);
   WriteCommandLCD(0x38);
   delay(3);
   WriteCommandLCD(0x38);
   delay(3);
   WriteCommandLCD(0x38);
   delay(3);
   WriteCommandLCD(0x0f);//整体显示的开,光标开,光标是否闪烁,
   delay(3);
   WriteCommandLCD(0x01);
   delay(3);
   WriteCommandLCD(0x06);
  }

void main(void)
{ 
  TMOD=0x01;
  TH0=(65536-5000)/256;
  TL0=(65536-5000)%256;
  ET0=1;
  EA=1;
  TR0=1;
  LCDInit();
  CLK=1;
  DisplayListChar(8,1,"time");   
  DisplayOneChar(1,0,':');
  DisplayOneChar(13,0,':');
  LocateXY(12,1);
 while(1);
  
}
void t0(void) interrupt 1 using 0
{
  TH0=(65536-1000)/256;
  TL0=(65536-1000)%256;
 // DisplayListChar(8,1,"time");   
 // DisplayOneChar(10,0,':');
 // DisplayOneChar(13,0,':');
  count++;
  if(count==1000)
    {
	 s++;
	 count=1;
    if(s==59)
	  {
        m++;
		s=0;
		 if(m==59)
		   {
		     h++;
			 m=0;
			if(h==12)
		     h=0;
			 }
       }
	 DisplayNumChar(8,0,h,2);
	 DisplayNumChar(11,0,m,2);
	 DisplayNumChar(14,0,s,2);
	 }
			 
}

⌨️ 快捷键说明

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