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

📄 lcd.c

📁 基于液晶屏型号为hy-19264b的液晶屏驱动程序
💻 C
字号:
/************************Copyright (c)**************************
**
**
**--------------文件信息---------------------------------------
**文   件   名: lcd.c	
**创   建   人: ade
**最后修改日期:
**描        述:PCR扩增仪显示部分驱动程序
				液晶型号:hy-19264b
				液晶地址
						#define WCOML	XBYTE[0xF0FF]		//	写左命令
						#define WDATAL	XBYTE[0XF2FF]		//	写左数据
						#define RCOML	XBYTE[0XF1FF]		//	读左状态
						#define RDATAL	XBYTE[0XF3FF]		//	读左数据 
						
						#define WCOMM	XBYTE[0xF4FF]		//	写中命令
						#define WDATAM	XBYTE[0xF6FF]		//	写中数据
						#define RCOMM	XBYTE[0xF5FF]		//	读中状态
						#define RDATAM	XBYTE[0xF7FF]		//	读中数据
						
						#define WCOMR	XBYTE[0XF8FF]		//	写右命令
						#define WDATAR	XBYTE[0xFAFF]		//	写右数据
						#define RCOMR	XBYTE[0xF9FF]		//	读右状态
						#define RDATAR	XBYTE[0xFBFF]		//	读右数据           
**--------------历史版本信息-----------------------------------
** 创建人: 
** 版  本: 
** 日 期: 
** 描 述: 原始版本
**
**
**
**
**--------------当前版本修订------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**--------------------------------------------------------------
****************************************************************/
#include "lcd.h"

//void LCD_reset(void)
//{
//	RESET_LCD = 0;
//	delay60k(1);
//	RESET_LCD = 1;
//}
/**********************************************
*函 数 名:显示屏初始化
*功能描述:设置显示起始行为第一行,开显示设置
*函数说明:使用一字节变量
*调用函数:LCD_clear
*全局变量:
*输入参数:
*返 回 值:
*设 计 者:时间:
*修 改 者:时间:
*
************************************************/
void LCD_init(void)
{  	
   //  send_char_com('1');

	//delay(500);
	while(RCOML&0x80);		//读左状态字1 ,busy; 0, OK
	WCOML=0xc0;			   	//设置显示起始行为第一行
	while(RCOML&0x80);		//读左状态字1 ,busy; 0, OK
	WCOML=0x3f;			   	//开显示设置

	//delay(500);

/*	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();*/

	while(RCOMM&0x80);		//读中状态字1 ,busy; 0, OK
	WCOMM=0xc0;			   	//设置显示起始行为第一行
	while(RCOMM&0x80);		//读中状态字1 ,busy; 0, OK
	WCOMM=0x3f;			   	//开显示设置

	//delay(500);

/*	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_(); */

	while(RCOMR&0x80);		//读右状态字1 ,busy; 0, OK
	WCOMR=0xc0;			   	//设置显示起始行为第一行
	while(RCOMR&0x80);		//读右状态字1 ,busy; 0, OK
	WCOMR=0x3f;			   	//开显示设置

//	delay(500);

/*	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();*/




	//LCD_clear();

	//send_char_com('2');

}

/**********************************************
*函 数 名:LCD_clear
*功能描述:清显示命令
*函数说明:192列 y,8页 page,
*调用函数:
*全局变量:
*输入参数:
*返 回 值:
*设 计 者:时间:
*修 改 者:时间:
*			   
************************************************/
void LCD_clear(void)
{	//	/* 设置页地址代码 10111?XX 0xB8+xx*/
	unsigned char page, y;

	while(RCOML&0x80);		//读左状态字1 ,busy; 0, OK
	WCOML=0xc0;			   	//设置显示起始行为第一行
	while(RCOML&0x80);		//读左状态字1 ,busy; 0, OK
	WCOML=0x3f;			   	//开显示设置

	//delay(500);

/*	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();*/

	while(RCOMM&0x80);		//读中状态字1 ,busy; 0, OK
	WCOMM=0xc0;			   	//设置显示起始行为第一行
	while(RCOMM&0x80);		//读中状态字1 ,busy; 0, OK
	WCOMM=0x3f;			   	//开显示设置

	//delay(500);

/*	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_(); */

	while(RCOMR&0x80);		//读右状态字1 ,busy; 0, OK
	WCOMR=0xc0;			   	//设置显示起始行为第一行
	while(RCOMR&0x80);		//读右状态字1 ,busy; 0, OK
	WCOMR=0x3f;
	
				   	//开显示设置
	for( page=0; page<8; page++)
	{
		WCOML=0xB8+(page&0x07); 	  //设置左起始页
		for( y=0; y<64; y++)
		{   
			while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
			WCOML=0x40+y;	   //选择列
			while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
			WDATAL=0x00;

		}
		WCOMM=0xB8+(page&0x07); 	  //设置中起始页	
		for( y=0; y<64; y++)
		{   
			while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
			WCOMM=0x40+y;	  
			while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
			WDATAM=0x00;
		}
		WCOMR=0xB8+(page&0x07); 	  //设置右起始页	
		for( y=0; y<64; y++)
		{   
			while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
			WCOMR=0x40+y;
			while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
			WDATAR=0x00;
		}

	}
}


