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

📄 text1.c

📁 部分T6963液晶显示的基本功能函数。在函数中进行调用
💻 C
字号:
#include<reg52.h>
#include <absacc.h>
#include <math.h>
#include <INTRINS.H>

#define LCMCP XBYTE [0xdfff]  //    液晶命令口
#define LCMDP XBYTE [0xdbff]  //    液晶数据口

#define  uchar unsigned char
#define  uint unsigned int
#define  ufloat unsigned float

uchar code HZTable[ ][32]={
{0x1c,0x22,0x26,0x2a,0x32,0x22,0x1c,0x00,},//0		  
{0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,},//1		  
{0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00,},//2		  
{0x7C,0x08,0x10,0x08,0x04,0x04,0x78,0x00,},//3		  
{0x08,0x18,0x28,0x48,0x7c,0x08,0x08,0x00,},//4		  
{0x7c,0x40,0x78,0x04,0x04,0x44,0x38,0x00,},//5		  
{0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00,},//6		  
{0x7c,0x04,0x08,0x08,0x10,0x10,0x10,0x00,},//7		  								      
{0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,},//8		  
{0x38,0x44,0x44,0x3c,0x04,0x08,0x30,0x00,},//9

{0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,},//0
{0x00,0x00,0x18,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,},//1
{0x00,0x00,0x3E,0x63,0x63,0x63,0x06,0x06,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,},//2
{0x00,0x00,0x3E,0x63,0x63,0x06,0x1C,0x06,0x03,0x03,0x63,0x66,0x3C,0x00,0x00,0x00,},//3
{0x00,0x00,0x06,0x0E,0x1E,0x36,0x36,0x66,0x66,0x7F,0x06,0x06,0x1F,0x00,0x00,0x00,},//4
{0x00,0x00,0x7F,0x60,0x60,0x60,0x7C,0x76,0x03,0x03,0x63,0x66,0x3C,0x00,0x00,0x00,},//5
{0x00,0x00,0x1E,0x36,0x60,0x60,0x7C,0x76,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,},//6
{0x00,0x00,0x7F,0x66,0x66,0x0C,0x0C,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,},//7
{0x00,0x00,0x3E,0x63,0x63,0x63,0x36,0x1C,0x36,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,},//8
{0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x37,0x1F,0x03,0x03,0x36,0x3C,0x00,0x00,0x00,},//9

{0x00,0x00,0xFE,0x07,0xC7,0x6F,0x3C,0x18,0x1C,0x1C,0x36,0x36,0x61,0xC7,0x3C,0x00,		 
0xC0,0xC0,0xC0,0xFF,0x86,0x6C,0x60,0x60,0x60,0x70,0xF0,0xD8,0x9C,0x0F,0x06,0x00,},//*"欢",  20
{0x60,0x31,0x3F,0x36,0x06,0x06,0xF6,0x36,0x37,0x37,0x36,0x30,0x30,0x78,0xCF,0x00,		  
0x00,0xC0,0x7E,0x66,0x66,0x66,0x66,0x66,0xE6,0x7E,0x6C,0x60,0x60,0x00,0xFF,0x00,},//*"迎",  21
{0x0C,0x0E,0x1F,0x18,0x3F,0x76,0xF6,0x37,0x36,0x33,0x31,0x30,0x31,0x33,0x3E,0x00,		  
0x60,0x60,0xFF,0x60,0xFE,0x66,0x66,0xFE,0x66,0x60,0xC0,0xC0,0xF8,0x1F,0x06,0x00,},//*"使",  22
{0x00,0x1F,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x1F,0x18,0x18,0x30,0x30,0x60,0xC0,		  
0x00,0xFE,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0xDE,0xCC,},//*"用",  23
};

			/*液晶显示*/
uchar read_data()	//读数据
{
	uchar i;
	i = LCMCP;
	return (i);		                                                                                                           
 }					   
void write_data(uchar data_d)  //写数据
{
	 LCMDP=data_d;
 }
 void write_contr(uchar data_c)	  //写命令
 {
	 LCMCP=data_c;	
 }				   
void LCD_Busy()			  //查忙?
{
  uchar dat;
      do{          
        dat=read_data();
        dat=0x03&dat;
        }while(dat!=0x03);
}					   
void LCD_Data(uchar dat)
{
	LCD_Busy();
	write_data(dat);   	
}							
void LCD_Com1(uchar command)//写有 1 个参数命令
{
	LCD_Busy();
	 write_contr(command);
}						   
void LCD_Com2(uchar dat,uchar command)//写有 2 个参数命令
{
	LCD_Data(dat);
	LCD_Com1(command);
}						 
void LCD_Com3(uchar data1,uchar data2,uchar command)//写有 3 个参数命令
{
	LCD_Data(data1); 
	LCD_Data(data2);
	LCD_Com1(command);
}				  
 void LCD_Clear()           //清屏
{
	long i;
	LCD_Com3(0x00,0x00,0x24); 
	for(i=0;i<0x1000;i++)
	LCD_Com2(0x00, 0xc0); 
 }
void LCD_Init()           //初始化LCD
{
	LCD_Com3(0x00,0x00,0x42); 
	LCD_Com3(0x14,0x00,0x43);	
	LCD_Com1(0x90); 
	LCD_Com1(0x80); 
	LCD_Com1(0x98); 
	LCD_Clear();
}		    
void LCD_HZ(uchar x,uchar y,uchar n)			//汉字显示 参数说明LCD_HZ(行,列,第几个字)
{
	uint StartAddr;
	uchar i;
	StartAddr=x*160+y;
	for(i=0;i<8;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc0); 
		LCD_Com2( HZTable[n][i+16], 0xc4); 
		StartAddr=StartAddr + 20;
	}
	StartAddr=(x+1)*160+y;
	for(i=8;i<16;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc0); 
		LCD_Com2( HZTable[n][i+16], 0xc4); 
		StartAddr=StartAddr + 20;
	}
}					
void LCD_DSZ(uchar x,uchar y,uchar n)		 //写大数字
{
	uint StartAddr;
	uchar i;
	StartAddr=x*160+y;
	for(i=0;i<8;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc4); 
		StartAddr=StartAddr + 20;
	}
	StartAddr=(x+1)*160+y;
	for(i=8;i<16;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc4); 
		StartAddr=StartAddr + 20;
	}
}

