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

📄 19264a.h

📁 19264A显示驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef LCD_19264
#define	LCD_19264

#include <intrins.h>
#include <string.h>

unsigned char code chargroup[10][16]={{0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00}, /*"0",0*/

								{0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},/*"1",1*/

								{0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00},/*"2",2*/

								{0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00},/*"3",3*/

								{0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00},/*"4",4*/

								{0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00},/*"5",5*/

								{0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00},/*"6",6*/

								{0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00},/*"7",7*/

								{0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00},/*"8",8*/

								{0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00}};/*"9",9*/


 unsigned char lenth1=0,lenth2=0;	  // 全局变量
/*****************************I/O口定义****************************
	1<------>GND		2<------>VCC
	3<------>VO			4<------>D/I
	5<------>R/W		6<------>E
	7--14<------>D0--D7
	15<----->CS1		16<----->RST
	17<----->CS2		18<----->CS3
	19<----->Vout		20<----->VDD
********************************************************************/

/*******************************************************************
	CS1			CS2			CS3			ACM19264
	1			1			1			禁止使用
	0			1			1			左区
	1			0			1			中区
	1			1			0			右区
	0			0			0			未选
********************************************************************/
	#define COMMAND		0											//指令
	#define DATA		1											//数据

	sbit  BUSY	=	ACC^7;											//忙信号

	#define LCD_data	P3											//数据口
	sbit	RS	=		P1^0;										//控制口,H:数据,L:指令
	sbit	RW	=		P1^1;										//读写控制,H:读,L:写
	sbit	EN	=		P1^2;										//使能,下降沿处理任务
	sbit 	RST = 		P1^3;
	sbit	CS1	=		P1^4;										//左区
	sbit	CS2	=		P1^5;										//中区
	sbit    CS3	=		P1^6;										//右区

	void display_on(unsigned char);
				/* L L H H H H H D *********/
		#define 		D			0x01							//显示开,状态字ON/OFF为L
		#define 		NO_D		0x00							//显示关,状态字ON/OFF为H
																	
	void home(unsigned char);										//显示起始地址设置
				/* H H L5 L4 L3 L2 L1 L0 ***/
	
	void page(unsigned char);										//页面地址设置
				/* H L H H H P2 P1 P0 ******/
		
	void address(unsigned char);									//列地址设置
				/* L H C5 C4 C3 C2 C1 C0 ***/

	void display_picture(unsigned char,unsigned char,unsigned char  *);		//写显示数据
	//unsigned char wait();											//忙信号处理
	//void read();												   	//读显示数据
	void writelcd(unsigned char,unsigned char);						//写指令或数据
	void intital();													//液晶初始化函数
	void delay1ms(unsigned char);									//延时函数
	void display_hanzi(unsigned char,unsigned char,unsigned char *);
										
/////////////////////////////////////具体函数如下////////////////////////////////////
/****************数据会跨区显示可能是下载线原因,把下载线拔掉就不会重叠显示了*******/
	
/*****************************延时函数********************************************/

	void delay1ms(unsigned char count)
		{
			unsigned int i,j;
			for(i=count;i>0;i--)
			for(j=100;j>0;j--);									//不能用自加形式
		}
	
/*****************************写函数**********************************************/

	void writelcd(unsigned char style,unsigned char input)
		{	
	  		delay1ms(1);											//延时不能太长,液晶处理是ns级																
			RS=style;
			RW=0;
			EN=1;								
			LCD_data=input;	_nop_(); _nop_();
			EN=0;	_nop_();_nop_();		
		//	wait();	
		}		

/*****************************忙处理函数*******************************************/
  /*																//忙检测函数不好用
	unsigned char wait()
		{
			RW=1;
			RS=0;		_nop_();
			EN=1;		_nop_();
			do
				{
					ACC=LCD_data;	
				}
			while(BUSY==1);
			EN=0;
			return ACC;
		}
		*/				 
/******************************显示开启函数****************************************/

	void display_on(unsigned char show)
		{
			CS1=0;CS2=0;CS3=0;
			writelcd(COMMAND,0x3e | show);
		}

/*******************************显示起始行设置函数*********************************/

	void home(unsigned char back)
		{
			writelcd(COMMAND,0xc0 | back);
		}

