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

📄 1602.c

📁 调试通过了的基于89S51的1602液晶显示的程序
💻 C
字号:
#include<reg51.h>
#include <intrins.h>
/*-------------------------------------*/
//LCD数据控制口定义
/*-------------------------------------*/
#define LCD_DATA P0         //LCD的数据口
sbit LCD_BUSY=LCD_DATA^7;    //LCD忙型号位
sbit LCD_RS=P3^0;            //LCD积存器选择
sbit LCD_RW=P3^1;            //LCD读写控制
sbit LCD_EN=P3^2;            //LCD使能信号
/*-------------------------------------*/
#define LCD_GO_HOME                 0X02      //光标复位,光标返回到地址00H

//输入方式设置
#define LCD_AC_AUTO_INCREASEMENT    0X06      //数据读写操作后,AC自动增一
#define LCD_AC_AUTO_DECREASEMENT    0x04      //                      减一
#define LCD_MOVE_ENABLE             0X05      //数据读写操作后,画面平移
#define LCD_MOVE_DISABLE            0X04      //                    不动

//设置显示,光标及闪烁开关
#define LCD_DISPLAY_ON              0X0C      //显示开
#define LCD_DISPLAY_OFF             0X08      //显示关
#define LCD_CURSOR_ON               0X0A      //光标显示
#define LCD_CURSOR_OFF              0X08      //光标不显示
#define LCD_CURSOR_BLINK_ON         0X09      //光标闪烁
#define LCD_CURSOR_BLINK_OFF        0XO8      //光标不闪烁

//光标,画面移动,不影响DDRAM
#define LCD_LEFT_MOVE               0X18      //LCD显示左移一位
#define LCD_RIGHT_MOVE              0X1C      //LCD显示右移一位
#define LCD_CURSOR_LEFT_MOVE        0X10      //光标左移一位
#define LCD_CURSOR_RIGHT_MOVE       0X14      //    右

//工作方式设置
#define LCD_DISPLAY_DOUBLE_LINE     0X38      //两行显示
#define LCD_DISPLAY_SIGLE_LINE      0X30      //一行显示

void LCD_write_data(unsigned char);
void LCD_inital(void);
void LCD_set_position(unsigned char);
void LCD_printc(unsigned char);
void LCD_prints(unsigned char *);

//========================================================================
//延时程序
void TimeDelay(int Time)
{
	int i;
	while(Time > 0)
	{
		for(i = 0;i < 800;i++)
		{
			_nop_();
		}
		Time --;
	}
}

/*------------------------------------------*/
void LCD_check_busy(void)
{
  while(1)
     {
       LCD_EN=0;
       LCD_RS=0;
       LCD_RW=1;
       LCD_DATA=0XFF;
       LCD_EN=1;
       if(!LCD_BUSY)break;
     }
   LCD_EN=0;
}
/*----------可以不要--------------------------------*/
void LCD_cls(void)
{
  LCD_check_busy();
  LCD_RS=0;
  LCD_RW=0;
  LCD_DATA=1;
  LCD_EN=1;
  LCD_EN=0;
}
/*------------------------------------------*/
void LCD_write_instruction(unsigned char LCD_instruction)
{
  LCD_check_busy();
  LCD_RS=0;
  LCD_RW=0;
  LCD_EN=1;
  LCD_DATA=LCD_instruction;
  
  LCD_EN=0;
}
/*------------------------------------------*/
void LCD_write_data(unsigned char LCD_data)
{
  LCD_check_busy();
  LCD_RS=1;
  LCD_RW=0;
  LCD_EN=1;
  LCD_DATA=LCD_data;
  
  LCD_EN=0;
}
/*------------------------------------------*/
void LCD_set_position(unsigned char x)
{
  LCD_write_instruction(0x80+x);
}
/*------------------------------------------*/
void LCD_go_home(void)
{
  LCD_write_instruction(LCD_GO_HOME);
}
/*------------------------------------------*/
void LCD_printc (unsigned char LCD_data)
{
  LCD_write_data(LCD_data);
}
/*------------------------------------------*/
void LCD_prints (unsigned char *lcd_string)
{
  unsigned char i=0;
  while(lcd_string[i]!=0x00)
     {
       LCD_write_data(lcd_string[i]);
       i++;
     }
}
/*------------------------------------------*/
void LCD_inital(void)
{
  LCD_write_instruction(LCD_AC_AUTO_INCREASEMENT|LCD_MOVE_DISABLE);
  LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
  LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE);
//  LCD_cls();
}
/*------------------------------------------*/
void main()
{ 
  LCD_inital();
 
  LCD_set_position(0);
  LCD_prints("  Ilove you,xiao zhu!Do you know?1234567");
  LCD_set_position(0x40);
  LCD_prints("  You love me ?");
  
  while(1)
  {
  LCD_write_instruction(LCD_RIGHT_MOVE);
  TimeDelay(20);
  }
   
}

⌨️ 快捷键说明

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