/**********************************************
*函 数 名:outchar
*功能描述:显示字或字符
*函数说明:写字顺序:1 2
					 3 4
*调用函数:
*全局变量:
*输入参数:x,y  欲显示字符位置,*addr  字形地址, w_or_c  字形宽度值8/16,   mode显示模式,正显/反显  00/0xff
*			x:0-6 ,y,0-192 推荐8的倍数,或16的倍数,尽量避免在56 120 184处显示汉字
*返 回 值:
*设 计 者:时间:
*修 改 者:时间:
*
************************************************/
void outchar( unsigned char x, unsigned char y, unsigned char code *addr, unsigned char w_or_c, unsigned char mode )
{ 
	unsigned char i,pagenum = 0x0b8,col = y,wordch=w_or_c;
  	
  	if( mode != 0xff )
		mode = 0 ;
  	pagenum += x;

  	for( i=0; i<2; i++)
  	{
  		for( ; wordch; wordch--)
  		{ 	
			if( y<64 )
  			{
				while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
 				WCOML=pagenum;
				while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
				WCOML=(0x40+y);	  //0x40+(0~63)
 				while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
				WDATAL=(*addr)^mode;

			}
  			else if((y>63)&&(y<128))
      		{
			    while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
  				WCOMM=pagenum;		  
				while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
				WCOMM=y;		  // (0x40+y-64)
				while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
				WDATAM=(*addr)^mode;
				
              }
             else if(y>127)
             {
			    while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
  				WCOMR=pagenum;		  
				while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
				WCOMR=(y-0x40);		  // (0x40+y-64)
				while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
				WDATAR=(*addr)^mode;
             }
             y++;
     		 addr++;
     	}
     	wordch=w_or_c;
     	y = col;
     	pagenum++;
     }
}

/**********************************************
*函 数 名:displayint
*功能描述:显示整形数值<999
*函数说明:
*调用函数:
*全局变量:
*输入参数:x,y显示数字位置;value,显示数值;length,显示数值字节数;add,显示图片起始地址;mode,显示模式(正显或反显)
*返 回 值:
*设 计 者:时间:
*修 改 者:时间:
*   注意value的位数 x=(0-7),y=(0-191)
************************************************/
void displayint(unsigned char x,unsigned char y,unsigned int value,unsigned char length,unsigned char mode)
{
	unsigned char dat[5],i;
	for(i=0;i<length;i++)
	{
		outchar(x,y+i*8,CHAR_NULL,8,mode);
	}
	i=0;
	do
	{
		dat[i++] = value%10;
		value /= 10;
	}
	while(value != 0);
	
	do
	{
		i--;
		outchar(x,y,CHAR_0+16*dat[i],8,mode);
		y += 8;
	}
	while(i != 0);
}
/**********************************************
*函 数 名:display_img
*功能描述:在x,y处显示width*height大小的图片
*函数说明:height须是8的倍数
*调用函数:
*全局变量:
*输入参数:
*返 回 值:
*设 计 者:时间:
*修 改 者:时间:
*  注意value的位数 x=(0-7),y=(0-191),width+y<192,heigth+8*x<64
************************************************/
#if 0
void display_img(unsigned char x,unsigned char y,unsigned char width,unsigned char height,unsigned char code * addr, unsigned char mode)
{
 	unsigned char i,pagenum = 0x0b8,col = y,wordch=width;
  	
  	if( mode != 0xff )
		mode = 0 ;
  	pagenum += x;

//////////////////////////
//防止图片超出
if((width + y) > 192)
	width=192-y;
	wordch=width;
if((height + x*8) > 64)
	height=64-8*x;
////////////////////////

  	for( i=0; i < (height/8); i++)
  	{
  		for( ; wordch; wordch--)
  		{ 	
			if( y<64 )
  			{
				while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
 				WCOML=pagenum;
				while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
				WCOML=(0x40+y);	  //0x40+(0~63)
 				while(RCOML&0x80);//读左状态字1 ,busy; 0, OK
				WDATAL=(*addr)^mode;

			}
  			else if((y>63)&&(y<128))
      		{
			    while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
  				WCOMM=pagenum;		  
				while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
				WCOMM=y;		  // (0x40+y-64)
				while(RCOMM&0x80);//读中状态字1 ,busy; 0, OK
				WDATAM=(*addr)^mode;
				
              }
             else if(y>127)
             {
			    while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
  				WCOMR=pagenum;		  
				while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
				WCOMR=(y-0x40);		  // (0x40+y-64)
				while(RCOMR&0x80);//读中状态字1 ,busy; 0, OK
				WDATAR=(*addr)^mode;
             }
             y++;
     		 addr++;
     	}
     	wordch=width;
     	y = col;
     	pagenum++;
     }
}
#endif

⌨️ 快捷键说明

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