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

📄 hy12864.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>
#include <math.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[] = {"信号源"};
uchar code words2[] = {"电压:     V"};
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;
	uint vol=12,ele=3;
	uchar dat[4]={0,'.',0,'\0'};
	lcd_init();				// 初始化LCD			
	delay(10);
	lcd_display(&words1,0x81,0,strlen(words1));  //LCD显示
	lcd_display(&words2,0x90,0,strlen(words2));
	lcd_display(&words3,0x88,0,strlen(words3));

	len=words_len(&words1);
	ele*=10;
	if(vol>9)
		{
			dat[0]=length[vol/10];
			dat[2]=length[vol%10];
			lcd_display(&dat,0x93,0,strlen(dat));
		}
	else //if(vol<10)
		{
			dat[0]=length[vol];
			dat[2]=length[0];
			lcd_display(&dat,0x93,0,strlen(dat));
		}
	if(ele>9)
		{
			dat[0]=length[ele/10];
			dat[2]=length[ele%10];
			lcd_display(&dat,0x8b,0,strlen(dat));

		}

	else// if(ele<10)
		{
			dat[0]=length[ele];
			dat[2]=length[0];
			lcd_display(&dat,0x8b,0,strlen(dat));		
		}

	while(1) ;				//waiting 
}

⌨️ 快捷键说明

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