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

📄 head_12864.h~

📁 使用AVR单片机对信号进行采集,通过FFT,分析信号失真度
💻 H~
字号:
//修改PORTA控制脚,PORTC数据脚,
//注意在lcd_init()中有管脚初始化,在使用时注意不要修改管脚输入输出状态。

#define	LCD_WR 	(1 << 0)	           	// PA0----WR
#define	LCD_RD 	(1 << 1)	           	// PA1----RD
#define	LCD_CE 	(1 << 2)	          	// PA2----CE
#define	LCD_CD 	(1 << 3)	         	// PA3----CD
#define	LCD_RST 	(1 << 4)	          	// PA4----RST
#define	LCD_SDATA	(1 << 5)                     //PA5---SDATA
#define	LCD_CLK	(1 << 6)		//PA6----CLK

#define 	LCD_PORT  PORTA                 //PA口连接到了5个控制脚,具体定义如上
#define	LCD_DDR 	     	DDRA				//LCD数据口方向

#define	LCD_SET_RST()    (LCD_PORT |= LCD_RST)	// 位置位,输出1
#define	LCD_SET_CD()    (LCD_PORT |= LCD_CD)
#define	LCD_SET_CE()     (LCD_PORT |= LCD_CE)
#define	LCD_SET_RD()     (LCD_PORT |= LCD_RD)
#define	LCD_SET_WR()      (LCD_PORT |= LCD_WR)
#define	LCD_SET_SDATA()      (LCD_PORT |= LCD_SDATA)
#define	LCD_SET_CLK()      (LCD_PORT |= LCD_CLK)

#define	LCD_CLEAR_RST()  (LCD_PORT &= ~LCD_RST)			// 位清零,输出0
#define	LCD_CLEAR_CD()  (LCD_PORT &= ~LCD_CD)
#define	LCD_CLEAR_CE()   (LCD_PORT &= ~LCD_CE)
#define	LCD_CLEAR_RD()   (LCD_PORT &= ~LCD_RD)
#define	LCD_CLEAR_WR()    (LCD_PORT &= ~LCD_WR)
#define	LCD_CLEAR_SDATA()      (LCD_PORT &= ~LCD_SDATA)
#define	LCD_CLEAR_CLK()      (LCD_PORT &= ~LCD_CLK)



/* Define the register command code */
#define Disp_On  0x9f
#define Disp_Off 0x90
//#define Col_Add  0x40
//#define Page_Add 0xb8
#define Start_Line 0xc0
//#define byte unsigned char
#define word_home_adder 0x00
#define pic_home_adder  0x80


void check(void);
void write_com(unsigned char cmdcode);
void write_data(unsigned char Dispdata);
void lcd_init(char width);
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 lcd_clear(void);
void lcd_clear_word(void);
void lcd_clear_pic(void);
//void Test(unsigned int lcd_data);
//void Testlcd2(unsigned char lcd_datah,unsigned char lcd_datal);

void disp_picture(flash char * pic_adder);
void disp_picture_disappear(flash char * pic_adder);
void lcd_putchar(byte ww);
void lcd_putsf(char flash * text_adder);
void lcd_gotoxy(char xx,char yy);
void lcd_gotoxy_pic(char xx,char yy);
void goto_wh(void);
void goto_ph(void);
void lcd_putpoint(byte xx,byte yy);
void lcd_clearpoint(byte xx,byte yy);
void select_menu(byte x_begin,byte y_begin,byte xx,byte yy);

/*--------------------CHECK-------------------------------*/
/*void check(void)
{
    LCD_SET_CD();
    LCD_CLEAR_RD();
    LCD_SET_WR();
    LCD_DATA_DDR=0x00;
    LCD_DATA_DDR=0x00;
    LCD_CLEAR_CE();
    LCD_SET_CE();
}*/


/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
//check();
byte i;
LCD_DDR=0xff;
LCD_SET_CD();
LCD_CLEAR_WR();
LCD_SET_RD();

