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

📄 lcd_1602.c

📁 DS18B20多点测温
💻 C
字号:
#include<c8051f020.h>
#define uint unsigned int
#define uchar unsigned char

/*sbit RS=P4^0;
sbit RW=P4^1;
sbit EN=P4^2;*/

void write_comm(uchar);
void write_data(uchar);
void lcd_delay(uchar,uchar);
void write_string(uchar,uchar,uchar*);

void L1602_init()
{
	lcd_delay(10,10);
	write_comm(0x38);		//显示模式控制:设置16*2显示,5*7点阵,8位数据口
	write_comm(0x08);		//关显示
	write_comm(0x01);		//清屏
	write_comm(0x06);		//输入模式控制:光标右移,整屏不移动
	write_comm(0x0f);		//开显示,显示光标,光标闪烁
							//0x0e,开显示,显示下光标,光标不闪烁
	write_comm(0x80);
    write_comm(0x02);		//数据指针清零
}

void write_comm(uchar Commend_Code)
{
	P4&=~0x01;
	P4&=~0x02;
	P5=Commend_Code;
	lcd_delay(10,10);
	P4|=0x04;
	lcd_delay(100,100);
	P4&=~0x04;
}

void write_data(uchar Data)
{
	P4|=0x01;					 //RS=1
	P4&=~0x02;					 //RW=0
	P5=Data;
	lcd_delay(10,10);				
	P4|=0x04;					 //EN=1
	lcd_delay(100,100);
	P4&=~0x04;					 //EN=0
}

void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
{

    if (row==1) 
        column |= 0x40; //当要显示第二行时地址码+0x40;
        column |= 0x80; // 算出指令码

    write_comm(column); //这里不检测忙信号,发送地址码
	write_data(Data);
}

void write_string(uchar row,uchar column,uchar *dis_buffer)
{
    switch(row)                                     //这种结构保持以后升级到多行显示液晶
      {
        case 0:write_comm(0x80+column);break;
        case 1:write_comm(0x80+0x40+column);break;//重新调整数据地址指针
        default:break;
      }

    while(*dis_buffer!='\0') // '\0'结束符
     {
	 	write_data(*dis_buffer);
			dis_buffer++;
            column++;
            if(column==16)
            {               
                column=0;
                row++;
                if(row>=3)
                    return;
                else
                  switch(row)                                     //这种结构保持以后升级到多行显示液晶
                  {
                    case 0:write_comm(0x80);break;
                    case 1:write_comm(0x80+0x40);break;			 //重新调整数据地址指针
                    default:break;
                  }
            }
        } 
} 

void Cursor_shift(uchar direct,uchar x)
{
	uchar i;
	for(i=0;i<x;i++)
		if(direct=='R')
			write_comm(0x14);		//光标右移
		else if(direct=='L')
				write_comm(0x10);	//光标左移
}

void Display_shift(uchar direct,uchar x)
{
 	uchar i;
		for(i=0;i<x;i++)
		if(direct=='R')
			write_comm(0x1c);		//显示右移
		else if(direct=='L')
				write_comm(0x18);	//显示左移
}

	  
void lcd_delay(uchar t1,uchar t2)
{
	uchar i,j;
	for(i=0;i<t1;i++)
		for(j=0;j<t2;j++);
}


//==================================================
// 以下为几种清屏命令
//==================================================

void Clear_All()
{
   write_comm(0x01);							//显示清屏。
   write_comm(0x80);							//将数据指针
}												//设置到第一行的第一个字符

void Clear_Line(uchar line)
{
    write_string(line,0,"                ");
    switch(line)								//这种结构保持以后升级到多行显示液晶
        {
           case 1:write_comm(0x80);break;       //将数据地址指针定位到第一行
           case 2:write_comm(0x80+0x40);break;  //将数据地址指针定位到第二行
           default: break;
        }   
}

⌨️ 快捷键说明

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