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

📄 lcddisplay.c

📁 用KEIL开发的出租车计费系统
💻 C
字号:
/**************************************************************************
  
                   		THE LCD Display
  
   File Name:       LCDdisplay.c
   Author:          Lin Qian
   Created:         2008/4/21
   Modified:		NO
   Revision: 		1.0
  
***************************************************************************/
#define __LCDdisplay
#include "INC\\main.h"
#undef __LCDdisplay

#if LCD_Display_Internal_Func_en
//********** 内部函数声明 **********
uchar LCD_Wait(void);	// 内部等待函数
void LCD_Write(bit style, uchar input);	// 向LCD写入命令或数据
//******************************

// 内部等待函数 ******************************
uchar LCD_Wait (void)
{
	LcdRs = 0;
	LcdRw = 1;	NOP;NOP;
	LcdEn = 1;	NOP;NOP;
	//while(DBPort&0x80);// 在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
						 // 可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
						 // 实际硬件时打开此语句
	LcdEn = 0;
	return DBPort;
}

// 向LCD写入命令或数据 ******************************
void LCD_Write (bit style, uchar input)
{
	LcdEn = 0;		
	LcdRs = style;
	LcdRw = 0;			NOP;
	DBPort = input;		NOP;NOP;NOP;NOP;
	LcdEn = 1;			NOP;NOP;
	LcdEn = 0;			NOP;
	LCD_Wait();	
}
#endif

// 设置显示模式 ******************************
#if LCD_SetDisplay_en
void LCD_SetDisplay (uchar DisplayMode)
{
	LCD_Write(LCD_COMMAND, 0x08 | DisplayMode);	
}
#endif

// 设置输入模式 ******************************
#if LCD_SetInput_en
void LCD_SetInput (uchar InputMode)
{
	LCD_Write (LCD_COMMAND, 0x04 | InputMode);
}
#endif

// 移动光标或屏幕 ******************************
#if LCD_Move_en
void LCD_Move (uchar object, uchar direction)
{
	if( object == LCD_CURSOR )	// 移动光标
		LCD_Write(LCD_COMMAND, 0x10 | direction);
	
	if( object == LCD_SCREEN )	// 移动屏幕
		LCD_Write(LCD_COMMAND, 0x18 | direction);
}
#endif

// 初始化LCD ******************************
#if LCD_Initial_en
void LCD_Initial (void)
{
	LcdEn = 0;
	LCD_Write(LCD_COMMAND, 0x38);	// 8位数据端口,2行显示,5*7点阵
		NOP;NOP;	/* 用Protues仿真时由于LCD_Wait功能被屏蔽,所以
					   需在此处延时等待。实际硬件时应删除。*/
	LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR);	// 开启显示, 无光标
	LCD_Write(LCD_COMMAND, LCD_CLEAR_SCREEN);	// 清屏
	LCD_SetInput(LCD_AC_UP | LCD_NO_MOVE);		// AC递增, 画面不动
}
#endif

// 字符写入位置定位 ******************************
#if LCD_GotoXY_en
void LCD_GotoXY (uchar x, uchar y)
{
	switch( y )
	{
		case 0:
			LCD_Write(LCD_COMMAND, 0x80 | x);
			break;
		case 1:
			LCD_Write(LCD_COMMAND, 0xC0 | x);
			break;
		case 2:
			LCD_Write(LCD_COMMAND, 0x90 | x);
			break;
		case 3:
			LCD_Write(LCD_COMMAND, 0xD0 | x);
			break;
		default:	break;
	}
}
#endif

// 字符写入 ******************************
#if LCD_Print_en
void LCD_Print(uchar *str)
{
	while(*str!='\0')
	{
		LCD_Write(LCD_DATA, *str);
		str++;
	}
}
#endif

// int型数据转换为字符串 ******************************
#if IntToStr_en
void IntToStr(long num, uchar *str, uchar n, bit clr0) 
// num: 需要转换数据
// str: 转换后字符串的存储首地址
// n: 输出字符串的长度
// clr0: 高位清零选择. 1-清除高位的零; 0-保留高位的零
{
	char digit = n;	// 位选

	str[digit--] = '\0';

	// 将num的各位数字送到显示缓冲区
	do
	{	
 		str[digit--] = (num % 10) + '0';
		num /= 10;
	}
	while( digit >= 0  &&  num != 0 );	

	for( ; digit>=0; digit-- )	// 多余位的处理
 		if (clr0)
			str[digit] = ' ';
		else
			str[digit] = '0';
} 
#endif

//************************************************************

⌨️ 快捷键说明

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