LCD12864.h
#define LCD12864_RS PORTA.0
#define LCD12864_RW PORTA.1
#define LCD12864_EN PORTA.2
#define LCD12864_PortOut DDRA|=0x07 //P3口的低三位設置為輸出
#define LCD12864_Data DDRB
#define LCD12864_Read PINB
#define LCD12864_Write PORTB
void lcd12864_init(void);
void lcd12864_cleardd(void);
void lcd12864_cursoron(void);
void lcd12864_cursoroff(void);
void lcd12864_gotoxy(unsigned char x,unsigned char y);
void lcd12864_putchar(unsigned char temp);
void lcd12864_puts(unsigned char *str);
void lcd12864_cleargd(void);
void lcd12864_picture(flash unsigned char *ptr);
lcd12864.c
#include "lcd12864.h"
#include
#include
static void Write_Cmd(unsigned char cmd)
{
unsignedchar temp,i;
LCD12864_RS=0;
LCD12864_RW=1;
LCD12864_Data=0x00;
do
{
LCD12864_EN=1;
for(i=0;i<24;i++);
temp=LCD12864_Read;
LCD12864_EN=0;
}
while(temp& 0x80);
LCD12864_Data=0xff;
LCD12864_RW=0;
LCD12864_Write = cmd;
LCD12864_EN=1;
for(i=0;i<24;i++);//延時
LCD12864_EN=0;
}
static void Write_Data(unsigned chardat)
{
unsignedchar temp,i;
LCD12864_RS=0;
LCD12864_RW=1;
LCD12864_Data=0x00;
do
{
LCD12864_EN=1;
for(i=0;i<24;i++);//延時
temp=LCD12864_Read;
LCD12864_EN=0;
}
while(temp& 0x80);
LCD12864_Data=0xff;
LCD12864_RS=1;
LCD12864_RW=0;
LCD12864_Write = dat;
LCD12864_EN=1;
for(i=0;i<24;i++);//延時
LCD12864_EN=0;
}
void lcd12864_init(void)
{
LCD12864_PortOut; //液晶控制端口設置為輸出
Write_Cmd(0x30); //基本指令集
delay_ms(1);
Write_Cmd(0x02); // 地址歸位
delay_ms(1);
Write_Cmd(0x0c); //整體顯示打開,游標關閉
delay_ms(1);
Write_Cmd(0x01); //清除顯示
delay_ms(1);
Write_Cmd(0x06); //游標右移
delay_ms(1);
Write_Cmd(0x80); //設定顯示的起始地址
delay_ms(1);
}
void lcd12864_cleardd(void)
{
Write_Cmd(0x01);
delay_ms(5);
lcd12864_gotoxy(0,0);
}
void lcd12864_cursoron(void)
{
Write_Cmd(0x0f); //整體顯示開,游標開,游標位置開
}
void lcd12864_cursoroff(void)
{
Write_Cmd(0x0c); //整體顯示開,游標關,游標位置關
}
void lcd12864_gotoxy(unsigned char x,unsigned char y)
{
switch(y)
{
case0:Write_Cmd(0x080+x);break;
case1:Write_Cmd(0x090+x);break;
case2:Write_Cmd(0x088+x);break;
case3:Write_Cmd(0x098+x);break;
default:break;
}
}
void lcd12864_putchar(unsigned char temp)
{
Write_Data(temp);
}
void lcd12864_puts(unsigned char *str)
{
for(;*str !='\0';lcd12864_putchar(*(str++)));
}
void lcd12864_cleargd(void)
{
unsignedchar i,j,k;
Write_Cmd(0x34); //打開擴展指令集
i =0x80;
for(j = 0;j< 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x80);
for(k = 0;k < 16;k++)
{
Write_Data(0x00);
}
}
i =0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x88);
for(k = 0;k < 16;k++)
{
Write_Data(0x00);
}
}
Write_Cmd(0x30); //回到基本指令集
}
void lcd12864_picture(flash unsigned char *ptr)
{
unsigned char i,j,k;
Write_Cmd(0x34); //打開擴展指令集
i =0x80;
for(j = 0;j< 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x80);
for(k = 0;k < 16;k++)
{
Write_Data(*ptr++);
}
}
i =0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x88);
for(k = 0;k < 16;k++)
{
Write_Data(*ptr++);
}
}
Write_Cmd(0x36); //打開繪圖顯示
Write_Cmd(0x30); //回到基本指令集
}
|