#include<iom8v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define RSH PORTD|=(1<<PD0)
#define RSL PORTD&=~(1<<PD0)
#define RWH PORTD|=(1<<PD1)
#define RWL PORTD&=~(1<<PD1)
#define INITLCD() {DDRD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4);}
#define EH PORTD|=(1<<PD2)
#define EL PORTD&=~(1<<PD2)
#define PSB_H PORTD|=(1<<PD3)
#define PSB_L PORTD&=~(1<<PD3)
#define RST_H PORTD|=(1<<PD4)
#define RST_L PORTD&=~(1<<PD4)
void delay(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}
void Wcmd(uchar c,uchar z) //指令发送函数
{
uchar s,d;
RSH; //使能为1
EL; //同步信号
if(z==1)
d=0xf8;
else
d=0xfa;
/*指定命令指令读指令时序图规定5个1开头引导码*/
for(s=8;s>0;s--) //发送8次 把8个数据全部发出
{
if(d&0x80)
{RWH;}
else
{RWL;}
EH;
EL;
d=d<<1;
}
d=c&0xf0; /*高4为数据发送8位数据时分高低4位串口协议高4位有效低4位全0为验证*/
for(s=8;s>0;s--)
{
if(d&0x80)
{RWH;}
else
{RWL;}
EH; /*使能端同步信号根据串口协议在数据送上前E=0,送数据后E=1为有效后再拉低*/
EL;
d=d<<1; //下一次就是次高位数据
}
d=c<<4; /*低4为数据发送8位数据时分高低4位串口协议高4位有效低4位全0为验证*/
for(s=8;s>0;s--)
{
if(d&0x80)
{RWH;}
else
{RWL;}
EH; /*使能端同步信号根据串口协议在数据送上前E=0,送数据后E=1为有效后再拉低*/
EL;
d=d<<1;
}
RSL;
}
void init(void) //初始化函数
{
INITLCD();
Wcmd(0x30,1); /*选择基本指令集*/
delay(1);
Wcmd(0x20,1); /*DDRAM的 AC清0*/
delay(1);
Wcmd(0x0e,1); /*整体显示 游标开*/
delay(1);
Wcmd(0x01,1); /*整体显示 游标开*/
delay(1);
}
void main(void)
{
PSB_L;
RST_H;
init();
Wcmd(0x81,1);
Wcmd('9',0);
while(1);
}