//实验目的:熟悉12864LCD的使用
//12864LCD带中文字库
//编程让12864LCD显示公司LOGO和公司名字
//硬件设置:
//关断所有拨码开关。
#include<pic.h>
__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
#define rs RA5 //命令/数据选择
#define rw RA4 //读/写选择
#define e RA3 //使能
#define psb RA2 //8位/4位并口选择
#define rst RA0 //复位
#define nop() asm("nop")
const unsigned char TAB1[ ]={ //定义显示图片的数据表
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X00,0X81,0X00,0X10,0X40,0X00,0X02,0X41,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X00,0X81,0X00,0X10,0X40,0X00,0X02,0X41,
0XFF,0XFF,0XC0,0X00,0X00,0X7F,0XFF,0XFF, 0X07,0XE2,0X00,0XFE,0XC0,0X00,0X06,0X01,
0XFF,0XFF,0X00,0X00,0X00,0X1F,0XFF,0XFF, 0X01,0X87,0XE0,0X00,0X80,0X03,0XFF,0XF1,
0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF, 0X01,0X04,0X00,0X44,0XFC,0X02,0X04,0X01,
0XFF,0XF0,0X00,0X00,0X00,0X07,0XFF,0XFF, 0X01,0X08,0X00,0X48,0X04,0X02,0X04,0X41,
0XFF,0XF0,0X00,0X00,0X00,0X03,0XFF,0XFF, 0X0F,0XD8,0X00,0X08,0X04,0X03,0XF6,0X81,
0XFF,0XF0,0X00,0X00,0X00,0X01,0XFF,0XFF, 0X08,0X40,0X01,0XFE,0XFC,0X06,0X27,0X01,
0XFF,0XF0,0X00,0X00,0X00,0X01,0XFF,0XFF, 0X0F,0XCF,0X80,0X01,0X00,0X04,0X23,0X01,
0XFF,0XF0,0X3F,0XF0,0X3F,0XC1,0XFF,0XFF, 0X08,0XC1,0X00,0X01,0X00,0X04,0XE7,0X21,
0XFF,0XF0,0X7F,0XE0,0X7F,0XC1,0XFF,0XFF, 0X10,0X82,0X01,0XF9,0XF8,0X08,0X99,0XA1,
0XFF,0XF0,0X7F,0XE0,0X7F,0XC1,0XFF,0XFF, 0X1F,0X86,0X01,0X09,0X00,0X08,0X10,0XE1,
0XFF,0XF0,0XFF,0XC0,0XFF,0XC1,0XFF,0XFF, 0X06,0X04,0X01,0X09,0XF0,0X00,0X00,0X01,
0XFF,0XF0,0XFF,0XC1,0XFF,0XC1,0XFF,0XFF, 0X04,0X08,0X01,0XFA,0X00,0X07,0XFF,0X01,
0XFF,0XF0,0XFF,0X83,0XFF,0XC1,0XFF,0XFF, 0X7F,0XD0,0X03,0X12,0X00,0X06,0X89,0X01,
0XFF,0XF0,0XFF,0X03,0XFF,0XC1,0XFF,0XFF, 0X04,0X10,0X83,0X13,0XF0,0X08,0X91,0X01,
0XFF,0XF0,0XFE,0X07,0XFF,0XC1,0XFF,0XFF, 0X04,0X10,0X83,0XF2,0X00,0X08,0X91,0X01,
0XFF,0XF0,0XFC,0X0F,0XFF,0XC1,0XFF,0XFF, 0X04,0X3F,0X02,0X12,0X08,0X1B,0X93,0X01,
0XFF,0XF0,0XFC,0X0F,0XFF,0XC1,0XFF,0XFF, 0X08,0X00,0X02,0X23,0XF0,0X3F,0XFF,0XC1,
0XFF,0XF0,0XF8,0X1F,0XFF,0XC1,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XF0,0XF0,0X3F,0XFF,0XC1,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XF0,0XF0,0X7F,0XFF,0XC1,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XF0,0XE0,0X00,0X1F,0XC1,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XF0,0XE0,0X00,0X0F,0XC1,0XFF,0XFF, 0X00,0X3F,0X80,0X1F,0X00,0X00,0XFF,0X01,
0XFF,0XF0,0XF0,0X00,0X07,0XC1,0XFF,0XFF, 0X00,0XFF,0XE0,0X1F,0X00,0X03,0XFF,0XC1,
0XFF,0XF0,0XF8,0X00,0X07,0XC1,0XFF,0XFF, 0X01,0XFF,0XF0,0X1F,0X00,0X07,0XFF,0XE1,
0XFF,0XF0,0XFC,0X00,0X03,0XC1,0XFF,0XFF, 0X03,0XFF,0XF8,0X1F,0X00,0X07,0XC7,0XE1,
0XFF,0XF0,0XFF,0XFF,0X83,0XC1,0XFF,0XFF, 0X07,0XE0,0XFC,0X1F,0X00,0X07,0XC3,0XE1,
0XFF,0XF0,0XFF,0XFF,0XC1,0XC1,0XFF,0XFF, 0X07,0XC0,0XFC,0X1F,0X00,0X07,0XC0,0X01,
0XFF,0XF0,0XFF,0XFF,0XC1,0XC1,0XFF,0XFF, 0X0F,0XC0,0X7E,0X1F,0X00,0X07,0XFC,0X01,
0XFF,0XF0,0XFF,0XFF,0X83,0XC1,0XFF,0XFF, 0X0F,0XC0,0X7E,0X1F,0X00,0X07,0XFF,0X81,
0XFF,0XF0,0XFF,0XFF,0X03,0XC1,0XFF,0XFF, 0X0F,0XC0,0X7E,0X1F,0X00,0X03,0XFF,0XC1,
0XFF,0XF0,0XFF,0XFE,0X07,0XC1,0XFF,0XFF, 0X0F,0XC0,0X7E,0X1F,0X00,0X00,0XFF,0XE1,
0XFF,0XF0,0XFF,0XFC,0X0F,0XC1,0XFF,0XFF, 0X0F,0XC0,0X7E,0X1F,0X00,0X00,0X1F,0XF1,
0XFF,0XF0,0XFF,0XFC,0X1F,0XC1,0XFF,0XFF, 0X0F,0XC6,0X7E,0X1F,0X00,0X00,0X03,0XF1,
0XFF,0XF0,0XFF,0XF8,0X3F,0XC1,0XFF,0XFF, 0X07,0XC7,0XFC,0X1F,0X00,0X0F,0X81,0XF1,
0XFF,0XF0,0XFF,0XF0,0X7F,0XC1,0XFF,0XFF, 0X07,0XE3,0XFC,0X1F,0X00,0X0F,0XC1,0XF1,
0XFF,0XF0,0X7F,0XE0,0X7F,0XC1,0XFF,0XFF, 0X03,0XFF,0XF8,0X1F,0XFF,0X87,0XE3,0XE1,
0XFF,0XF8,0X7F,0XC0,0XFF,0XC3,0XFF,0XFF, 0X03,0XFF,0XF8,0X1F,0XFF,0X87,0XFF,0XE1,
0XFF,0XF8,0X7F,0XC1,0XFF,0X83,0XFF,0XFF, 0X01,0XFF,0XFC,0X1F,0XFF,0X83,0XFF,0XC1,
0XFF,0XFC,0X3F,0X83,0XFF,0X07,0XFF,0XFF, 0X00,0X7F,0XFF,0X1F,0XFF,0X80,0XFF,0X01,
0XFF,0XFE,0X1F,0X07,0XFE,0X0F,0XFF,0XFF, 0X00,0X00,0X1F,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0X00,0X00,0X00,0X1F,0XFF,0XFF, 0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0XF0,0X01,0XFF,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0XC0,0X00,0X3F,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0X80,0X00,0X1F,0XFF,0XFF,0XCF, 0X3E,0X83,0XE7,0X3E,0X78,0X21,0X14,0XE1,
0XFF,0XFE,0X00,0X00,0X07,0XFF,0XFC,0X3F, 0X20,0X82,0X09,0X88,0X44,0X51,0X15,0X31,
0XFF,0XFC,0X7C,0X00,0X00,0XFF,0XC0,0X7F, 0X20,0X82,0X08,0X88,0X44,0X51,0X95,0X11,
0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X01,0XFF, 0X20,0X82,0X08,0X08,0X44,0X89,0X95,0X01,
0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X03,0XFF, 0X20,0X82,0X08,0X08,0X44,0X89,0X55,0X01,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X07,0XFF, 0X3E,0X83,0XE8,0X08,0X44,0X89,0X55,0X01,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X1F,0XFF, 0X20,0X82,0X08,0X08,0X78,0X89,0X55,0X01,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0XFF, 0X20,0X82,0X08,0X08,0X48,0X89,0X55,0X01,
0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0XFF,0XFF, 0X20,0X82,0X08,0X08,0X48,0X89,0X35,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X20,0X82,0X08,0X88,0X44,0X51,0X35,0X11,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X20,0X82,0X09,0X88,0X44,0X51,0X15,0X31,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X3E,0XF3,0XE7,0X08,0X44,0X21,0X14,0XE1,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,
};
unsigned int lcd_x; //X地址
unsigned int lcd_y; //Y地址
bit busy; //忙标志位
void init(); //系统初始函数
void lcd_init(); //LCD初始函数
void clear_p(); //清屏函数
void han_wr2a(); //写函数
void wr_zb(); //写准备函数
void qushu(); //查表函数
void send_d(unsigned char x); //写一字节数据函数
void send_i(unsigned char x); //写一字节命令函数
void chk_busy(); //查LCD忙函数
void delay();
//-------------------------------------------
void main()
{
init(); //系统初始化
lcd_init(); //LCD初始化
clear_p(); //清除显示
han_wr2a(); //写数据到LCD显示
while(1); //停机
}
//-------------------------------------------
void init()
{
TRISA=0X00; //设置A口为输出
TRISD=0X00; //设置D口为输出
ADCON1=0X06; //设置A口为普通IO口
}
//-------------------------------------------
void lcd_init()
{
rst=0; //复位LCD
delay();
rst=1; //LCD正常工作
nop();
psb=1; //8位并行通信
send_i(0x30); //基本操作指令
send_i(0x01); //关显示
send_i(0x06); //指定在写入或读取时,光标的移动方向
send_i(0x0c); //开显示,关光标,不闪烁
}
//-------------------------------------------
void han_wr2a()
{
qushu(); //查表取数送显示
}
//-------------------------------------------
void wr_zb()
{
send_i(0x34); //扩展操作指令
send_i(lcd_y); //设置Y地址
send_i(lcd_x); //设置X地址
send_i(0x30); //基本操作指令
}
//---------