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

📄 lcd1602.c

📁 用单片机播放音乐并用LCD显示的源程序
💻 C
字号:
/***************************************/
/*       CopyRight 2005 LiuYong   		*
/****************************************
	文件名称:LCD1602.C
	文件版本:V1.0
	创建人员:LiuYong  cau_ly@163.com
	创建日期:2005.5.30
	功能描述:完成LCD的显示
	相关硬件:at89s52兼容单片机,晶体11.0592M,LCD为1602
	修改记录:
***************************************/
#include <regx52.H>
#include <intrins.h>
#include "delay.h"
#define uchar     unsigned char

#define	LCDDB	P0		//LCD数据总线
//LCD EN
sbit LCDE		=P1^4;
//LCD WR
sbit LCDWR		=P3^6;
//LCD RD
sbit LCDRS		=P3^7;
//busy flag
sbit LCDBUSY		=P0^7;

/*************************************************
*	函数名称:void LcdCheckBusy(void)
*	创建日期:2005.6.3
*	功能描述:确保LCD为不忙的状态
*	入口参数:无
*	返回值:  	无     
*	修改日志:
*************************************************/
void LcdCheckBusy(void)
{
	LCDDB=0XFF;//必须
	LCDRS=0;
	LCDWR=1;
	LCDE=1;
	_nop_();
	while(LCDBUSY)
	{
		_nop_();
	}
	LCDE=0;		
}
/*************************************************
*	函数名称:void LcdWtInstruct(uchar ucInstruct)
*	创建日期:2005.6.3
*	功能描述:写指令码到IR寄存器
*	入口参数: ucInstruct:指令码,是否检查忙的标志,若为1检查,为0不检查
*	返回值:  	无     
*	修改日志:
*************************************************/
void LcdWtInstruct(uchar ucInstruct,bit bIfChkBsy)
{
	if(bIfChkBsy)
	{
		LcdCheckBusy();	//检查LCD是否忙
	}
	LCDE=0;
	LCDRS=0;
	LCDWR=0;
	_nop_();	//liuyong add 6.13
	LCDE=1;
	LCDDB=ucInstruct;
	//LCDE=1;
	_nop_();	//liuyong add 6.13
	_nop_();	//liuyong add 6.13
	LCDE=0;
}
/*************************************************
*	函数名称:void LcdWtData(uchar ucLcdData)
*	创建日期:2005.6.3
*	功能描述:向LCD写数据
*	入口参数:ucLcdData:写入的数据
*	返回值:  	无     
*	修改日志:
*************************************************/
void LcdWtData(uchar ucLcdData)
{
	LcdCheckBusy();	//检查LCD是否忙
	LCDE=0;
	LCDRS=1;
	LCDWR=0;
	LCDE=1;
	LCDDB=ucLcdData;
	LCDE=0;
	LCDRS=0;  //liuyong 0612
	LCDWR=1;//liuyong 0612
}

/*************************************************
*	函数名称:void LcdInit(void)
*	创建日期:2005.6.3
*	功能描述:初始化LCD的一些配置
*	入口参数:无
*	返回值:  	无    
*	修改日志:2005.6.24.LcdWtInstruct(0x3c,1);由原来的38改为3c,增加某些字符的显示
*************************************************/
void LcdInit(void)
{
	/********************************************************
	6号指令:功能设置命令,0B 0B 1B DLB NB FB *B *B , 
	DL:高电平时为4位总线,低电平时为8位总线 
	N:低电平时为单行显示,高电平时双行显示 
	F: 低电平时显示5x7的点阵字符,高电平时显示
	5x10的点阵字符 指令
	***********************************************************/
	//LcdWtInstruct(0x38,1);	//设置16*12显示,5*7点阵,8位数据接口	
	LcdWtInstruct(0x3c,1);	//设置16*12显示,5*10点阵,8位数据接口	

	//关显示
	LcdWtInstruct(0x08,1);
	
	//指令1:清显示,指令码01H,光标复位到地址00H位置
	LcdWtInstruct(0x01,1);

	/********************************************************
	3号指令:光标和显示模式设置,0B 0B 0B 0B 0B 1B I/DB SB , 
	I/D:光标移动方向,高电平右移,低电平左移 
	S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效
	***********************************************************/
	LcdWtInstruct(0x06,1);	//屏幕上的光标和文字右移

	/********************************************************
	4号指令:显示开关控制,0B 0B 0B 0B 1B DB CB BB , 
	D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 
	C:控制光标的开与关,高电平表示有光标,低电平表示无光标 
	B:控制光标是否闪烁,高电平闪烁,低电平不闪烁
	***********************************************************/	
	LcdWtInstruct(0x0c,1);	//开显示、不显示光标,光标不闪烁
}

/*************************************************
*	函数名称:void LcdDisplay(uchar *pDis,uchar ucLine)
*	创建日期:2005.6.3
*	功能描述:显示字符串
*	入口参数: *pDis:要显示的字符串,x:x坐标,取值范围是0到15;y: y坐标取0或1
					ucAdr:字符串显示所在的地址ucNo:写入字符的个数,
					共32个字符,第一行16个,第二行16个
*	返回值:  	无    
*	修改日志:
*************************************************/
void LcdDisplay(uchar *pDis,uchar x,uchar y,uchar ucNo)
{
	uchar i=0;
	uchar ucAdr;
	if(y)
	{
		ucAdr=0xc0;
	}
	else
	{
		ucAdr=0x80;
	}
	LcdWtInstruct(ucAdr+x,1);	//写入显示的数据地址指针
	for(i=0;i<ucNo;i++)
	{
		LcdWtData(*(pDis+i));
	}
}

⌨️ 快捷键说明

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