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

📄 lcd1602_4.c

📁 C与汇编联合编程(红外遥控接收+LCD1602)
💻 C
字号:
#ifndef  LCD1602_4_H
#define  LCD1602_4_H

#include <reg52.h>
#include <intrins.h>


#define  MSB   0x80    //读忙位
#define  HIGH   1
#define  LOW   0


//*****************************************
#define   DATA_MODE       0x28 //LCD模式设置,0x28位四位数据线模式
#define   OPEN_SCREEN       0x0f //打开LCD显示,有光标;0x0c没有光标
#define   DISPLAY_ADDRESS     0x80 //写地址指令
#define   CLEARSCREEN       LCD_en_com(0x01)  //清屏


//***********//LCD1602的接线//*****************************
#define  LCDIO     P0  //LCD1602的高四位接在P0口的高四位

sbit LCD1602_RS=P0^0;   //RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
sbit LCD1602_RW=P0^1;   //RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
sbit LCD1602_EN=P0^2;   //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
sbit LCD1602LIGHT=P0^3; 

//**********************************************************************
void LCD_en_com(unsigned char command);         //写命令指令
void LCD_en_dat(unsigned char temp);         //写数据指令
void LCD_set_xy(unsigned char x, unsigned char y);      //设置显示地址:X为横轴(0-15),Y为纵轴(0-1).
void LCD_write_char(unsigned x,unsigned char y,unsigned char dat);  //写一个字符
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s);//写一个字符串
void LCD_write_int(unsigned char x,unsigned char y,unsigned int intdat); //写无字符型整形数
void LCD_init(void);             //lcd初始化
void LCD_Read_BF(void);             //LCD读忙信号
//**********************************************************************

/*
 LCD1602.c
 
 Created by Zhengxihui
 email: zhengxihui0506@126.com
 May 2007
 
*/

void LCD_Read_BF(void)
{
 LCD1602_RW=HIGH;  //RW 1
 LCD1602_RS=LOW;   //RS 0
 LCD1602_EN=HIGH;  //EN 1 读忙信号
  LCDIO=LCDIO&0x0F|0xf0;
 while(LCDIO&MSB);
 LCD1602_EN=LOW;  
}
void LCD_en_write(void)        //EN端产生一个高电平脉冲,写LCD
  {
    LCD1602_EN=HIGH;
 _nop_();
    LCD1602_EN=LOW; 
  }

//*************************************
void LCD_en_com(unsigned char command)
{
 LCD_Read_BF();
 LCD1602_RS=LOW;    //RS 0  写命令
 LCD1602_RW=LOW;  //RW 0 
 
 LCDIO&=0x0F;
 LCDIO=command&0xf0 | LCDIO&0x0f; //先发送高四位数据
 LCD_en_write();
 command=command<<4; 
 LCDIO&=0x0F;
 LCDIO=command&0xf0 | LCDIO&0x0f;  //发送低四位数据
 LCD_en_write();
}
//*********************************
void LCD_en_dat(unsigned char dat)
{
 LCD_Read_BF();
 LCD1602_RS=HIGH;   //RS 1  写数据
 LCD1602_RW=LOW;    //RW 0 
 LCDIO &=0x0F;
 LCDIO=dat&0xf0 | LCDIO&0x0f;   //先发送高四位数据
 LCD_en_write();
 dat=dat<<4;
 LCDIO &=0x0F;
 LCDIO=dat&0xf0 | LCDIO&0x0f;    //发送低四位数据
 LCD_en_write();
}
//**************设置显示地址:X为横轴(0-15),Y为纵轴(0-1)********************
void LCD_set_xy(unsigned char x,unsigned char y)
{
 unsigned char address;
 x&=0x0f;
 if(!y) 
  address=0x80+x;
 else    
  address=0xc0+x;
 LCD_en_com(address); 
}
//***************写一个字符:X为横轴(0-15),Y为纵轴(0-1)**********
void LCD_write_char(unsigned x,unsigned char y,unsigned char dat)
{
 LCD_set_xy(x,y); 
 LCD_en_dat(dat);
}
//****************写一个字符串***************************************
void LCD_write_string(unsigned char x,unsigned char y,const unsigned char *s)
{
 LCD_set_xy(x,y); 
 while(*s)  
 {
  LCD_en_dat(*s);   
  s++;
 }
}
//****************写一个无字符整数***************************************
void LCD_write_int(unsigned char x,unsigned char y,unsigned int n)
{
unsigned char i,length,a[6]={0,0,0,0,0,0};
unsigned int nx=n;
if(n==0){LCD_write_char(x,y,'0');return;}
for(i=0;i<6;i++)
{
if(nx>=1)length++;
nx/=10;
}
nx=n;
for(;length>0;length--)
{
a[length-1]=nx%10+48;
nx/=10;
}
LCD_write_string(x,y,a);
}

//*****//LCD的初始化函数(刚上电的时候一定要调用一次)//*********************
void LCD_init(void)
{ 
 LCD_en_com(DATA_MODE);  //设计四位数据线模式
 LCD_en_com(DATA_MODE);  //设计四位数据线模式 
 LCD_en_com(OPEN_SCREEN); //打开LCD显示
 LCD_en_com(DISPLAY_ADDRESS);//设计首地址 
 CLEARSCREEN;       //清屏
}

#endif

⌨️ 快捷键说明

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