avr 12864驱动

该博客介绍了如何使用AVR微控制器驱动12864液晶显示器。通过定义并使用一系列宏定义来控制LCD的RS、RW、EN、PSB、CS2和RET引脚,实现了数据写入和命令写入功能。博主提供了初始化函数、设置坐标函数和打印字符串函数的详细代码,展示了如何在指定位置显示文本。在主函数中,演示了在LCD上打印一句话的例子。
#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: avr <wbr>12864驱动
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)
{

}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值