lcd12864显示图片程序

#include //51 单片机常用寄存器定义
#include //解析XBYTE 宏定义
#define DISPON 0x3f //显示开
#define DISPOFF 0x3e //显示关,参考指令表"显示开关设置
#define FIRSTROW 0xc0 //显示关,参考指令表"显示开关设置
#define SETY 0xb8 //Y 方向,8 页64 行,参考指令表,[2..0]在0 到8 页选择
#define SETX 0x40 //Y 方向,8 页64 行,参考指令表,[2..0]在0 到8 页选择
/*与硬件相关的编址设计*/
/*左屏命令和数据读写编址*/
/*P2+P0口16位有效编址,有效位是P2.3~P2.0,无关位用“1”表示*/
/*P2.0—RS*/
/*P2.1—R/W*/
/*P2.2—CS1*/
/*P2.3—CS2*/
#define LLCD_CMD_WR XBYTE[0xf4f0]
#define LLCD_DAT_WR XBYTE[0xf5f0]
#define LLCD_CMD_RD XBYTE[0xf6f0]
#define LLCD_DAT_RD XBYTE[0xf7f0]
/*左屏命令和数据读写编址*/
#define RLCD_CMD_WR XBYTE[0xf8f0]
#define RLCD_DAT_WR XBYTE[0xf9f0]
#define RLCD_CMD_RD XBYTE[0xfaf0]
#define RLCD_DAT_RD XBYTE[0xfbf0]
sbit K1 = P1^0;
sbit K2 = P1^1;
/*延时子程序*/
void delay(unsigned char timer)
{
unsigned char i;
while(--timer)
for(i=0;i<100;i++);}
code unsigned char logo[]={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x8F,
0xCF,0xE7,0xF3,0xF3,0xF9,0xF9,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0xF9,0xF9,0xF3,0xF3,0xE7,0xCF,0xCF,0x9F,
0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x87,0xE3,0xF8,0xFC,0xFE,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFC,0xF8,0xF3,0xC7,0x1F,0x7F,0xFF,0xFF,0xFF,0

xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x7F,0x3F,0x3F,0x3F,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0xBC,0xFC,0xFC,0xFC,
0x7E,0x3F,0x0F,0x87,0xE1,0xE0,0xC3,0x0F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xCF,0xC3,0xC0,0xC8,0xCE,0xCF,0xCF,0xCF,0xCF,0xCF,0xCF,0xCF,0xCF,0xC7,0xE1,
0xF0,0xFC,0xFF,0xFF,0xFF,0xF9,0xF9,0xF9,0xF8,0xF8,0xE1,0xC3,0xCF,0xDF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF0,0xE3,0x8F,0x3F,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x7F,0x3F,0x8F,0xC3,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xF9,0xF3,
0xE7,0xCF,0xCF,0x9F,0x9F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x9F,0x9F,0xCF,0xCF,0xE7,0xF3,0xF9,
0xF8,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x

FF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,
0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

};
void check_busy(unsigned char);
void lcd_init(void);
void lcd_cmd_wr(unsigned char, unsigned char);
void lcd_data_wr(unsigned char, unsigned char);
void lcd_bmp_wr(unsigned char *bmp);
void lcd_clr(void);
void lcd_mov_up();
void lcd_mov_down();
void main(void)
{
delay(5000);
lcd_init();
lcd_bmp_wr(logo);
while(1)
{ if(K1==0)
{delay(50000);
lcd_mov_up();
lcd_clr();
delay(1000);
lcd_bmp_wr(logo);
}
else{if(K2==0)
{
delay(5000);
lcd_mov_down();
lcd_clr();
delay(1000);
lcd_bmp_wr(logo);
}
}
}
}
/*忙检测*/
void check_busy(unsigned char right)
{
unsigned char temp=0xff;
do{if(right) temp=RLCD_CMD_RD;
else temp=LLCD_CMD_RD;
}
while((temp|0x7f)==0xff);} // 检测D7 是否为1,1 表示LCD 忙,如果忙,继续检测,直到空闲止
/*函数 lcd_data_wr 将数据写入 LCM 模块*/
void lcd_cmd_wr(unsigned char cmdcode, unsigned char right)
{check_busy(right);
if(right) RLCD_CMD_WR = cmdcode;
else LLCD_CMD_WR = cmdcode;}
void lcd_init(void)
{lcd_cmd_wr(DISPON,0);//开显示,0 参数表示左屏
lcd_cmd_wr(FIRSTROW,0); //设定显示首列
lcd_cmd_wr(SETY,0); //设定Y 坐标
lcd_cmd_wr(SETX,0); //设定X 坐标
lcd_cmd_wr(DISPON,1);//1 参数表示右屏
lcd_cmd_wr(FIRSTROW,1);
lcd_cmd_wr(SETY,1);
lcd_cmd_wr(SETX,1);}
/*函数 lcd_data_wr 将数据写入 LCM 模块*/
void lcd_data_wr(unsigned char dispdata, unsigned char right)
{
check_busy(right);
if(right) RLCD_DAT_WR = dispdata;
else LLCD_DAT_WR = dispdata;}
void lcd_clr(void)
{unsigned char i,j;
for(i=0;i<8;i++)
{
lcd_cmd_wr(SETY+i,0);//页地址设定
lcd_cmd_wr(SETX,0);
lcd_cmd_wr(SETY+i,1);
lcd_cmd_wr(SETX,1);
for(j=0;j<64;j++)
{lcd_data_wr(0,0);
lcd_data_wr(0,1);}
}
}
/*写一帧128×64 点的图片显示*/
void lcd_bmp_wr(unsigned char *bmp)
{unsigned char i,j;
for(i=0;i<8;i++)
{lcd_cmd_wr(SETY+i,0); //页地址设定
lcd_cmd_wr(SETX,0);
lcd_cmd_wr(SETY+i,1);
lcd_cmd_wr(SETX,1);
for(j=0;j<64;j++)
{lcd_data_wr(bmp[128*i+j],0); //左半屏
lcd_data_wr(bmp[128*i+j+64],1);//右半屏
}
}
}
/*整屏向上循环移动*/
void lcd_mov_up()
{unsigned char i;
for(i=0;i<64;i++) //64行循环
{lcd_cmd_wr(FIRSTROW+i,0);
lcd_cmd_wr(FIRSTROW+i,1);
delay(50);//适当延时
}
}
/*整屏向下循环移动*/
void lcd_mov_down()
{unsigned char i;
for(i=64;i>0;i--)
{lcd_cmd_wr(FIRSTROW+i,0);
lcd_cmd_wr(FIRSTROW+i,1);
delay(50);}

相关文档
最新文档