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

📄 dianyan.c

📁 pic16f上12864液晶显示
💻 C
字号:
#include"pic.h"
 const char bank1 HE[32]={
0x10,0x60,0x01,0xC6,0x30,0x02,0xE2,0x22,0x22,0xE2,0x02,0x02,0xFE,0x02,0x02,0x00,
0x04,0x04,0xFF,0x00,0x00,0x00,0x07,0x02,0x02,0x07,0x40,0x80,0x7F,0x00,0x00,0x00,};
 const char bank1 BEI[32]={
0x00,0x20,0x20,0x20,0x20,0xFF,0x00,0x00,0x00,0xFF,0x40,0x20,0x30,0x18,0x10,0x00,
0x10,0x30,0x18,0x08,0x04,0x7F,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,};
const char bank1 GONG[32]={
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,};
 char bank1 D[32]={//why is it wrong when it is 'DA'
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,};
char *ARRAY;
char  PPP[34];
char I;
void	YJ_initial()
{
	INTCON=0X00;		
	WDTDIS;
	ADCON1=0X87;				//设置所有与模拟输入共用的引脚为I/O方式
	TRISE=TRISE&0XF8;			//设置RE0,RE1,RE2为输出
	TRISB=TRISB&0XFE;			//设置RB0为输出
    TRISA=TRISA&0XF7;			//设置RA3为输出

}


//读液晶显示器状态子程序,行参E代表液晶的边
void	LCDSTA1(int	E)
//int	E;
{
	int	E1FLAG;
	TRISD=0XFF;					//设置D口为输入
	while(1)
	{
		if(E==1)
			{PORTA=PORTA|0X08;	//设置RE2/CSA=0,RA3/CSB=1,RE0/RW=1,RE1/DI=0
			PORTE=(PORTE|0X01)&0XF9;}
		else	
			{PORTA=PORTA&0XF7;	//设置RE2/CSA=1,RA3/CSB=0,RE0/RW=1,RE1/DI=0	
			PORTE=(PORTE|0X05)&0XFD;}
		PORTB=PORTB|0X01;		//RB0/E=1
		E1FLAG=PORTD&0X80;
		PORTB=PORTB&0XFE;		//RB0/E=0
		if(E1FLAG==0X0000)break;
	}
}

//对液晶显示器发指令子程序,行参E代表处理的液晶的边
void	TRANS1(int	TRANS,int E)
//int	TRANS,E;
{
	LCDSTA1(E);
	TRISD=0X00;			//RD为输出
	if(E==1)				//设置RE2/CSA=0,RA3/CSB=1,RE0/RW=0,RE1/DI=0	
		{PORTA=PORTA|0X08;
		PORTE=PORTE&0XF8;}
	else					//设置RE2/CSA=1,RA3/CSB=0,RE0/RW=0,RE1/DI=0
		{PORTA=PORTA&0xF7;
		PORTE=(PORTE|0X04)&0XFC;}
	PORTD=TRANS;
	PORTB=PORTB|0X01;	//RB0/E=1
	PORTB=PORTB&0XFE;	//RB0/E=0		
}

//对液晶显示器写数据子程序
void	WRITE1(char	WRITE,int CLMADD,int	E)
//int	WRITE,CLMADD,E;
{
	TRANS1(CLMADD,E);		///设置列地址
	LCDSTA1(E);				//查询液晶是否为空闲
	TRISD=0X00;	//RD为输出
	if(E==1)					//设置RE2/CSA=0,RA3/CSB=1,RE0/RW=0,RE1/DI=1	
		{PORTA=PORTA|0X08;
		PORTE=(PORTE|0X02)&0xFA;}
	else						//设置RE2/CSA=1,RA3/CSB=0,RE0/RW=0,RE1/DI=1
		{PORTA=PORTA&0xF7;
		PORTE=(PORTE|0X06)&0xFE;}
	PORTD=WRITE;
	PORTB=PORTB|0X01;		//RB0/E=1
	PORTB=PORTB&0XFE;		//RB0/E=0
}

//开E边显示子程序
void	DISP1(int	E)
//int	E;
{
	int	E1FLAG;
	while(1)
	{
		TRANS1(0X03F,E);		///送出控制命令
      //	LCDSTA1(E);				//判断液晶是否为空闲状态
		TRISD=0XFF;				//设置ED为输入
		if(E==1)					//设置RE2/CSA=0,RA3/CSB=1,RE0/RW=1,RE1/DI=0
			{PORTA=PORTA|0X08;
			PORTE=(PORTE|0X01)&0xF9;}
		else						//设置RE2/CSA=1,RA3/CSB=0,RE0/RW=1,RE1/DI=0
			{PORTA=PORTA&0xF7;
			PORTE=(PORTE|0X05)&0xFD;}
	PORTB=PORTB|0X01;			//RB0/E=1
	E1FLAG=PORTD&0X20;
	PORTB=PORTB&0XFE;			//RB0/E=0
	if(E1FLAG==0X00)break;			//如果液晶被打开,则退出循环,否则继续打开
	}
}

