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

📄 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;
sbit KEY= P3^5;
sbit LED= P1^5;

bit flg_over=0; //文章显示完毕标志位,1为显示完毕
bit flg_key=1;//按键发生标志位,1为按键发生

uchar page;//页码变量
uchar *p;//显示文章首地址指针
uchar code word[] = 
{"单片机的C 语言应用程序设计(第4 版)本书针对目前最通用的8051单片机和最流行的程序设计语言C 语言,结合KEIL公司8051单片机开发套件;介绍单片机的C 语言应用程序设计。全书共13章,既有单片机的基础部分;51的基础部分,本书可以作为高等学院相关专业培训及全国电子设计竞赛的教材。也可以作为从事单片机应用开发的工程技术人员的参考用书!谢谢使用!"};
/****************************延时函数***************************
名称: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)
{	
	EA=0;	
	page=48;	//页码起始值设定
	p=word;		//全局指针变量P为待显示字符串地址
				
	lcd_w_cmd(0x38);			//LCD初始化设定
	delay(5);
	lcd_w_cmd(0x0c);			//
	delay(5);
	lcd_w_cmd(0x06);			//
	delay(5);
	lcd_w_cmd(0x01);			//清除LCD的显示内容
	delay(5);
}

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

}
/*******************************键盘识别函数************************************
名称:key()
功能:识别键盘动作
参数:识别键盘动作返回布尔类型值
输入:无
输出:BIT类型值
*******************************************************************************/
bit key(void)
{
	if(KEY==0)
		{
			delay(1);
			if(KEY==1) return 0;
			while(!KEY) _nop_();		
		LED=!LED;
		return 1;
		}
	else return 0;

}


/******************************显示控制函数**************************************
名称:display_ctr()
功能:控制显示输出
参数:P2口为数据口,*word1,*word2为待显示字符串指针,adder1,adder2为两行显示起始地址
说明:word为待显示字符串首地址;dder为显示起始地址;str为起始显示字符的顺序位置;len_s为显示长度
输入:待显示的数据的指针,显示地址
输出:无
*******************************************************************************/
void display_ctr(void)
{	
loop:

	if(flg_key)
	{
		lcd_w_cmd(0x01);//清除显示DDRAM数据
		if(flg_over==1){p=word;flg_over=0;page=48;}//显示完毕从新开始显示文章
		if((page-48) < 9)page++;
			else page=48;// 个位循环显示页码

	word_display(&page,0x80);	//显示页码

	lcd_display(p,0x81,0,16);	//1行
		p+=16;
		if(flg_over==1){flg_key=0;goto loop;}

	lcd_display(p,0x90,0,16);	//2行
		p+=16;
		if(flg_over==1){flg_key=0;goto loop;}

	lcd_display(p,0x88,0,16);	//3行
		p+=16;
		if(flg_over==1){flg_key=0;goto loop;}
	
	lcd_display(p,0x98,0,16);	//4行
		p+=16;
		if(flg_over==1){flg_key=0;goto loop;}	
	
		}	

}




/*------------------------------------------------------------------------
------------------------------------MAIN函数------------------------------
--------------------------------------------------------------------------*/
main()
{

	lcd_init();		// 初始化LCD变量和显示指令					
	delay(50);

while(1)
	{
		display_ctr();//显示控制
		flg_key=key();//键盘扫描
	}

}

⌨️ 快捷键说明

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