哪位大侠操作过avr 1602 发个程序吧

我的rs—PC6,RW—PC5,EN--PC7,数据口为PORTA;我的晶振是11.0592m,avr-------atmega16a... 我的rs —PC6,RW—PC5,EN--PC7,数据口为PORTA;
我的晶振是11.0592m,avr-------atmega16a
展开
 我来答
若溪唯宝Au
2013-07-25 · TA获得超过546个赞
知道小有建树答主
回答量:513
采纳率:0%
帮助的人:129万
展开全部
#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的源文件  自己调用吧  

注意延时 

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式