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

📄 avr_test_1602_lm016l.c

📁 ACRiccATMEGA16+LCD1602动态字符显示
💻 C
字号:
#include<avr/io.h>
#include<util/delay.h>
#define control_port PORTC
#define control_direct DDRC
#define data_port PORTD
#define data_direct DDRD
#define RS PC0   //1 instruction  0 data
#define RW PC1   //1 read   0 write
#define EN PC2   //1 enable

unsigned char string_1[]="www.ouravr.com  <<EN; the people's republic of china  thomas_top  contrtl_port PORTC\
avrobjcopy j .eeprom setsectionflags.eeprom=alloc,load change section lma .eeprom=0 O ihex avr_test_1602.elf avr_test_1602.eep\
asd ";
unsigned char position;
unsigned char string_2[]="#include<avr/io.h>\
#include<util/delay.h>\
#define control_port PORTC\
#define control_direct DDRC\
#define data_port PORTD\
#define data_direct DDRD\
#define RS PC0   //1 instruction  0 data\
#define RW PC1   //1 read   0 write\
#define EN PC2   //1 enable ";

void write_command_en(void)
{
  data_direct=0xff;
  control_direct=0x0f;
  control_port|=(1<<RS);
  control_port&=~(1<<RW);
  _delay_us(1);
  control_port|=1<<EN;
}

void write_data_en(void)
{
  data_direct=0xff;
  control_direct=0x0f;
  control_port&=~(1<<RS);
  control_port&=~(1<<RW);
  _delay_us(1);
  control_port|=1<<EN;
}


void write_command(unsigned char command)
{
  control_port&=~(1<<RS);
  control_port&=~(1<<RW);
  control_port&=~(1<<EN);
  _delay_us(1);
  control_port|=1<<EN;
  data_port=command;
  control_port&=~(1<<EN);
}


void write_data(unsigned char data)
{
  control_port|=(1<<RS);
  control_port&=~(1<<RW);
  control_port&=~(1<<EN);
  _delay_us(1);
  control_port|=(1<<EN);
  data_port=data;
  control_port&=~(1<<EN);

}

void disp_char(unsigned char data,unsigned char position)
{ 
  write_command(position);
  write_data(data);
	  
}


/*
void disp_string(unsigned char *p,unsigned char line)
{ unsigned char i,position;
 if(line==1)
  {
    position=0x80;
  }
 else
    {
	position=0xc0; 
	}
  for(i=0;(*p);i++)
  {
    disp_char(*p,position);
	p++;
	position++;
	if(i>16)
	break;
  }
}

*/
void disp_string(unsigned char *p,unsigned char line)
{ unsigned char i,position;
 if(line==1)
  {
    position=0x80;
  }
 else
    {
	position=0xc0; 
	
	}
  for(i=0;(*p!='\0');i++)
  {
    disp_char(*p,position);
	p++;
	position++;
	if(i>16)
	break;
	
  }
}

void disp_string_1(unsigned char *p,unsigned char line)
{ unsigned char i,position;
 if(line==1)
  {
    position=0x8f;
  }
 else
    {
	position=0xcf; 
	
	}
  for(i=0;(*p!='\0');i++)
  {
    disp_char(*p,position);
	p++;
	position--;
	if(i>16)
	break;
  }
}







void lcd_init(void)
{
  _delay_ms(15);
  write_command(0x38);
  _delay_ms(5);
  write_command(0x38);
  _delay_ms(5);
  write_command(0x38);
  write_command(0x06);
  write_command(0x0c);
  write_command(0x01);

}


int main(void)
{  unsigned char *ptr,*ptr1;
  DDRC=0XFF;
  DDRD=0XFF;
  lcd_init();
  disp_string(string_1,1);
  disp_string(string_2,2);
  ptr1=string_1;
  ptr=string_2; 
  for(;;)
  { ptr1++;
    ptr++;
	_delay_us(50);
	disp_string(ptr,2);
	disp_string_1(ptr1,1);
	if((*ptr1)=='\0')
	{
	  ptr1=string_1;
	}
	if((*ptr)=='\0')
	{
	ptr=string_2;
	}
  }
    
}

⌨️ 快捷键说明

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