【LCD12864.c】
#include <iom16v.h>
#include <macros.h>
#include "LCD12864.h"
void LCD12864_Initial(void)
{
LCD12864_WriteCmd(0x06); //光标设置,读或写一个字符后,地址指针加一,光标加一,整屏不移动
LCD12864_WriteCmd(0x0c); //显示开关控制,开显示,光标不显示,光标不闪烁
LCD12864_Clear();
}
void LCD12864_Clear(void)
{
LCD12864_WriteCmd(0x30);
LCD12864_WriteCmd(0x01);
}
void LCD12864_ChkBusy(void)
{
LCD12864_DATD=~BIT(7); //检测忙信号时,PX7变成了输入口
LCD12864_DAT=0xf2;
LCD12864_RS0;
LCD12864_RW1;
LCD12864_E1;
while (LCD12864_BSY); //注意:如果不改变DDRX,程序将卡死在这里!
LCD12864_E0;
LCD12864_DATD=0xff; //恢复PX7为输出口
}
void LCD12864_WriteCmd(unsigned char Data)
{
LCD12864_ChkBusy();
LCD12864_RS0;
LCD12864_RW0;
LCD12864_DAT=Data;
LCD12864_E1;
LCD12864_E0;
}
void LCD12864_WriteData(unsigned char Data)
{
LCD12864_ChkBusy();
LCD12864_RS1;
LCD12864_RW0;
LCD12864_DAT=Data;
LCD12864_E1;
LCD12864_E0;
}
void LCD12864_Goto(unsigned char x, unsigned char y)
{
switch (y)
{
case 1:
LCD12864_WriteCmd(0x90+x);
break;
case 2:
LCD12864_WriteCmd(0x88+x);
break;
case 3:
LCD12864_WriteCmd(0x98+x);
break;
default:
LCD12864_WriteCmd(0x80+x);
break;
}
}
void LCD12864_PrintString(char* pStr)
{
while (*pStr!='\0')
{
LCD12864_WriteData(*pStr);
pStr++;
}
}
/*void LCD12864_PrintNumber(unsigned char num)
{
LCD12864_WriteData('0'+num);
}*/