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

📄 lcd.c

📁 IC卡的单片机程序proteus仿真
💻 C
字号:
#include "reg52.h"
#include "absacc.h"
#include "string.h"
#include "lcd.h"

//#define WR_COM XBYTE[0x7ff0]
//#define RD_STA XBYTE[0x7ff2]
//#define WR_DAT XBYTE[0x7ff1]
//#define RD_DAT XBYTE[0x7ff3]
bit fTemp;

/************************************************
** 函数名称: Delay
** 功能描述: 延时一段时间
** 输   入: unsigned char i
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void Delay(unsigned char i)
{
	while(i--);
}

/************************************************
** 函数名称: LCD_Busy
** 功能描述: 判断LCD是否处于忙状态
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Busy(void)
{
	bit BusyFlag;
	LCD_DATA = 0xff;
	while(1)
	{
		LCD_RS = 0;
		Delay(1);
		LCD_RW = 1;
		Delay(1);
		LCD_EN = 1;
		BusyFlag = (bit)((LCD_DATA && 0x80)>>7);
		if(!BusyFlag)break;
		LCD_EN =0;
	}
}

/************************************************
** 函数名称: LCD_Wr_Command
** 功能描述: 给LCD写指令
** 输   入: 命令com
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Wr_Command(unsigned char com)
{
	LCD_Busy();
	LCD_DATA = com;
	LCD_RS = 0;
	Delay(1);
	LCD_RW = 0;
	Delay(1);
	LCD_EN = 0;
}

/************************************************
** 函数名称: LCD_Wr_Data
** 功能描述: 给LCD写数据
** 输   入: 数据dat
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Wr_Data(unsigned char dat)
{
	LCD_Busy();
	LCD_DATA = dat;
	LCD_RS = 1;
	Delay(1);
	LCD_RW = 0;
	Delay(1);
	LCD_EN = 0;
}

/************************************************
** 函数名称: LCD_Wr_Char
** 功能描述: 写字符
** 输   入: 列:x, 行:y, 字符:c
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Wr_Char(unsigned char x,unsigned char y,unsigned char c)
{
	if(y==0)
		LCD_Wr_Command(0x80+x);
	else if(y==1)
		LCD_Wr_Command(0xc0+x);

	else if(y>1){}

	LCD_Wr_Data(c);
}

/************************************************
** 函数名称: LCD_Wr_String
** 功能描述: 写字符串
** 输   入: 列:x, 行:y, 字符串指针:str
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Wr_String(unsigned char x,unsigned char y,unsigned char *str)
{
	unsigned int i;
	i=strlen(str);
	
	while(i!=0)
	{
		if(x>=16)
		{
			y++;
			x = 0;
		}
		if(y>=2)break;

		LCD_Wr_Char(x,y,*str);
		x++;
		str++;
		i--;
	}
}

void Print(unsigned char x,unsigned char y,unsigned char *str)
{
	while(*str!='\0')
	{
		if(x>=16)
		{
			y++;
			x = 0;
		}
		if(y>=2)break;

		LCD_Wr_Char(x,y,*str);
		x++;
		str++;
	}
}

/************************************************
** 函数名称: LCD_Init
** 功能描述: 液晶初始化
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Init(void)
{
	LCD_RS = 0;
	LCD_RW = 0;
	LCD_EN = 0;
	LCD_Wr_Command(0x30|0x28|0x20);
	Delay(2);
	LCD_Wr_Command(0x0c);
	LCD_Wr_Command(0x01);
	LCD_Wr_Command(0x80);
}

/************************************************
** 函数名称: write_CGRAM
** 功能描述: 向CGRAM写入数据
** 输   入: add为首地址,size为字符的个数
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2009-02-02
*************************************************/	
void write_CGRAM(unsigned char add,unsigned char *p_tab,unsigned char size)
{
	unsigned char lenth=0;			
	lenth=size*8;     		//每个字符,8个码               
	add=0x40+8*add;         //CGRAM的地址D5位要为1                
	while(lenth!=0)			
	{
		if(add>=0x80)                  	//CGRAM的地址到顶
			break;
		LCD_Wr_Command(add);	       		//写CGRAM地址
		LCD_Wr_Data(*p_tab);   			//写CGRAM数据
		lenth--;						//下一个码
		add++;                         	//下个地址                                  
		p_tab++;                   		//下个字符
	}
}

/************************************************
** 函数名称: GotoXY
** 功能描述: 指定坐标的位置
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
/*
void GoTo_XY(unsigned char x, unsigned char y)
{
	if(y==0)
		LCD_Wr_Command(0x80|x);
	if(y==1)
		LCD_Wr_Command(0x80|(x-0x40));
}
*/
/************************************************
** 函数名称: num_to_char
** 功能描述: 
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
//unsigned char  num_to_char(unsigned char num)
//{
//	return(num+'0');
//}

/************************************************
** 函数名称: LCD_Clear_ALL
** 功能描述: 
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 设    计: 简小木     时间:2008-10-12
*************************************************/
void LCD_Clear_All(void)
{
	unsigned char i,j;

	if(fTemp)
	{
		for(j=0;j<2;j++)
		{
			for(i=0;i<16;i++)
				LCD_Wr_Char(i,j,0x00);
		}
	}
}

⌨️ 快捷键说明

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