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

📄 1602.c

📁 51+lcd1602显示,程序非常清晰明白,很适合初学者!
💻 C
字号:
//单行或双行显示
//显示的起始位置设定
//屏幕左右移动,动画效果
//给定一个字符数组,如何通过strlen()来判断字符串的长度?这样在for初始化时,也许可以简化程序
//最后的一行,会再次显一遍,又返回到了第一行
#include <at89x51.h>
#include <intrins.h>
#define uchar unsigned char
sbit lcd_RS=P2^5;                                //定义寄存器
sbit lcd_RW=P2^6;                                //定义是否读写
sbit lcd_E=P2^7;                                //定义使能端
sbit lcd_flag=P0^7;                             //定义是否Busy标志
uchar code dis[]="Hello everyone, my name is gaogao. This is really a great honor to have this opportunity.Hope you will learn something from this program.Sduty right now or lose the chance next second!Come on!";
bit lcd_busy()                                //判断是否忙碌 RS=Low,RW=High,E=High:读状态
{ 
        bit flag;                
        lcd_RS=0;                             //寄存器为Low
        lcd_RW=1;                             //是否读写为High
        lcd_E=1;                              //使能端为High
        if (lcd_flag==1) flag=1;
        else flag=0;
        lcd_E=0;
        return flag;                         //返回标志,判断是否LCD忙碌
}
void lcd_putcommand(uchar command)     //写指令 RS=Low,RW=Low,E=High:写指令
{ 
        while (lcd_busy());            //判断是否忙碌
        lcd_RS=0;                                                                          
        lcd_RW=0;
        lcd_E=0;                       
        P0=command;                   
        lcd_E=1;                      
        lcd_E=0;
}
void lcd_putchar(uchar putchar)      //写数据 RS=High,RW=Low,E=High:写数据
{ 
        while(lcd_busy());           //判断是否忙碌
        lcd_RS=1;
        lcd_RW=0;
        lcd_E=0;                     
        P0=putchar;                  
        lcd_E=1;                   
        lcd_E=0;
}
void lcd_moveto(uchar x,uchar y)                    //显示字符的位置:第x行y列(X=1或2,Y=1~16)
{ 
        if (x==0) lcd_putcommand(0x80|y-1);     //第一行,并初始化从第y-1个字符开始显示
        if (x==1) lcd_putcommand(0xc0|y-1);     //第二行,并............
}
void lcd_delay(int ms)	//延时函数
{ 
        uchar i;
        while(ms--)
        {
                for(i=0;i<250;i++)
                {
                _nop_();_nop_();_nop_();_nop_();
                }
        }
}
void lcd_init(void)
{
        lcd_putcommand(0x38);  lcd_delay(1); //LCD为2行,5×7字
      lcd_putcommand(0x0e);  //打开显示,显示光标,光标不闪
//		lcd_putcommand(0x0f);  //....................光标闪烁  
        lcd_delay(1);
        lcd_putcommand(0x06); lcd_delay(1);//每次右移一字符
        
}
void main(void)
{
		uchar *app,*p;
        lcd_init();                                                                          //初始化
//        lcd_delay(10);
		app=dis;
while(*app!='\0')
   { 
	 /************第一行***************/
	 lcd_moveto(0,1);
	                                                                // lcd_putcommand(0x08);	   //在显示数据时关闭显示,否则如果cpu慢的话,会感觉闪烁
	 for(p=app;p<app+16&&(*p!='\0');p++)	                        //逻辑判断的顺序是从右到左,所以把	*p~='\0'写右边
		  {
		    
		    lcd_putchar(*p);
			//lcd_delay(100);
		  }
		 app=app+16;
	 // lcd_putcommand(0x0e);
	// lcd_delay(200);
	 /***********第二行****************/
     lcd_moveto(1,1);
	 for(p=app;p<app+16&&(*p!='\0');p++)
		  {
		    lcd_putchar(*p);
		//	lcd_delay(100);
		  }
           //	app=app+16;
  // lcd_putcommand(0x0e);   //开显示

   lcd_delay(800);		   //控制翻页速度

	 if(*p=='\0') break;  //阻止最后一行再次显示
    lcd_putcommand(0x01); 
		  
  }

  while(1);
}








⌨️ 快捷键说明

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