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

📄 hdg12864.c

📁 这个程序包包括对两款常用的LCD的串行和并行2中驱动方式: HDG12864液晶仿真 HY12864液晶驱动 HY12864液晶阅读器 LCD1602液晶显示 LCD显示PC-MCU串口通信
💻 C
字号:
/*******************************************************************************
功能:液晶HY12864T2显示。
说明:显示两行字符串,words1[],words2[]。
制作:电子科大huang_api@sina.com
*******************************************************************************/
#include<string.h>
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char 
#define uint unsigned int 
 
///////控制引脚RS为P32. RW为P33. E为P34//////////
sbit RS	= P3^2;		
sbit RW = P3^3;
sbit E = P3^4;

uchar code length[] = {"0123456789 "};
uchar code words1[] = {0x24,0x56,0xc0,0xd6,4,6,9,8};
uchar code words2[] = {"abcdefghijklmnopqrstuvwx"};
uchar code words3[] = {"电流:    A"};
uchar code words4[] = {""};
/****************************延时函数***************************
名称:delay()
输入:uchar m
输出:无
***************************************************************/
void delay(uchar ms)
{							// 延时子程序
	uchar i;
	while(ms--)
	{
		i=250;
		while(i--)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
}


/******************************LCD状态检测函数**************************************
名称:lcd_state()
功能:lcd状态忙碌判断
参数:P2口为数据口
输入:无
输出:返回状态标志state位
************************************************************************************/
bit lcd_state(void)
{							// 测试LCD忙碌状态
	bit state;
	RS = 0;//command
	RW = 1;//read
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	state = (bit)(P2 & 0x80);
	E = 0;
	return state;	
}


/******************************LCD指令写入函数**************************************
名称:lcd_w_cmd()
功能:写指令到LCD数据口P2
参数:P2口为数据口
输入:待写指令
输出:无
************************************************************************************/
void lcd_w_cmd(uchar cmd)
{							// 写入指令数据到LCD
	while(lcd_state());
	RS = 0;//command
	RW = 0;//write	
	P2 = cmd;
	_nop_();
	_nop_();
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E = 0;		
}

/******************************LCD状态检测函数**************************************
名称:lcd_adder()
功能:lcd显示地址设置
参数:P2口为数据口
输入:一字节待设置的显示地址长度0~15
输出:无
************************************************************************************/
void lcd_adder(uchar adder)
{							//设定显示位置
	lcd_w_cmd(adder);
}


/******************************LCD数据写入函数**************************************
名称:lcd_w_date()
功能:写数据到LCD数据口P2
参数:P2口为数据口
输入:一字节待写显示数据
输出:无
************************************************************************************/
void lcd_w_date(uchar dat)	
{							//写入字符显示数据到LCD
	while(lcd_state());
	RS = 1;//date
	RW = 0;//write
	P2 = dat;
	_nop_();
	_nop_();
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E = 0;	
}


/******************************LCD初始化函数**************************************
名称:lcd_init()
功能:初始化LCD模块
参数:初始化指令
输入:无
输出:无
************************************************************************************/
void lcd_init(void)
{							//LCD初始化设定
	lcd_w_cmd(0x38);			//总线方式,显示方式设置
	delay(1);
	lcd_w_cmd(0x0c);			//光标显示控制开关设置
	delay(1);
	lcd_w_cmd(0x06);			//地址增长方式设置
	delay(1);
	lcd_w_cmd(0x01);			//清除LCD的显示内容
	delay(1);
}

/******************************LCD显示函数**************************************
名称:lcd_display()
功能:显示words1[],words2[]字符串!
参数:P2口为数据口,*word1,*word2为待显示字符串指针,adder1,adder2为两行显示起始地址
说明:word为待显示字符串首地址;dder为显示起始地址;str为起始显示字符的顺序位置;len_s为显示长度
输入:待显示的数据的指针,显示地址
输出:无
*******************************************************************************/
lcd_display(uchar *word,uchar adder,uchar str,uchar len_s)
{
		lcd_adder(adder);	//0~7
	while(str<len_s)
	{
		if(word[str]=='\0')break;
			else					// 显示字符
			{	lcd_w_date(word[str]);
				str++;
			}
	}

}


/******************************显示字符长度测量函数*****************************
名称:words_len()
功能:测试显示字符串长度!
参数:待测字符串地址为输入参数
输入:待测试字符串的指针
输出:字符串长度
*******************************************************************************/
uchar words_len(uchar *s)
{
	return(strlen(s));
}



/******************************显示一个单一字符函数*****************************
名称:word_display()
功能:显示单一一个字符
参数:待测显示字符地址为输入参数
输入:待显示字符的地址
输出:无
*******************************************************************************/
word_display(uchar *c,uchar adder_c)
{
		lcd_adder(adder_c);
		_nop_();
		_nop_();
		lcd_w_date(*c);

}
///////////////////////////MAIN函数//////////////////////////////////
main()
{
	uchar len=0;
	uchar dat[3]={0,0,'\0'};
	lcd_init();				// 初始化LCD			
	delay(10);
	lcd_display(&words2,0xc8,0,strlen(words2));  //LCD显示
//	lcd_display(&words2,0x90,0,strlen(words2));
//	lcd_display(&words2,0x88,0,strlen(words3));

	len=words_len(&words1);
/*	if(len>9)
		{
			dat[0]=length[len/10];
			dat[1]=length[len%10];
			lcd_display(&dat,0x93,0,strlen(dat));
			lcd_display(&dat,0x8b,0,strlen(dat));

		}
	else if(len<10)
		{
			dat[0]=length[10];
			dat[1]=length[len];
			lcd_display(&dat,0x93,0,strlen(dat));
			lcd_display(&dat,0x8b,0,strlen(dat));		
		}
*/
	while(1) ;				//waiting 
}

⌨️ 快捷键说明

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