void LCD_DSZ1(uchar x,uchar y,uchar n)		 //写大数字
{
	uint StartAddr;
	uchar i;
	StartAddr=x*160+y;
	for(i=16;i<24;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc4); 
		StartAddr=StartAddr + 20;
	}
	StartAddr=(x+1)*160+y;
	for(i=24;i<32;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc4); 
		StartAddr=StartAddr + 20;
	}
}				 
void LCD_XSZ(uchar x,uchar y,uchar n)		 //写普通数字
{
	uint StartAddr;
	uchar i;
	StartAddr=x*160+y;
	for(i=0;i<8;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i], 0xc4); 
		StartAddr=StartAddr + 20;
	}
}

void LCD_XSZ1(uchar x,uchar y,uchar n,uchar m)		 //写普通数字11
{
	uint StartAddr;
	uchar i;
	StartAddr=x*160+y;
	for(i=0;i<8;i++)											 
	{
		LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		LCD_Com2( HZTable[n][i+m], 0xc4); 
		StartAddr=StartAddr + 20;
	}
}

void line(uchar x,uchar y,uchar n,uchar m)	   //划线
{	uchar i;
	uint  StartAddr;
	StartAddr=x*160+y;
	    for(i=0;i<m;i++)
		 {LCD_Com3(StartAddr,((StartAddr)/256),0x24);
		  LCD_Com2(n, 0xc4);
		  StartAddr++;
		  } 			
}			 
void LCD_DOT(uchar x,uchar y,uchar mod)		 //写点(坐标,模式)模式为1时写黑点,为其他时写空点
{
	uint StartAddr;							  //x为0~127行 y为0~159
	uchar dat;
	StartAddr=x*20+y/8;	 
	dat=0xf7-y%8; //生产位操作命令画点的数据
	if(mod==1)
       dat=dat|0x08;		 //写黑点
	else
	   dat=dat&0xf7;	 //写白点	
	LCD_Com3(StartAddr,((StartAddr)/256),0x24);
	LCD_Busy();		
	write_contr(dat);	
}
void LCD_line(uchar x1,uchar y1,uchar x2,uchar y2,uchar mod)  //划线条
{
 unsigned char x,y; 	  
 unsigned char d_x,d_y;    //d_x=x2-x1;d_y=y2-y1;  
 char err=0;			 
 unsigned char temp=0;	
 if(y2<y1)				 //交换大小,将y大的放在后面,即赋值到y2
   {  x=x1;
      y=y1;
	  x1=x2;
	  y1=y2;
	  x2=x;
	  y2=y;
   } 
 d_y=y2-y1;	
 if (d_y==0) 				//y2=y1;画横线
  {					   
    if (x1>x2) 
	   {x=x1;x1=x2;x2=x;} 
    for( x=x1;x<=x2;x++ ) 
	    LCD_DOT(x,y1,mod);	  
  }	  
 else						 //y2!=y1;
  {		  				   
    if(x2>=x1)		
	   {temp=1;d_x=x2-x1;}	 	  //x2>=x1 ,temp为标志位
	else 	   	    
		d_x=x1-x2;		 
    x=x1;
	y=y1;		
	LCD_DOT(x,y,mod);			  //写起点
	/*      x2>=x1且斜率绝对值小于等于1               */
    if(temp&&(d_y<=d_x)) 
        { 
		  while(x!=x2)	 
            {  if(err<0)
			       {x=x+1;err=err+(y2-y);}
               else 
			       {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
               LCD_DOT(x,y,mod);						   
            }
	    }
	  /*      x2>=x1且斜率绝对值大于1               */
    if(temp&&(d_y>d_x)) 			
        {  
		  while(y!=y2)		 
            { 
			   d_x=x2-x;
			   d_y=y2-y;  
               if(err<0)
			     {x=x+1;y=y+1;err=err+d_y-d_x;}	
               else 
			     {y=y+1;err=err-d_x;}	  
               LCD_DOT(x,y,mod);
            }
		 }		
	/*      x2<x1且斜率绝对值小于等于1               */	 
     if(!temp&&(d_y<=d_x))
			{
               while(x!=x2)
                {
				   d_x=x-x2;
				   d_y=y2-y;
                   if(err<0)
				       {x=x-1;err=err+d_y;}	
                   else 
				       {x=x-1;y=y+1;err=err+d_y-d_x;} 
                 LCD_DOT(x,y,mod);						  
               }
			 } 
	/*      x2<x1且斜率绝对值大于1               */	  
      if(!temp &&(d_y>d_x))
			   {
                  while(y!=y2)

                   {  
				     d_x=x-x2;
					 d_y=y2-y;
                     if(err<0)
					      {x=x-1;y=y+1;err=err+d_y-d_x;} 
                     else 
					      {y=y+1;err=err-d_x;}	 
                     LCD_DOT(x,y,mod); 
                   }
                }	        
   }
}

void welcome()
{
    LCD_HZ(4,2,20);
    LCD_HZ(4,4,21);
	LCD_HZ(4,6,22);
	LCD_HZ(4,8,23);


}

void main(void)
{
   LCD_Init();
   welcome();
}

⌨️ 快捷键说明

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