用育松12864显示图片
单片机源程序如下:
- #include <AT89X52.h> //调用51单片机的头文件
- #include <Intrins.h> //因为本例中用到空操作_nop_();所以必须调用这个头文件
- //12864液晶相关I/O设置
- sbit RS=P3^5; //并行数据/控制字选择 H:数据 L:控制字
- sbit RW=P3^6; //并行读/写选择 H:读 L:写
- sbit E =P3^4; //并行读写使能 H有效,下降沿锁定数据
- sbit PSB=P3^7; //串口,并口选择 H:并口 L:串口(开发板上引脚标识为CS1)
- sbit RST=P2^1; //复位引脚 L:液晶复位
- sbit DB0=P0^7; //
- sbit DB1=P0^6; //
- sbit DB2=P0^5; //
- sbit DB3=P0^4; //
- sbit DB4=P0^3; //
- sbit DB5=P0^2; //
- sbit DB6=P0^1; //
- sbit DB7=P0^0; //
- unsigned char code picture[]={
- /*-- 调入了一幅图像:F:\kaifaban\GL8\05.bmp --*/
- /*-- 宽度x高度=128x64 --*/
- 0x00,0x02,0x80,0x2A,0x91,0x15,0x5E,0x1F,0xFF,0xCB,0x50,0x01,0x7E,0xA1,0x00,0x00,
- 0x00,0x04,0x94,0x50,0xC0,0x06,0xB7,0xBF,0xFE,0x74,0xA0,0x00,0xF5,0xD0,0x80,0x00,
- 0x20,0x00,0x28,0x57,0x00,0x0A,0xDF,0xFF,0xFF,0x8A,0x80,0x00,0x73,0xD2,0x00,0x00,
- 0x00,0x00,0x80,0x02,0xF0,0x1A,0xBB,0xFF,0xFA,0x51,0x00,0x00,0x9D,0xF4,0x00,0x04,
- 0x00,0x00,0x00,0x03,0xD0,0x15,0x77,0xFF,0xE7,0xAA,0x00,0x00,0x7F,0xB8,0x00,0x00,
- 0x00,0x00,0x00,0x02,0xE8,0xAA,0xEF,0xFF,0xFF,0xD4,0x00,0x00,0x1F,0xEC,0x00,0x00,
- 0x41,0x00,0x00,0x03,0xD0,0x55,0xFF,0xFF,0xFE,0xE0,0x00,0x00,0x2F,0xEC,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xA8,0x0B,0xBF,0xFF,0xFF,0x10,0x00,0x00,0x2F,0xFE,0x00,0x00,
- 0x42,0xA8,0x00,0x0F,0x50,0x2F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x17,0xF4,0x00,0x00,
- 0x02,0x04,0x00,0x01,0xBC,0x16,0xFF,0xFF,0xFF,0xA8,0x00,0x00,0x17,0xFE,0x00,0x00,
- 0x00,0x00,0x00,0x46,0x45,0x2D,0xF8,0x7F,0xFD,0x57,0x00,0x00,0x0F,0xFE,0x00,0x00,
- 0x00,0x52,0x00,0x02,0x22,0x1F,0xF9,0x1F,0xF5,0x00,0x40,0x00,0x0B,0xFF,0x01,0x00,
- 0x00,0x24,0x01,0x0C,0x22,0x77,0xFA,0xBF,0x54,0x00,0xA0,0x00,0x07,0xFE,0x00,0x0C,
- 0x80,0x14,0x00,0x1E,0x04,0x3F,0xFD,0x1D,0xF0,0x00,0x28,0x00,0x0B,0xFF,0x00,0x04,
- 0x00,0x51,0x40,0x19,0x11,0xDF,0xF4,0x7E,0x80,0x00,0x50,0x00,0x17,0xFF,0x00,0x00,
- 0x48,0x58,0xAA,0xBA,0x98,0x3F,0xF8,0x3A,0x00,0x00,0x20,0x00,0x03,0xFF,0x00,0x00,
- 0x20,0xA0,0xAA,0xEA,0xA0,0x0F,0xFF,0xF4,0x01,0x00,0x00,0x00,0x13,0xFF,0x00,0x20,
- 0x20,0x20,0x21,0x2E,0x60,0x07,0xFF,0xE8,0x02,0xFD,0x00,0x00,0x05,0xFF,0x80,0x00,
- 0x00,0x00,0xA3,0xCB,0x80,0x07,0xFF,0xD0,0x05,0xD7,0x00,0x00,0x13,0xFF,0x04,0x00,
- 0x10,0x00,0x2A,0xFB,0x40,0x07,0xBF,0xE0,0x01,0xA3,0xC0,0x00,0x01,0xFF,0xA0,0x00,
- 0x40,0x01,0x2A,0xD4,0x11,0x15,0xFF,0x80,0x00,0x57,0x80,0x00,0x4B,0xFF,0x00,0x00,
- 0x88,0x02,0x15,0xDA,0x42,0x8B,0xBD,0xC0,0x00,0x07,0xC0,0x00,0xA8,0xFF,0x90,0x00,
- 0x00,0x01,0x2B,0x35,0x21,0x0B,0xBF,0x00,0x00,0x02,0x88,0x01,0x59,0xFF,0x00,0x00,
- 0x00,0x01,0x55,0x1A,0xC4,0x15,0x7F,0x80,0x00,0x10,0x80,0x04,0xAE,0xFF,0x80,0x00,
- 0x80,0x05,0x4A,0x15,0x24,0x0E,0xFE,0x00,0x00,0x05,0x00,0x09,0x0A,0xFF,0x18,0x01,
- 0x08,0x02,0xD3,0x54,0x20,0x0D,0x7F,0x00,0x00,0x00,0x00,0x00,0x42,0xFF,0xA0,0x00,
- 0x10,0x1D,0x48,0x30,0x88,0x36,0xFD,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x22,0xE0,
- 0x00,0x15,0x54,0x52,0x0B,0xDE,0xFE,0x00,0x00,0x00,0x00,0x00,0x09,0xFF,0xAE,0xB8,
- 0x00,0x2A,0x52,0x80,0x07,0xDD,0xBA,0x00,0x00,0x00,0x00,0x15,0xA5,0xFF,0x54,0x94,
- 0x40,0x2A,0xA9,0x50,0x0D,0xED,0xFC,0x00,0x00,0x00,0x00,0x09,0xF5,0xFF,0xAB,0x50,
- 0x02,0xA1,0x66,0x80,0x0B,0xFD,0x70,0x00,0x00,0x00,0x00,0x03,0xF5,0xFF,0xA5,0x50,
- 0x02,0x00,0x02,0xA0,0x03,0xFD,0xF8,0x00,0x00,0x00,0x00,0x08,0xFB,0xFF,0x42,0xA8,
- 0x02,0x80,0xDD,0x40,0x0D,0xFB,0xE0,0x00,0x00,0x00,0x00,0x00,0xF3,0xFF,0x22,0xB0,
- 0x02,0x40,0x25,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x02,0x37,0xFF,0xA8,0xC0,
- 0x01,0x00,0x00,0x80,0x1B,0xFB,0xC0,0x00,0x00,0x00,0x00,0x00,0x27,0xFF,0x51,0x00,
- 0xB5,0x01,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x00,0x00,
- 0x9A,0x00,0x00,0x00,0x17,0xFF,0x80,0x00,0x00,0x08,0x00,0x00,0x0F,0xFF,0x00,0x80,
- 0x74,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x09,0xC0,0x00,0x0F,0xFF,0x00,0x00,
- 0x91,0x20,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,0x05,0x80,0x00,0x0F,0xFE,0x00,0x00,
- 0x65,0x14,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x02,0xA0,0x00,0x0F,0xFF,0x20,0x00,
- 0x90,0x08,0x00,0x00,0x03,0xFF,0x80,0x00,0x00,0x00,0x2A,0x00,0x1F,0xFE,0x02,0x00,
- 0x24,0x04,0x00,0x00,0x03,0xFF,0xC0,0x00,0x02,0x00,0x56,0x00,0x1F,0xFE,0x20,0x00,
- 0x50,0x00,0x00,0x00,0x1B,0xF7,0x80,0x00,0x0E,0x00,0x48,0x00,0x1F,0xFC,0x00,0x00,
- 0x24,0x00,0x00,0x00,0x1F,0xFF,0xE0,0x00,0x05,0xD4,0x00,0x00,0x1F,0xFC,0x00,0x00,
- 0x52,0x80,0x00,0x00,0x1F,0xF7,0xC0,0x00,0x01,0x70,0x00,0x00,0x3F,0xF0,0x00,0x00,
- 0x45,0x40,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x01,0x1E,0x80,0x00,0x3F,0xFC,0x00,0x20,
- 0x5A,0x80,0x00,0x00,0x1F,0xFF,0xE0,0x00,0x01,0x47,0x40,0x00,0x7F,0xFA,0x00,0x20,
- 0x15,0x40,0x00,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x51,0xA0,0x00,0x7F,0xFC,0x00,0x00,
- 0x16,0x80,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x20,0xE0,0x01,0xFF,0xF8,0x00,0x00,
- 0x15,0x40,0x00,0x00,0x0F,0xFF,0xFC,0x00,0x00,0x44,0x38,0x01,0xFF,0xF8,0x00,0x00,
- 0x0A,0xA0,0x00,0x00,0x1F,0xFF,0xFA,0x00,0x00,0x29,0x30,0x03,0xFF,0xF0,0x00,0x00,
- 0x05,0x40,0x00,0x00,0x0D,0xFF,0xFD,0x00,0x00,0x0A,0x48,0x07,0xFF,0xF8,0x00,0x00,
- 0x05,0x00,0x00,0x00,0x1F,0xFF,0xFA,0x00,0x00,0x0A,0x80,0x2F,0xFF,0xF0,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x0D,0xFF,0xFE,0x80,0x00,0x02,0x00,0x0F,0xFF,0xF9,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x1B,0xFF,0xFD,0x40,0x00,0x00,0x00,0xBF,0xFF,0xF5,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x0B,0xF7,0xFE,0xA0,0x00,0x00,0x00,0x3F,0xFF,0xF4,0x01,0x54,
- 0x00,0x00,0x00,0x00,0x17,0xF6,0xFD,0x50,0x00,0x00,0x01,0x7F,0xFF,0xF4,0x16,0xD0,
- 0x00,0x00,0x00,0x00,0x09,0xF2,0xFE,0xA8,0x00,0x00,0x04,0xFF,0xFF,0xF5,0x70,0x10,
- 0x00,0x00,0x00,0x00,0x0A,0xD0,0xFA,0xAA,0x00,0x00,0x15,0xFF,0xFF,0xEA,0xEA,0x20,
- 0x00,0x00,0x00,0x00,0x03,0xE0,0x17,0x55,0x40,0x00,0x23,0xFF,0xFF,0xF5,0x94,0x60,
- 0x00,0x00,0x00,0x00,0x0F,0xF0,0x74,0x4A,0xA8,0x01,0x5F,0xFF,0xFF,0xAA,0xF6,0x80,
- 0x00,0x00,0x00,0x00,0x03,0xF1,0x7B,0x55,0x50,0x82,0x3F,0xFF,0xFF,0xE9,0x7A,0x20,
- 0x00,0x00,0x00,0x00,0x07,0xF5,0xF6,0x2A,0xAA,0x25,0xFF,0xFF,0xFF,0x6A,0x68,0x00,
- 0x00,0x00,0x00,0x00,0x0B,0xFF,0xFB,0x41,0x55,0x57,0xFF,0xFF,0xFF,0xD1,0x50,0x00,
- };
- //名称:液晶用延时函数
- void delay(unsigned int t)
- {
- unsigned int i;
- for(i=0;i<t;i++);
- }
- /*名称:字节内 的位数据位置转换 函数
- 功能: 把dat中的第7位和第0位交换、
- 第6位和第1位交换、第5位和第2位交换
- 第4位和第3位交换
- */
- unsigned char num(unsigned char dat)
- {
- unsigned char val;
- val = ((dat & 0x01) << 7) | ((dat & 0x02) << 5) | ((dat & 0x04) << 3) | ((dat & 0x08) << 1) |
- ((dat & 0x10) >> 1) | ((dat & 0x20) >> 3) | ((dat & 0x40) >> 5) | ((dat & 0x80) >> 7);
- return val;
- }
- //名称:写命令函数
- void write_com(unsigned char cmdcode)
- {
- RS=0; //设置该字节数据为命令代码
- RW=1; //设置此次操作为读
- E=1; //使能
- _nop_(); //空操作,做短暂的延时
- _nop_(); //空操作,做短暂的延时
- E=0; //失能
- RS=0; //设置该字节数据为命令代码
- RW=0; //设置此次操作为读写
- P0=num(cmdcode); //将命令写入总线
- _nop_(); //空操作,做短暂的延时
- E=1; //E的下降沿,数据写入
- _nop_(); //空操作,做短暂的延时
- E=0; //E的下降沿,数据写入
- }
- //名称:写数据函数
- void write_data(unsigned char Rsspdata)
- {
- RS=0; //设置该字节数据为命令代码
- RW=1; //设置此次操作为读
- E=1; //使能
- _nop_(); //空操作,做短暂的延时
- _nop_(); //空操作,做短暂的延时
- E=0; //失能
- RS=1; //设置该字节数据为数据代码
- RW=0; //设置此次操作为读写
- P0=num(Rsspdata); //将数据写入总线
- _nop_(); //空操作,做短暂的延时
- E=1; //E的下降沿,数据写入
- _nop_(); //空操作,做短暂的延时
- E=0; //E的下降沿,数据写入
- }
- //名称:图片显示函数 ,图片取模值放到数组picture
- void img_disp(unsigned char code *img)
- {
- unsigned char i,j;
- for(j=0;j<32;j++) //垂直地址y32行,上下两屏共64行
- {
- for(i=0;i<8;i++) //再设定水平地址x(0-8)
- {
- write_com(0x34); //扩展指令集
- //连续写两个字节完成垂直于水平的坐标
- write_com(0x80+j); //先设定垂直地址y(0-32)
- write_com(0x80+i); //再设定水平地址x(0-8)
- write_com(0x30); //基本指令集
- write_data(img[j*16+i*2]);
- write_data(img[j*16+i*2+1]);
- }
- }
- for(j=32;j<64;j++)
- {
- for(i=0;i<8;i++)
- {
- write_com(0x34); //扩展指令集
- //连续写两个字节完成垂直于水平的坐标
- write_com(0x80+j-32); //先设定垂直地址(0-32)
- write_com(0x88+i); //再设定水平地址(0-8)
- write_com(0x30); //基本指令集
- write_data(img[j*16+i*2]);
- write_data(img[j*16+i*2+1]);
- }
- }
- write_com(0x36); //扩展指令集,绘图显示ON
- }
- //名称:12864初始化函数
- void init_lcd(void)
- {
- RST=0; //复位液晶
- delay(250); //加些延时
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
QC12864液晶(ST7920芯片)-画图.rar
(1.11 MB, 下载次数: 119)
|