//LCD_DATA_OUT=cmdcode;
for (i=0;i<8;i++)
{
  if (cmdcode & 0x01) LCD_SET_SDATA();
    else LCD_CLEAR_SDATA();
  LCD_SET_CLK();
  LCD_CLEAR_CLK();
  cmdcode=cmdcode>>1;
}  
LCD_CLEAR_CE();
LCD_SET_CE();
}

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

void write_data(unsigned char Dispdata)
{
//check();
byte i;
LCD_DDR=0xff;
LCD_CLEAR_CD();
LCD_CLEAR_WR();
LCD_SET_RD();
LCD_DDR=0xff;

//LCD_DATA_OUT=Dispdata;
for (i=0;i<8;i++)
{
  if (Dispdata & 0x01) LCD_SET_SDATA();
    else LCD_CLEAR_SDATA();
  LCD_SET_CLK();
  LCD_CLEAR_CLK();
  Dispdata=Dispdata>>1;
}

LCD_CLEAR_CE();
LCD_SET_CE();
}

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

/*unsigned char read_data(void)
{
unsigned char tmpin;
LCD_DATA_DDR=0x00;
LCD_SET_WR();
LCD_CLEAR_RD();

LCD_CLEAR_CE();
tmpin=LCD_DATA_IN;
LCD_SET_CE();

return tmpin;
}*/
/*------------------初始化LCD屏--------------------------*/
void lcd_init(char width)
{
LCD_PORT=0xff;
LCD_DDR=0xff;
LCD_CLEAR_RST();
LCD_SET_RST();

write_com(0X9c);       //9f启用图形字符,97关闭图形
write_com(0X81);       //逻辑或80   81异或
write_com(0xa0);	//一行光标

write_data(word_home_adder);
write_data(0x00);
write_com(0X40);        //文本显示区首地址

write_data(width);
write_data(0x00);
write_com(0X41);        //文本显示区宽度、   

write_data(pic_home_adder);
write_data(0x00);
write_com(0X42);        //图形显示区首地址

write_data(width);
write_data(0x00);
write_com(0X43);        //图形显示区宽度

}

/*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 lcd_clear(void)
{ unsigned char i,j;
goto_wh();
for(i=0;i<8;i++)
  { 
    for(j=0;j<16;j++)
      {
      write_data(0x00);
      write_com(0xc0);
       }
  }
goto_ph(); 
  for(i=0;i<64;i++)
  { 
    for(j=0;j<16;j++)
      {
      write_com(0xb0);
      write_data(0x00);
      write_com(0xb2);
       }
  } 
}
void lcd_clear_word(void)
{ unsigned char i,j;
goto_wh();
for(i=0;i<8;i++)
  { 
    for(j=0;j<16;j++)
      {
      write_data(0x00);
      write_com(0xc0);
       }
  }
}
void lcd_clear_pic(void)
{ unsigned char i,j;
goto_ph(); 
  for(i=0;i<64;i++)
  { 
    for(j=0;j<16;j++)
      {
      write_com(0xb0);
      write_data(0x00);
      write_com(0xb2);
       }
  } 
}

/*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_ms(1);
 write_data(lcd_datah);
}*/

void disp_picture(flash char * pic_adder)
{
  unsigned char i,j;
  //goto_ph();
  for (i=0;i<64;i++)
   for (j=0;j<16;j++)
   {                 
   
     write_com(0xb0);
      write_data(*pic_adder);
      pic_adder++;
      write_com(0xb2);
   }
}
void disp_picture_disappear(flash char * pic_adder)
{
  unsigned char i=0,j=0,k=0,l=0;
  byte temp_adder;
  temp_adder=pic_adder;
  goto_ph();
   pic_adder=temp_adder;
   for (i=0;i<64;i++)
   for (j=0;j<16;j++)
   {                 
      write_com(0xb0);
      write_data(*pic_adder);
      pic_adder++;
      write_com(0xb2);
   }
      
   for (i=0;i<3;i++)
  {
    lcd_gotoxy(0,7);
     lcd_putsf("Initializing");
     for (l=0;l<=i;l++) lcd_putchar('.');
     
   for (j=0;j<16;j++)
     for (k=0;k<255;k++)
      lcd_clearpoint(rand()%128,rand()%64);
      lcd_clearpoint(rand()%128,rand()%64);
    
   }

}