/*******************************页地址函数******************************************/

	void page(unsigned char page)
		{
			writelcd(COMMAND,0xb8 | page);
		}

/*******************************列地址函数*******************************************/

	void address(unsigned char add)
		
		{
		 	writelcd(COMMAND,0x40 | add);
		}

/*******************************清屏函数**********************************************/
 
	void clearscreen()
	 	{
			unsigned char i,j;
			CS1=0;CS2=0;CS3=0;			
  			for(i=0;i<8;i++)
				{
					page(i);
					address(0);
					for(j=0;j<64;j++)
						{	
							writelcd(DATA,0x00);
						}
				}
			CS1=0;CS2=0;CS3=0;  
		}

/********************************清楚指定页,指定列数函数****************************/
  
	void clearpage(unsigned char X,unsigned char Y,unsigned char input)				//input为字长,Y为起始列
		{	
			unsigned char i=0;					
			unsigned char lie;			
							
			for(i=0;i<(input*8);i++)											  	//列显示处理
				{ 		
					lie=Y+i;
					if(lie<=63)										
						{
							CS1=0;CS2=1;CS3=1;							
								page(X);
									address(lie);							 			
									writelcd(DATA,0x00);
								page(X+1);
									address(lie);							 			
									writelcd(DATA,0x00);
						}
					else if(lie>63&&lie<=127)
						{
			 				lie=lie-64;
							CS1=1;CS2=0;CS3=1;							
									page(X);
										address(lie);							 			
										writelcd(DATA,0x00);									
									page(X+1);
										address(lie);							 			
										writelcd(DATA,0x00);
						}
					else if(lie>127)
						{
			 				lie=lie-128;
							CS1=1;CS2=1;CS3=0;								
							
									page(X);
										address(lie);							 			
										writelcd(DATA,0x00);
									page(X+1);
										address(lie);							 			
										writelcd(DATA,0x00);					 						
						}
				}
		}
/********************************词组显示函数****************************************/

	void display_hanzizu(unsigned char X ,unsigned char Y,unsigned char  *tab)
		{
			unsigned char i=0,j=0;
					
			unsigned char flat1,flat2,hang,lie;
			
			flat1=tab[0];											//列宽
			flat2=tab[1]/8;											
				if(tab[1]%8) flat2++;								//行数
							
			for(hang=X;hang<X+flat2;hang+=2)						//写行
				{ 		
					if(Y<=63)										//列显示处理
						{
							CS1=0;CS2=1;CS3=1;			
							for(i=0;i<flat1;i++)
								{	
									page(hang);
										if((Y+i)<=63)
											{CS1=0;CS2=1;CS3=1;address(Y+i);}
							 			else if((Y+i)>63&&(Y+i)<=127)
											{CS1=1;CS2=0;CS3=1;address(Y+i-64);}
										else if((Y+i)>127)
											{CS1=1;CS2=1;CS3=0;address(Y+i-128);}
										writelcd(DATA,tab[i*2+2]);
									page(hang+1);
										if((Y+i)<=63)
											{CS1=0;CS2=1;CS3=1;address(Y+i);}
							 			else if((Y+i)>63&&(Y+i)<=127)
											{CS1=1;CS2=0;CS3=1;address(Y+i-64);}
										else if((Y+i)>127)
											{CS1=1;CS2=1;CS3=0;address(Y+i-128);}
										writelcd(DATA,tab[i*2+1+2]);						
					 			}
						}
					else if(Y>63&&Y<=127)
						{
			 				lie=Y-64;
							CS1=1;CS2=0;CS3=1;								
							for(i=0;i<flat1;i++)
								{	
									page(hang);
										if((lie+i)<=63)
											{CS1=1;CS2=0;CS3=1;address(lie+i);}
										else if((lie+i)>63&&(lie+i)<=127)
											{CS1=1;CS2=1;CS3=0;address(lie+i-64);}
										else if((lie+i)>127)
											{CS1=0;CS2=1;CS3=1;address(lie+i-128);}
										writelcd(DATA,tab[i*2+2]);
									page(hang+1);

⌨️ 快捷键说明

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