#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define RS_ PORTB&=~BIT(0)
#define RS PORTB|=BIT(0)
#define RW_ PORTB&=~BIT(1)
#define RW PORTB|=BIT(1)
#define EN_ PORTB&=~BIT(2)
#define EN PORTB|=BIT(2)
#define PSB_ PORTB&=~BIT(3)
#define PSB PORTB|=BIT(3)
#define CS2_ PORTB&=~BIT(4)
#define CS2 PORTB|=BIT(4)
#define RET_ PORTB&=~BIT(5)
#define RET PORTB|=BIT(5)
#define DATA PORTA
void delay(uint z)
{
while(z--);
}
void write_dat(uchar dat)
{
EN_;//ʹÄÜ
RS;//ÏÔʾÊý¾Ý
RW_;//д
delay(3);
DATA=dat;
delay(3);
EN;
delay(3);
EN_;
delay(8);
}
void write_com(uchar com)
{
EN_;
RS_;//ÏÔʾÃüÁî
RW_;
delay(3);
DATA=com;
delay(3);
EN;
delay(3);
EN_;
delay(8);
}
void init()
{
RET;
delay(3);
RET_;
delay(9);
RET;
delay(5);
PSB;
CS2_;
write_com(0x30);
write_com(0x0c);
write_com(0x01);
write_com(0x02);
write_com(0X08);
}
void set_xy(uchar xpop,char ypop)
{
switch(ypop)
{
case 1:
write_com(0x80|xpop);break;
case 2:
write_com(0x90|xpop);break;
case 3:
write_com(0x88|xpop);break;
case 4:
write_com(0x98|xpop);break;
default :break;
}
}
void printf(uchar x,uchar y,uchar *str)
{
uchar temp;
set_xy(x,y);
temp=*str;
while(temp!=0x00)
{
write_dat(temp);
temp=*(++str);
}
}
main()
{
DDRA=0XFF;
DDRB=0XFF;
init();
printf(8,3," Ò»¸öÈ˵ÄÉúÃüÓ¦¸ÃÕâÑù¶È¹ý£ºµ±Ëû»ØÊ×ÍùÊÂʱ£¬²»ÒòÐé¶ÈÄ껪¶ø»ÚºÞ£»Ò²²»»áÒòΪµµÎÞΪ¶øÐß³Ü");
while(1)
{
}
}
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define RS_ PORTB&=~BIT(0)
#define RS PORTB|=BIT(0)
#define RW_ PORTB&=~BIT(1)
#define RW PORTB|=BIT(1)
#define EN_ PORTB&=~BIT(2)
#define EN PORTB|=BIT(2)
#define PSB_ PORTB&=~BIT(3)
#define PSB PORTB|=BIT(3)
#define CS2_ PORTB&=~BIT(4)
#define CS2 PORTB|=BIT(4)
#define RET_ PORTB&=~BIT(5)
#define RET PORTB|=BIT(5)
#define DATA PORTA
void delay(uint z)
{
while(z--);
}
void write_dat(uchar dat)
{
EN_;//ʹÄÜ
RS;//ÏÔʾÊý¾Ý
RW_;//д
delay(3);
DATA=dat;
delay(3);
EN;
delay(3);
EN_;
delay(8);
}
void write_com(uchar com)
{
EN_;
RS_;//ÏÔʾÃüÁî
RW_;
delay(3);
DATA=com;
delay(3);
EN;
delay(3);
EN_;
delay(8);
}
void init()
{
RET;
delay(3);
RET_;
delay(9);
RET;
delay(5);
PSB;
CS2_;
write_com(0x30);
write_com(0x0c);
write_com(0x01);
write_com(0x02);
write_com(0X08);
}
void set_xy(uchar xpop,char ypop)
{
switch(ypop)
{
case 1:

write_com(0x80|xpop);break;
case 2:
write_com(0x90|xpop);break;
case 3:
write_com(0x88|xpop);break;
case 4:
write_com(0x98|xpop);break;
default :break;
}
}
void printf(uchar x,uchar y,uchar *str)
{
uchar temp;
set_xy(x,y);
temp=*str;
while(temp!=0x00)
{
write_dat(temp);
temp=*(++str);
}
}
main()
{
DDRA=0XFF;
DDRB=0XFF;
init();
printf(8,3," Ò»¸öÈ˵ÄÉúÃüÓ¦¸ÃÕâÑù¶È¹ý£ºµ±Ëû»ØÊ×ÍùÊÂʱ£¬²»ÒòÐé¶ÈÄ껪¶ø»ÚºÞ£»Ò²²»»áÒòΪµµÎÞΪ¶øÐß³Ü");
while(1)
{
}
}
该博客介绍了如何使用AVR微控制器驱动12864液晶显示器。通过定义并使用一系列宏定义来控制LCD的RS、RW、EN、PSB、CS2和RET引脚,实现了数据写入和命令写入功能。博主提供了初始化函数、设置坐标函数和打印字符串函数的详细代码,展示了如何在指定位置显示文本。在主函数中,演示了在LCD上打印一句话的例子。

被折叠的 条评论
为什么被折叠?