void lcd_putsf(char flash * text_adder)
{
   while (*text_adder!=0){
    lcd_putchar(*text_adder);
    text_adder++;
   }
}                                      
   
    		
void lcd_putchar(byte ww)             //写字符,WW为ASCII码
{
   ww-=0x20;                         //ASCII转为内部ROM表
   write_data(ww);
   write_com(0xc0);
}

void lcd_putnum(long int n)             //写数字
{
  byte num[8];
  byte i=0;
  for (i=0;i<8;i++) {num[i]=n%10;n=n/10;}
  for (i=0;i<8;i++){ lcd_putchar(num[7-i]+0x30);}
}                                 



void lcd_gotoxy(char xx,char yy)
{
  write_data(xx+yy*16);
  write_data(0x00);
  write_com(0x24);
}

void lcd_gotoxy_pic(char xx,char yy)
{ 
   unsigned int adder; 
   byte adderh=0,adderl=0;
   adder=(pic_home_adder+(int)(yy)*16+xx);
   adderl=adder;
   adderh=adder>>8;
   write_data(adderl);
   write_data(adderh);
   write_com(0x24);
}

void lcd_set_cursor(byte xx,byte yy)
{
   write_data(xx);
   write_data(yy);
   write_com(0x21);
}

void lcd_show_cursor(void)
{
   write_com(0X9F);
}

void lcd_noshow_cursor(void)
{
   write_com(0X9D);
}    

void goto_wh(void)
{
  write_data(word_home_adder);
   write_data(0x00); 
    write_com(0x24);
}
void goto_ph(void)
{
  write_data(pic_home_adder);
   write_data(0x00); 
    write_com(0x24);
}
void lcd_putpoint(byte xx,byte yy)
{
   unsigned int adder; 
   byte adderh=0,adderl=0;
   adder=(pic_home_adder+(int)(yy)*16+(int)(xx)/8);
   adderl=adder;
   adderh=adder>>8;
   write_data(adderl);
   write_data(adderh);
   write_com(0x24);
   write_com(0xff-(xx%8));
} 
void lcd_clearpoint(byte xx,byte yy)
{
   unsigned int adder; 
   byte adderh=0,adderl=0;
   adder=(pic_home_adder+(int)(yy)*16+(int)(xx)/8);
   adderl=adder;
   adderh=adder>>8;
   write_data(adderl);
   write_data(adderh);
   write_com(0x24);
   write_com(0xf7-(xx%8));
}
void select_menu(byte x_begin,byte y_begin,byte xx,byte yy)
{ 
  byte i,j;
  for(i=0;i<yy;i++)
  {
   lcd_gotoxy_pic(x_begin,y_begin+i);
    write_com(0x24); 
    for(j=0;j<xx;j++)
      {
      write_com(0xb0);
      write_data(0xff);
      write_com(0xb2);
       }
  } 
}
void no_select_menu(byte x_begin,byte y_begin,byte xx,byte yy)
{ 
  byte i,j;
  for(i=0;i<yy;i++)
  {
    lcd_gotoxy_pic(x_begin,y_begin+i);
    for(j=0;j<xx;j++)
      {
      write_com(0xb0);
      write_data(0x00);
      write_com(0xb2);
       }
  } 
}

void lcd_character(flash byte *c,byte x,byte y)
{
  unsigned char i,j;
  for (i=0;i<16;i++)
  {
   lcd_gotoxy_pic(x*2,y+i);
   for (j=0;j<2;j++)
   {                 
      write_com(0xb0);
      write_data(*c);
      c++;
      write_com(0xb2);
   }
   }
  }

⌨️ 快捷键说明

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