📄 lcd_dis.c
字号:
/***************************************************************\
|* 12864LCD显示程序 proteus7.1仿真AMPIRE128*64 *|
|* Copyright (c) 2007山师.传播 */
/* All rights reserved. */
/*赵彦彬 *|
|* *|
|*
\***************************************************************/
#include <reg52.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef struct dword
{
uchar dd[64];
};
struct dword code dis[30] = // 数据表
{
0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,
0x00,0x7F,0x20,0x20,0x20,0x20,0x20,0x3F,
0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,
0x08,0x08,0x08,0x88,0x68,0x18,0x0F,0xE8,
0x08,0x08,0x08,0x88,0x08,0x0C,0x08,0x00,
0x00,0x40,0x21,0x11,0x0D,0x41,0x81,0x7F,
0x01,0x05,0x09,0x31,0x61,0x00,0x00,0x00,
0x00,0xFC,0x00,0x00,0xFF,0x00,0x02,0xF2,
0x12,0x12,0xFE,0x12,0x12,0xFB,0x12,0x00,
0x00,0x8F,0x40,0x30,0x0F,0x00,0x00,0x3F,
0x00,0x00,0xFF,0x10,0x20,0x1F,0x00,0x00,
0x04,0x44,0x94,0x24,0x6F,0x04,0xE4,0x24,
0x24,0x24,0x2F,0xF4,0x24,0x06,0x04,0x00,
0x04,0x04,0xFD,0x04,0x02,0x00,0x3F,0x40,
0x40,0x42,0x44,0x43,0x40,0x40,0x70,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,
0xA0,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,
0x01,0x06,0x08,0x10,0x20,0x60,0x20,0x00,
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,
0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,
0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,
0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48,
0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B,
0x12,0x62,0xD2,0x0A,0x06,0x02,0x00,0x00,
0x10,0x10,0x10,0xFF,0x90,0x30,0xAA,0x72,
0x22,0xFE,0x21,0x71,0xA9,0xAC,0xA0,0x00,
0x02,0x42,0x81,0x7F,0x00,0x01,0xFE,0x92,
0x92,0xFF,0x92,0x92,0xFE,0x01,0x00,0x00,
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,
0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,
0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,
0x00,0xFE,0x22,0x5A,0x96,0x0C,0x24,0x24,
0x25,0x26,0x24,0x34,0xA4,0x14,0x0C,0x00,
0x00,0xFF,0x04,0x08,0x87,0x81,0x41,0x31,
0x0F,0x01,0x3F,0x41,0x41,0x41,0x70,0x00,
0x40,0x48,0x48,0x48,0xFF,0x48,0x68,0x40,
0x0C,0x30,0xC0,0x30,0x0E,0x00,0x00,0x00,
0x40,0x30,0x0F,0x08,0x1F,0x22,0x42,0x48,
0x44,0x43,0x40,0x41,0x46,0x6C,0x20,0x00,
0x00,0x00,0xE4,0x24,0x2C,0x34,0x25,0x26,
0xA4,0xB4,0x6C,0x26,0x24,0x30,0x20,0x00,
0x40,0x30,0x0F,0x80,0x92,0x92,0x49,0x49,
0x44,0x24,0x22,0x11,0x08,0x00,0x00,0x00,
0x10,0x10,0xD0,0xFF,0x90,0x10,0x10,0xD0,
0xFF,0x90,0x10,0x20,0x10,0x08,0xC6,0x00,
0x04,0x03,0x00,0xFF,0x00,0x04,0x03,0x00,
0xFF,0x00,0x81,0x44,0x22,0x11,0x0C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x20,0x22,0x2A,0x2A,0xAA,0x6A,0x3A,0x2F,
0x2A,0x6A,0xAA,0x2A,0x2A,0x22,0x20,0x00,
0x04,0x04,0x02,0x01,0xFF,0x49,0x49,0x49,
0x49,0x49,0xFF,0x01,0x02,0x06,0x02,0x00,
0x80,0x70,0x00,0xFF,0x10,0x20,0xFE,0x92,
0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x40,
0x23,0x04,0x08,0x14,0x62,0xC3,0x40,0x00,
0x24,0x24,0xA4,0xFE,0x23,0x22,0x80,0x70,
0x00,0xFF,0x00,0x40,0x20,0x30,0x00,0x00,
0x08,0x06,0x01,0xFF,0x81,0x42,0x20,0x18,
0x06,0x01,0x06,0x08,0x30,0x60,0x20,0x00,
0x82,0x92,0x92,0x92,0x92,0xFF,0x00,0x00,
0x00,0xFF,0x92,0x92,0x9A,0xD3,0x82,0x00,
0x20,0x18,0x00,0x3C,0x40,0x41,0x44,0x48,
0x58,0x41,0x40,0x70,0x00,0x08,0x30,0x00,
0x00,0x40,0x7F,0x44,0x44,0x26,0xA4,0x00,
0x3F,0x48,0x48,0xC4,0x46,0x40,0x70,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,
0x49,0x49,0x49,0xFF,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x48,0x4C,0x4A,0x49,
0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,
0x10,0x10,0x10,0xFF,0x90,0x50,0x20,0x20,
0x20,0xFF,0xA0,0x22,0x24,0x30,0x20,0x00,
0x02,0x42,0x81,0x7F,0x00,0x80,0x40,0x30,
0x0F,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x46,0x2F,0x1F,0x06,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x04,0x04,0xC4,0x3F,0x04,0x04,0x04,
0xE4,0x04,0x1F,0x84,0xC4,0x06,0x04,0x00,
0x04,0x02,0x01,0xFF,0x00,0x20,0x10,0x08,
0x3F,0x42,0x41,0x40,0x40,0x40,0x70,0x00,
0x10,0x0C,0x04,0x44,0x24,0x94,0x45,0x26,
0x44,0x94,0x24,0x64,0x04,0x14,0x0C,0x00,
0x08,0x08,0x04,0x02,0xFD,0x44,0x44,0x44,
0x44,0x44,0xFD,0x02,0x04,0x0C,0x04,0x00,
0x00,0x00,0x00,0x00,0xFE,0x22,0x22,0x22,
0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x00,
0x00,0x80,0x40,0x30,0x0F,0x02,0x02,0x02,
0x02,0x42,0x82,0x7F,0x00,0x00,0x00,0x00,
0x88,0x98,0x64,0x2C,0xB2,0xCD,0x00,0xFC,
0x26,0x25,0x24,0x24,0x24,0xFE,0x04,0x00,
0x00,0x12,0x52,0x89,0x44,0x3F,0x80,0x43,
0x31,0x0F,0x01,0x3F,0x41,0x43,0x70,0x00,
0x20,0x20,0x20,0x22,0x24,0x2C,0x20,0xE0,
0x3F,0x20,0x20,0x20,0x20,0xF0,0x20,0x00,
0x00,0x40,0x20,0x10,0x08,0x04,0x03,0x00,
0x02,0x04,0x4C,0x80,0x40,0x3F,0x00,0x00,
0x40,0x40,0x42,0xCC,0x00,0x20,0x10,0xFC,
0x4B,0x48,0x4A,0xFC,0x48,0x4C,0x08,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,
0x22,0x22,0x22,0x3F,0x22,0x32,0x20,0x00,
0x10,0x10,0xF0,0x1F,0x10,0xF2,0x82,0x82,
0xFE,0x82,0x82,0x82,0xFE,0x83,0x82,0x00,
0x40,0x22,0x15,0x08,0x14,0x23,0x80,0x40,
0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 //山东师范大学传播学院赵彦彬春恨秋悲皆自扰花容月貌为谁妍
};
sbit DI =P3^7; // 数据\指令 选择
sbit RW =P3^6; // 读\写 选择
sbit E =P3^5; // 读\写使能
sbit CS2 =P3^4; // 片选1
sbit CS1 =P3^3; // 片选2
sbit RST =P3^2; // 复位
/**********************************************\
|* 写命令子程序 *|
|* *|
\**********************************************/
void write_cmd(uchar cmd) //写命令子程序
{ RW=0;
DI=0; //DI=0 写命令
E=1;
P1=cmd;
E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR
}
/**********************************************\
|* 写数据子程序 *|
|* 调用函数: null *|
\**********************************************/
void write_dat(uchar dat) //写数据子程序
{ RW=0;
DI=1; //DI=1 写数据
E=1;
P1=dat;
E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR
}
/**********************************************\
|* 设置显示起始行 X地址和Y地址 *|
|* 入口参数:st_line 显示起始行 0~63 *|
|* x_add 页地址 8行为一页 0~7 *|
|* y_add Y地址 0~128 *|
\**********************************************/
void set_dis(uchar st_line,uchar x_add,uchar y_add) //设置显示起始行 X地址和Y地址
{
//write_cmd(st_line+0xc0); //+0xc0是参照设置起始行的格式
write_cmd(x_add+0xb8); //+0xb8是参照设置页地址的格式
if(y_add<64) { CS1=0;CS2=1;write_cmd(y_add+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选左右半屏
else { CS1=1;CS2=0;write_cmd(y_add);} //选第一片时,+64第二片为y_add-64+64
}
/***********************************************\
|* 写汉字子程序1 可以在任意位置写入 *|
|* 入口参数:st_line 显示起始行 0~63 *|
|* x_add 页地址 8行为一页 0~7 *|
|* y_add Y地址 0~128 *|
count 汉字个数
/*调用set_dis write_dat
\***********************************************/
void write_word(uchar st_line,uchar x_add,uchar y_add,uchar *buf,uchar count) //写入汉字
{ uchar i,j,k=1;
set_dis(st_line, x_add,y_add);
for(j=0;j<count;j++) //显示的字数
{
for(i=0;i<16;i++)
write_dat(*(buf+i+j*32)) ; //字的下半部分,x_add+1
set_dis(st_line,x_add+1,y_add);
for(i=16;i<32;i++)
write_dat(*(buf+i+j*32));
set_dis(st_line,x_add,y_add=y_add+16);
if(y_add==128) //一行的字数超过8 y_add>128时换行
{ //为什么每次换行第一列子的上半部分出现错误?
x_add=2*k;
y_add=0;
set_dis(st_line, x_add,y_add);
k++;
}
}
}
/****************************************************\
|* 主程序入口 *|
|* 12864LCD显示程序 proteus7.1 仿真AMPIRE128*64 *|
\****************************************************/
void main(void) //主程序
{
write_word(0,0,0,&dis,30);
write_cmd(0x3f);
CS1=CS2=1;
while(1)
{}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -