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

📄 12864._h

📁 是一款开发板的外围电路试验程序(附有原理图)
💻 _H
字号:
#include <iom16v.h>
#include <macros.h>
#include <stdlib.h>
#include "font.h"
#include "string.h"
/*************19264显示接口引脚定义*****************/


#define	LCD_DI (1 <<6)			    	// PA0----DI
#define	LCD_RW (1 <<5)					// PA1----RW
#define	LCD_E (1 <<4)			    	// PA2----E
#define	LCD_CS1 (1 << 3)	           	// PA3----CS1
#define	LCD_CS2 (1 << 2)				// PA4----CS2

#define	LCD_SET_CS1() (PORTA |= LCD_CS1)	// 位置位,输出1
#define	LCD_SET_CS2() (PORTA |= LCD_CS2)
#define	LCD_SET_DI() (PORTA |= LCD_DI)
#define	LCD_SET_RW() (PORTA |= LCD_RW)
#define	LCD_SET_E() (PORTA |= LCD_E)

#define	LCD_CLEAR_CS1() (PORTA &= ~LCD_CS1)			// 位清零,输出0
#define	LCD_CLEAR_CS2() (PORTA &= ~LCD_CS2)

#define	LCD_CLEAR_DI() (PORTA &= ~LCD_DI)
#define	LCD_CLEAR_RW()   (PORTA &= ~LCD_RW)
#define	LCD_CLEAR_E() (PORTA &= ~LCD_E)
#define	LCD_DATA_OUT	PORTB				//LCD数据输出口
#define	LCD_DATA_IN 	PINB				//LCD数据输出口
#define	LCD_DDR 	    DDRB				//LCD数据口方向

void OutI(unsigned char CtroCode,unsigned char Com);
void OutD(unsigned char CtroCode,unsigned char Dat);
void LCD_NOP(void);
void ClearDisplay(void);
void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
unsigned char SelscP,unsigned char num,unsigned char flag);
void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag);



void OutI(unsigned char CtroCode,unsigned char Com)
{ //Com为指令
  unsigned char aa=1;    
  switch(CtroCode)
  { case 0: LCD_SET_CS1(); //全屏,CS1=0,CS2=0,CS3=0
            LCD_SET_CS2(); 
			
  		 	break;
  	case 1: LCD_CLEAR_CS2(); //左屏,CS1=0,CS2=1,CS3=1
            LCD_SET_CS1(); 
			
		 	break;
	case 2: LCD_SET_CS2(); //中屏,CS1=1,CS2=0,CS3=1
            LCD_CLEAR_CS1(); 
			
		 	break;	
   
  }
  LCD_DDR=0;
  LCD_CLEAR_DI();          //DI=0
  /*
  while(aa)
  { LCD_SET_RW(); //R/W=1
	LCD_CLEAR_DI(); //D/I=0
    LCD_SET_E(); //E=1
    NOP();
    LCD_CLEAR_E(); //E=0
    aa=LCD_DATA_IN;
	
    aa&=0x80;
	//if(aa==0) break;
  }*/
   LCD_NOP();
    LCD_NOP();
	 LCD_NOP();
	  LCD_NOP();
  LCD_DDR=0Xff;
  LCD_CLEAR_RW(); //R/W=0
  
  LCD_SET_E(); //E=1
  LCD_NOP();
  LCD_DATA_OUT=Com;
  LCD_NOP();
  LCD_CLEAR_E(); //E=0
  //
  LCD_SET_CS1(); //CS1=1,CS2=1,CS3=1
  LCD_SET_CS2(); 
  
}

void OutD(unsigned char CtroCode,unsigned char Dat)
{ //Dat为数据
  unsigned char aa=1;  
   switch(CtroCode)
  { case 0: LCD_SET_CS1(); //全屏,CS1=0,CS2=0
            LCD_SET_CS2(); 
			
  		 	break;
  	case 1: LCD_CLEAR_CS2(); //左屏,CS1=0,CS2=1
            LCD_SET_CS1(); 
			
		 	break;
	case 2: LCD_SET_CS2(); //中屏,CS1=1,CS2=0
            LCD_CLEAR_CS1(); 
			
		 	break;	
   
  }
  LCD_DDR=0X00;
 /* while(aa)
  { LCD_SET_RW(); //RW=1
    LCD_CLEAR_DI(); //D/I=0
    LCD_SET_E(); //E=1
	NOP();
    LCD_CLEAR_E(); //E=0
    aa=LCD_DATA_IN;
    aa&=0x80;
  }*/
  LCD_NOP();
  LCD_NOP();
  LCD_NOP();
  LCD_NOP();
  LCD_NOP();
  LCD_NOP();
  
  LCD_CLEAR_RW(); //RW=0
  LCD_SET_DI(); //D/I=1
  LCD_DDR=0Xff;
  LCD_SET_E(); //E=1
  LCD_NOP();
  LCD_DATA_OUT=Dat;
  
  
  LCD_NOP();
  LCD_CLEAR_E(); //E=0
  LCD_SET_CS1(); //CS1=1,CS2=1,CS3=1
  LCD_SET_CS2(); 
  
}

void LCD_NOP(void)
{ unsigned int i;

  for(i=0;i<50;i++); 
}

void ClearDisplay(void)
{ unsigned char i,j;

  for(i=0;i<8;i++)
  { OutI(0,0xb8+i); //X首地址
  	OutI(0,0x40); //y首地址
  	for(j=0;j<64;j++)
      OutD(0,0xff);
  }
}


void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
unsigned char SelscP,unsigned char num,unsigned char flag)//Add:显示数据的起始地址
{ unsigned char i,m=0,dat;                                //xAdd,yAdd:显示位置
                                                          //SelscP:选择屏1,2,3
  OutI(SelscP,xAdd++); //x首地址                          //mun显示宽度,一般为16
  OutI(SelscP,yAdd); //y首地址							  //flag:是否清字位1不清
  while(m<num+2)
  { for(i=0;i<num;i++)
    { if(flag==0) dat=0;
	  else dat=font[Add+i+m];
	  OutD(SelscP,dat);
	}
	OutI(SelscP,xAdd++); 
	OutI(SelscP,yAdd);
	m+=num;
   } 
}

void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag)
{ unsigned char i,p,l,r;  	  			   			     //Add:数据起始位置
  		   												 //com:空位置个数,4字为满
  r=com&0x0f;											 //line: 显示行位置
  l=com>>4;												 //flag:是否清字符1不清
  for(i=0;i<r;i++)
    DisplayWord(Add+i*32,0xb8+(line%4)*2,0x40+(i+l)*16,(line/4)+1,16,flag);
}



⌨️ 快捷键说明

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