哪位大侠操作过avr 1602 发个程序吧
我的rs—PC6,RW—PC5,EN--PC7,数据口为PORTA;我的晶振是11.0592m,avr-------atmega16a...
我的rs —PC6,RW—PC5,EN--PC7,数据口为PORTA;
我的晶振是11.0592m,avr-------atmega16a 展开
我的晶振是11.0592m,avr-------atmega16a 展开
1个回答
展开全部
#define RS PD4
#define RW PD5
#define RD PD6//使能
#define RS_1() PORTD|=(1<<RS)//控制读写命令寄存器还是数据寄存器
#define RS_0() PORTD&=~(1<<RS)
#define RW_1() PORTD|=(1<<RW)//读或者写
#define RW_0() PORTD&=~(1<<RW)
#define RD_1() PORTD|=(1<<RD)//
#define RD_0() PORTD&=~(1<<RD)
void LCD_BUSY_WAIT(void)
{
RS_0();RW_1();//读状态寄存器
DDRB=0x00;
RD_1();delay_xus( 10);
while((PINB&0x80)!=0);
RD_0();
DDRB=0xff;
}
void Write_LCD_Command(uint8 cmd)
{
LCD_BUSY_WAIT();
RS_0();RW_0();
PORTB=cmd;
RD_1();
delay_xms(1);
RD_0();
}
void Write_LCD_Data(uint8 dat)
{
LCD_BUSY_WAIT();
RS_1();RW_0();
PORTB=dat;
RD_1();
delay_xms(1);
RD_0();
}
void Initialize_LCD(void)
{
Write_LCD_Command(0x38);delay_xms(15);
Write_LCD_Command(0x01);delay_xms(15);
Write_LCD_Command(0x06);delay_xms(15);
Write_LCD_Command(0x0c);delay_xms(15);
}
void LCD_ShowString(uint8 x, uint8 y, char *str)
{
uint8 i=0;
if(y==0) Write_LCD_Command(0x80|x);
else Write_LCD_Command(0xc0|x);
for(i=0;str[i]!='\0';i++)
Write_LCD_Data(str[i]);
}
我自己写的 1602的源文件 自己调用吧
注意延时
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询