//E边清屏子程序
void	CLEAR1(int	E)
//int	E;
{
	int PAGEADD,PAGENUM,CLMSUM;
	for(PAGENUM=0X08,PAGEADD=0X0B8;PAGENUM>0;PAGENUM--,PAGEADD++)
     	{
         	TRANS1(PAGEADD,E); 		//设置相应的页地址
        	 for(CLMSUM=0x40;CLMSUM<=0X7F;CLMSUM++)
         		{
           			LCDSTA1(E);		//判断液晶空闲状态
           			WRITE1(0X00,CLMSUM,E);	//送0清屏
          		}
        }
}


//关E边显示子程序
void	DISOFF1(int	E)
//int	E;
{
	int E1FLAG;
	while(1)
	{
		TRANS1(0X3E,E);		//发送控制命令
		LCDSTA1(E);			//判断液晶是否为空闲状态
		TRISD=0XFF;			//设置RD为输入
		if(E==1)				//设置RE2/CSA=0,RA3/CSB=1,RE0/RW=1,RE1/DI=0
			{PORTA=PORTA|0X08;
			PORTE=(PORTE|0X01)&0xF9;}
		else					//设置RE2/CSA=1,RA3/CSB=0,RE0/RW=1,RE1/DI=0
			{PORTA=PORTA&0xF7;
			PORTE=(PORTE|0X05)&0xFD;}
	PORTB=PORTB|0X01;		//RB0/E=1
	E1FLAG=PORTD&0X20;
	PORTB=PORTB&0XFE;		//RB0/E=0
	if(E1FLAG==0X20)break;		//如液晶关闭,则推出循环,否则继续关闭
	}
}

//LCD的E边初始化子程序
void	LCD1INIT(int	E)
{
	DISOFF1(E);			//关E区显示
	/*TRANS1(0X0A4,E);  
   	TRANS1(0X0A9,E);    
  	TRANS1(0X0E2,E);   
 	TRANS1(0X0A0,E);*/ 
   	CLEAR1(E);			//清屏
    LCDSTA1(E);			//判断液晶空闲状态
    DISP1(E);				//开显示
} 

//显示""
DISPLAY1(int	E,int	PAGADD,int	CLMADD)
{int K;
 char TEMP;
 TRANS1(0xc0,E) ;
 TRANS1(PAGADD,E);
 for(K=0;K<16;K++,CLMADD++,ARRAY++)
	{TEMP=*ARRAY;
	 WRITE1(TEMP,CLMADD,E);

	}
	CLMADD=CLMADD-16;
	PAGADD=PAGADD+1;
	TRANS1(PAGADD,E);
	for(;K<32;K++,CLMADD++,ARRAY++)
	{TEMP=*ARRAY;
	 WRITE1(TEMP,CLMADD,E);
	}
}
	void XIANSHI()
{	

	int J,h,g;
	for(h=0xb8;h<0xbf;h++)
	{	
			for(g=0;g<100;g++)
		{
			for(J=0;J<32;J++)
			PPP[J]=HE[J];
			ARRAY=&PPP[0];
			DISPLAY1(1,h,0X58);
	
			for(J=0;J<32;J++)
			PPP[J]=BEI[J];
			ARRAY=&PPP[0];
			DISPLAY1(1,h,0X68);

			for(J=0;J<32;J++)
			PPP[J]=GONG[J];
			ARRAY=&PPP[0];
			DISPLAY1(2,h,0X40);
			for(J=0;J<32;J++)
			PPP[J]=D[J];
			ARRAY=&PPP[0];
			DISPLAY1(2,h,0X50);
	}
		for(g=0;g<10000;g++)
		{}
		
		CLEAR1(1);
		CLEAR1(2);
	
	}
	
}
	void ZAIXIAN()
{	
	int J;
	for(J=0;J<32;J++)
	PPP[J]=D[J];
	ARRAY=&PPP[0];
	DISPLAY1(1,0XB8,0X68);
	
}
main()
{	YJ_initial();
	LCD1INIT(1);
	LCD1INIT(2);
	while(1){
	XIANSHI();
 // ZAIXIAN();

	}
}

⌨️ 快捷键说明

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