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

📄 12864.h

📁 12864液晶程序奥神队教案看来是大会发送到符合卡口述的回复 阿水地方阿水地方阿水地方
💻 H
字号:
#include "font.h"

#define	LCD_DI (1 <<6)			    	// PA6----DI
#define	LCD_RW (1 <<5)					// PA5----RW
#define	LCD_E (1 <<4)			    	// PA4----E
#define	LCD_PSB (1 << 3)	           	// PA3----CS1
#define	LCD_RST (1 << 1)				// PA1----RST

#define LCD_PORT  PORTA                 //PA口连接到了5个控制脚,具体定义如上
#define	LCD_SET_PSB()    (LCD_PORT |= LCD_PSB)	// 位置位,输出1
#define	LCD_SET_RST()    (LCD_PORT |= LCD_RST)
#define	LCD_SET_DI()     (LCD_PORT |= LCD_DI)
#define	LCD_SET_RW()     (LCD_PORT |= LCD_RW)
#define	LCD_SET_E()      (LCD_PORT |= LCD_E)

#define	LCD_CLEAR_PSB()  (LCD_PORT &= ~LCD_PSB)			// 位清零,输出0
#define	LCD_CLEAR_RST()  (LCD_PORT &= ~LCD_RST)
#define	LCD_CLEAR_DI()   (LCD_PORT &= ~LCD_DI)
#define	LCD_CLEAR_RW()   (LCD_PORT &= ~LCD_RW)
#define	LCD_CLEAR_E()    (LCD_PORT &= ~LCD_E)
#define	LCD_DATA_OUT	 PORTB				//LCD数据输出口
#define	LCD_DATA_IN 	 PINB				//LCD数据输出口
#define	LCD_DDR 	     DDRB				//LCD数据口方向
/* Define the register command code */
#define Disp_On  0x3f
#define Disp_Off 0x30
#define Col_Add  0x40
#define Page_Add 0xb8
#define Start_Line 0xc0


void delay(unsigned int t);
void write_com(unsigned char cmdcode);
void write_data(unsigned char Dispdata);
void init_lcd(void);
unsigned char read_data(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 ClearDisplay(void);
void Test(unsigned int lcd_data);
void Testlcd2(unsigned char lcd_datah,unsigned char lcd_datal);
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}

/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{

LCD_CLEAR_DI();
LCD_CLEAR_RW();
LCD_DDR=0xff;

LCD_DATA_OUT=cmdcode;
LCD_SET_E();
delay(100);
LCD_CLEAR_E();
}

/*-------------------写数据到LCD----------------------------*/

void write_data(unsigned char Dispdata)
{

LCD_SET_DI();
LCD_CLEAR_RW();
LCD_DDR=0xff;

LCD_DATA_OUT=Dispdata;
LCD_SET_E();
delay(100);
LCD_CLEAR_E();
}

/*-------------------读LCD数据----------------------------*/

unsigned char read_data(void)
{
unsigned char tmpin;
LCD_DDR=0x0;
LCD_SET_DI();
LCD_SET_RW();
delay(0);
LCD_SET_E();
delay(0);
LCD_CLEAR_E();

tmpin=LCD_DATA_IN;

return tmpin;
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd(void)
{
LCD_SET_PSB();
delay(100);
LCD_SET_RST();
delay(100);

write_com(0X30);
delay(100);
write_com(0X30);
delay(100);
write_com(0x0C);
delay(100);
write_com(0X01);
delay(100);
write_com(0X06);
delay(100);
}

/*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:显示位置
  switch (SelscP)
   {case 0:LCD_SET_CS1();
   		   LCD_SET_CS2();
		   break;
	case 1:LCD_SET_CS1();
   		   LCD_CLEAR_CS2();
		   break;
	case 2:LCD_CLEAR_CS1();
   		   LCD_SET_CS2();
		   break;	   	   
   }                                                       //SelscP:选择屏1,2,3
  write_com(xAdd++); //x首地址                          //mun显示宽度,一般为16
  write_com(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];
	  write_data(dat);
	}
	write_com(xAdd++); 
	write_com(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=4-com;												 //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);
}*/
void ClearDisplay(void)
{ unsigned char i,j;

  for(i=0;i<8;i++)
  { write_com(0xb8+i); //X首地址
  	write_com(0x40); //y首地址
  	for(j=0;j<64;j++)
      write_data(0x00);
  }
}

void Test(unsigned int lcd_data)
 {unsigned int K;
  write_com(0x01);
  write_com(0x40);
  for(K=0;K<148;K++)
  {write_data(lcd_data);
  }

 }
void Testlcd2(unsigned char lcd_datah,unsigned char lcd_datal)
{write_data(lcd_datal);
 delay(100);
 write_data(lcd_datah);
}

⌨️ 快捷键说明

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