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

📄 lcd.c

📁 此为ADC0832源程序,可实现ADC0832各部分功能~
💻 C
字号:
#include<reg52.h>
#include<lcd.h>
/*================================
==================================
==========参考明浩的程序==========
================================*/
/*---------------------------------------------------------------------
------------------ LCD初始化-----------------------------------------*/

//LCD初始化程序;主要作用初始化LCD,对LCD进行复位以及设置;

void initialization(void)				//定义函数;
{
  delay(50);							//延时5MS;
  write_dictate(0x38,0);				//写指令38H;不检测忙;
  delay(50);							//延时5MS;
  write_dictate(0x38,0);				//写指令38H;不检测忙;
  delay(50);							//延时5MS;
  write_dictate(0x38,0);				//写指令38H;不检测忙;
  delay(50);
  write_dictate(0x38,1);				//显示模式设置;检测忙;
  write_dictate(0x08,1);				//关闭显示;检测忙;
  write_dictate(0x01,1);				//显示清屏;检测忙;
  write_dictate(0x06,1);				//显示光标移动设置;检测忙;
  write_dictate(0x0C,1);				//显示开及光标设置;检测忙;
}

/*---------------------------------------------------------------------
------------------ 写指令--------------------------------------------*/

//写指令子程序;无返回值;输入二个变量I和J.
//I为要写入LCD的指令;J为判断要不要检测忙.
//如果J为0则不判断检测忙;
//如果J为1则判断检测忙;

void write_dictate(uchar i,j)			//定义二个变量;
{
  if(j)     read_estate();              //根据需要检测忙; 
  LCD_DATA=i;                           //把要写入的数据送到LCD数据端;
  LCD_RS=0;			                    //RS置0;
  LCD_RW=0;								//RW置0;
  LCD_E =1;								//E端置0;
  delay(10);							//延时;
  LCD_E =0;								//E端置1;以锁存数据;
}

/*------------------------------------------------------------------
------------------ 写数据------------------------------------------*/

//写数据子程序;无返回值;输入变量I;
//I为要写入LCD中的数据;
//数据类型CHAR形;

void write_data(uchar i)				//定义输入变量值I;
{										
  read_estate();						//检测忙信号;
  LCD_DATA=i;							//把I中数据送到LCD数据端;
  LCD_RS=1;								//RS置1;
  LCD_RW=0;								//RW置0;
  LCD_E=0;								//E置0;
  delay(10);							//短延时;
  LCD_E=1;								//E置1;以锁存数据;
}

/*----------------------------------------------------------------
-------------------读状态----------------------------------------*/

//读状态子程序;有返回值;返回值类型为CHAR型;
//读回的状态通过RETURN返回;

uchar read_estate(void)					//定义有返回值的函数;
{
  LCD_DATA=0Xff;						//把LCD端口全置1方便读取信号;
  LCD_RS=0;								//RS置0;
  LCD_RW=1;								//RW置1;
  LCD_E=0;							    //E端置0;
  delay(10);							//短延时;
  LCD_E=1;								//E端置1;以锁存数据;
  while(LCD_DATA&0x80);                 //检测忙,则一直循环;
  return(LCD_DATA);						//返回读取的信号;
}

/*---------------------------------------------------------------
-------------------读数据--------------------------------------*/

//读数据子程序;有返回值,返回值类型为CHAR型;

/*uchar read_data(void)					//定义有返回值的子函数;
{
  LCD_DATA=0Xff;						//LCD数据端口置1;
  LCD_RS=1;								//RS置1;
  LCD_RW=1;								//RW置1;
  LCD_E=0;								//E置0;
  delay(10);							//短延时;
  LCD_E=1;								//E置1;以锁存数据;
  return(LCD_DATA);						//返回读取的值;
}


/*---------------------------------------------------------------
-------------------在指定位置显示一个字符----------------------*/
void displayonechar(uchar x, y,ddata)
{
y &= 0x01;
x &= 0x0f;                             //限制X不能大于15,Y不能大于1
if (y) x+= 0x40;                      //当要显示第二行时地址码+0x40;
x+= 0x80;                             //算出指令码
write_dictate(x,0);                    //这里不检测忙信号,发送地址码
write_data(ddata);
}

/*---------------------------------------------------------------
-------------------在指定位置显示一串字符----------------------*/
void displaylistchar(uchar x,y,uchar code *ddata)
{
  uchar a=0;
  y&=0x01;
  x&=0xf;
  while(ddata[a]>0x20)
  {
    if(x<=0xff)
	{  
	  displayonechar(x, y,ddata[a]);
	  a++;
	  x++;
	}
   }
}

/*---------------------------------------------------------------
-------------------延时子程序----------------------------------*/
void delay(uint a)
{
  uint b;
  for(b=0;b<a;b++);
}


//400ms延时
void delay400ms(void)
{
  uchar a = 5;
  uint b;
  while(a--)
  {
    b=7269;
    while(b--);
  }
}

⌨️ 快捷键说明

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