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

📄 lcd.c

📁 RTL8019以太网开发板资料
💻 C
字号:
/************************************************************************************ 
*  Copyright (c) 2007,重庆优易特电子 
*            All rights reserved. 
* 
* 文件名称: main.c 
* 文件标识: none 
* 适用器件: STC89C51RC 
* 
* 摘 要:   1602液晶显示程序,显示简单的字母,也可以显示数字,但是不能显示汉字 
* 
* 当前版本:1.0 
* 作 者:行卫军 
* 完成日期:2007年12月10日 
* 
*************************************************************************************/ 
#include "STC89C54RD.h" 
#include "lcd.h" 

#define LCM_Data  P1   //数据端口 
#define Busy    0x80 //用于检测LCM状态字中的Busy标识 

sbit LCM_RW= P3^4; //定义信号引脚 
sbit LCM_RS= P3^3 ; 
sbit LCM_E=  P4^2 ; 

//unsigned char code uctech[] = {"QZC_NET IP:"}; 
//unsigned char code net[] = {"IP: 192.168.1.100"}; 

/*********************************************************************
函数名:  void LCD_WriteData(unsigned char WDLCM) 
功能:       //写数据  
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/
void LCD_WriteData(unsigned char WDLCM) 
{ 
     WDTCONTR |= CLR_WDT;   //复位看门狗定时器    
	LCD_ReadStatus(); //检测忙 
	LCM_Data = WDLCM; 
	LCM_RS = 1; 
	LCM_RW = 0; 
	LCM_E = 0;      //若晶振速度太高可以在这后加小的延时 
	LCM_E = 0;      //延时 
	LCM_E = 1; 
}
/*********************************************************************
函数名:  void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测 
功能:       //写指令
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/

void LCD_WriteCom(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测 
{ 
	if (BuysC) LCD_ReadStatus();    //根据需要检测忙 
	LCM_Data = WCLCM; 
	LCM_RS = 0; 
	LCM_RW = 0; 
	LCM_E = 0; 
	LCM_E = 0; 
	LCM_E = 1; 
}
/*********************************************************************
函数名:   unsigned char LCD_ReadByte(void)
功能:       读数据    
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************
unsigned char LCD_ReadByte(void) 
{ 
	LCM_RS = 1; 
	LCM_RW = 1; 
	LCM_E = 0; 
	LCM_E = 0; 
	LCM_E = 1; 
	return(LCM_Data); 
}
*/
/*********************************************************************
函数名:  unsigned char LCD_ReadStatus(void)
功能:       读状态  
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/
 
unsigned char LCD_ReadStatus(void) 
{ 
	LCM_Data = 0xFF; 
	LCM_RS = 0; 
	LCM_RW = 1; 
	LCM_E = 0; 
	LCM_E = 0; 
	LCM_E = 1; 
	LCD_Delay5Ms();
	WDTCONTR |= CLR_WDT;   //复位看门狗定时器

//	while (LCM_Data & Busy)	   //检测忙信号 
//	{
//		  WDTCONTR |= CLR_WDT;   //复位看门狗定时器    
//	} 
	return(LCM_Data); 
}
/*********************************************************************
函数名:    void LCD_Init(void) 
功能:        //LCM初始化   
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/
void LCD_Init(void) 
{ 
	LCM_Data = 0; 
	LCD_WriteCom(0x38,0); //三次显示模式设置,不检测忙信号 
	LCD_Delay5Ms(); 
	LCD_WriteCom(0x38,0); 
	LCD_Delay5Ms(); 
	LCD_WriteCom(0x38,0); 
	LCD_Delay5Ms(); 
	LCD_WriteCom(0x38,1); //显示模式设置,开始要求每次检测忙信号 
	LCD_WriteCom(0x08,1); //关闭显示 
	LCD_WriteCom(0x01,1); //显示清屏 
	LCD_WriteCom(0x06,1); // 显示光标移动设置 
	LCD_WriteCom(0x0C,1); // 显示开及光标设置 
}
/*********************************************************************
函数名:     void LCD_DisplayByte(unsigned char X, unsigned char Y, unsigned char DData) 
功能:        按指定位置显示一个字符  
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/
void LCD_DisplayByte(unsigned char X, unsigned char Y, unsigned char DData)   
                                   //x表示列、y 表示行 
{ 
	Y &= 0x1; 
	X &= 0xF;               //限制X不能大于15,Y不能大于1 
	if (Y) X |= 0x40;       //当要显示第二行时地址码+0x40; 
	X |= 0x80;              // 算出指令码 
	LCD_WriteCom(X, 0);  //这里不检测忙信号,发送地址码 
	LCD_WriteData(DData); 
}
/*********************************************************************
函数名:      void LCD_DisplayString(unsigned char X, unsigned char Y, unsigned char code *DData) 
功能:        按指定位置显示一串字符 
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/

void LCD_DisplayString(unsigned char X, unsigned char Y, unsigned char code *DData) 
{ 
	unsigned char ListLength; 
	ListLength = 0; 
	Y &= 0x1; 
	X &= 0xF;                      //限制X不能大于15,Y不能大于1 
     WDTCONTR |= CLR_WDT;   //复位看门狗定时器    
	while (DData[ListLength]>0x20) //若到达字串尾则退出,字符长度小于32 
	{ 
		if (X <= 0xF)                //X坐标应小于0xF(15) 
		{ 
		     WDTCONTR |= CLR_WDT;   //复位看门狗定时器    
			LCD_DisplayByte(X, Y, DData[ListLength]); //显示单个字符 
			ListLength++; 
			X++; 
		} 
	} 
} 
/*********************************************************************
函数名:      void LCD_Delay5Ms(void)
功能:        延时5ms 
输入:         ucTick 
输出:         None
返回:         None
日期:         2004/02/04
*********************************************************************/
void LCD_Delay5Ms(void) //延时5ms 
{ 
	unsigned int i; 
	for(i=0;i<500;i++) 
	;; 
}

⌨️ 快捷键说明

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