📄 avr_test_1602_lm016l.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 + -