📄 liquid_crystal.c
字号:
/*************************
名称:12864液晶显示
作者:dongpeiqin
修改时间:2007.4.23
功能: 陕西理工学院
电气工程系
董佩钦
行胜于言!
*************************/
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define write_cmd_addr_1 XBYTE[0x8fff] //写指令地址左
#define read_state_addr_1 XBYTE[0xafff] //读状态地址左
#define write_data_addr_1 XBYTE[0x9fff] //写数据地址左
#define read_data_addr_1 XBYTE[0xbfff] //读数据地址左
#define write_cmd_addr_2 XBYTE[0x4fff] //写指令地址右
#define read_state_addr_2 XBYTE[0x6fff] //读状态地址右
#define write_data_addr_2 XBYTE[0x5fff] //写数据地址右
#define read_data_addr_2 XBYTE[0x7fff] //读数据地址右
#define Disp_On 0x3f//开显示
#define Disp_Off 0x3e//关显示
#define Col_Add 0x40//列地址
#define Page_Add 0xb8//页地址
#define Start_line 0xc0//起始页
/*****************************
字模,此字体下对应的
点阵为:宽x高=16x16
*****************************/
unsigned char code Chinese_character[][32]=
{
{
/*-- 文字: 陕 --*/
0xFE,0x02,0x22,0x5A,0x86,0x28,0xC8,0x08,0xFF,0x08,0x88,0x48,0x28,0x08,0x00,0x00,
0xFF,0x00,0x04,0x48,0x47,0x21,0x11,0x0D,0x03,0x05,0x09,0x11,0x21,0x41,0x41,0x00//"陕",0
},
{
/*-- 文字: 西 --*/
0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00,
0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00//"西",1
},
{
/*-- 文字: 理 --*/
0x44,0x44,0xFC,0x44,0x44,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,
0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00//"理",2
},
{
/*-- 文字: 工 --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00//"工",3
},
{
/*-- 文字: 学 --*/
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00//"学",4
},
{
/*-- 文字: 院 --*/
0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00//"院",5
},
{
/*-- 文字: 电 --*/
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00//"电",6
},
{
/*-- 文字: 气 --*/
0x00,0x20,0x10,0x8C,0xA7,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,0x24,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00//"气",7
},
{
/*-- 文字: 工 --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00//"工",8
},
{
/*-- 文字: 程 --*/
0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00//"程",9
},
{
/*-- 文字: 系 --*/
0x00,0x00,0x02,0x22,0xB2,0xAA,0x66,0x62,0x22,0x11,0x4D,0x81,0x01,0x01,0x00,0x00,
0x00,0x40,0x21,0x13,0x09,0x05,0x41,0x81,0x7F,0x01,0x05,0x09,0x13,0x62,0x00,0x00//"系",10
},
{
/*-- 文字: 董 --*/
0x02,0x22,0x2A,0xAA,0xAA,0xAF,0xAA,0xFA,0xAA,0xAF,0xAA,0xAA,0x2A,0x22,0x22,0x00,
0x80,0x80,0xA0,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0xA0,0x80,0x80,0x00//"董",11
},
{
/*-- 文字: 佩 --*/
0x40,0x20,0xF8,0x0F,0x02,0xFE,0xD2,0x52,0xF2,0x52,0xD2,0x02,0xFE,0x00,0x00,0x00,
0x00,0x00,0x7F,0x20,0x1C,0x03,0x3F,0x00,0x7F,0x10,0x1F,0x00,0x1F,0x20,0x78,0x00//"佩",12
},
{
/*-- 文字: 钦 --*/
0x40,0x30,0xEF,0x24,0x24,0x24,0x04,0x40,0x38,0x17,0xF0,0x10,0x50,0x30,0x10,0x00,
0x01,0x01,0x7F,0x21,0x11,0x41,0x40,0x20,0x10,0x0C,0x03,0x0C,0x30,0x60,0x20,0x00//"钦",13
},
{
/*-- 文字: 行 --*/
0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,
0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00//"行",14
},
{
/*-- 文字: 胜 --*/
0x00,0x00,0xFE,0x12,0x12,0xFE,0x20,0x1C,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00,
0x40,0x30,0x0F,0x21,0x41,0x3F,0x20,0x21,0x21,0x21,0x3F,0x21,0x21,0x21,0x20,0x00//"胜",15
},
{
/*-- 文字: 于 --*/
0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,
0x00,0x00,0x00,0x00,0x20,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//"于",16
},
{
/*-- 文字: 言 --*/
0x00,0x04,0x04,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,0x00//"言",17
}
};
unsigned char tanhao[]=
{
/*-- 文字: ! --*/
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00//"!",18
};
unsigned char qingping[]=
{
/*-- 清屏 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/*********函数声明***********/
void busy_check_1(void);
void busy_check_2(void);
void write_cmd_1(unsigned char command);
void write_cmd_2(unsigned char command);
void write_data_1(unsigned char dis_data);
void write_data_2(unsigned char dis_data);
void clear_1(void);
void clear_2(void);
void Chinese_disp_1(unsigned char pag,unsigned char col,unsigned char n);
void Chinese_disp_2(unsigned char pag,unsigned char col,unsigned char n);
void display(void);
void tanhao_disp(unsigned char pag,unsigned char col,unsigned char *chinese2);
void qingping_disp1(unsigned char pag,unsigned char col,unsigned char *chinese2);
void qingping_disp2(unsigned char pag,unsigned char col,unsigned char *chinese2);
/***********************
检测忙状态左
***********************/
void busy_check_1(void)
{
unsigned char busy;
while(busy&0x80)
{
busy=read_state_addr_1;
}
}
/***********************
检测忙状态右
***********************/
void busy_check_2(void)
{
unsigned char busy;
while(busy&0x80)
{
busy=read_state_addr_2;
}
}
/***********************
写命令左
***********************/
void write_cmd_1(unsigned char command)
{
busy_check_1();
write_cmd_addr_1=command;
}
/***********************
写命令右
***********************/
void write_cmd_2(unsigned char command)
{
busy_check_2();
write_cmd_addr_2=command;
}
/***********************
写数据左
***********************/
void write_data_1(unsigned char dis_data)
{
busy_check_1();
write_data_addr_1=dis_data;
}
/***********************
写数据右
***********************/
void write_data_2(unsigned char dis_data)
{
busy_check_2();
write_data_addr_2=dis_data;
}
/***********************
清内存左
***********************/
void clear_1(void)
{
unsigned char i;
unsigned char k;
write_cmd_1(Page_Add+0);
write_cmd_1(Col_Add+0);
for(i=0;i<8;i++)
{
write_cmd_1(Page_Add+i);
for(k=0;k<64;k++)
//write_data_1(0x00);
qingping_disp1(i,k,qingping);
}
}
/***********************
清内存右
***********************/
void clear_2(void)
{
unsigned char i;
unsigned char k;
write_cmd_2(Page_Add+0);
write_cmd_2(Col_Add+0);
for(i=0;i<8;i++)
{
write_cmd_2(Page_Add+i);
for(k=0;k<64;k++)
//write_data_2(0x00);
qingping_disp2(i,k,qingping);
}
}
/***********************
显示汉字16*16左
************************/
void Chinese_disp_1(unsigned char pag,unsigned char col,unsigned char n)
{
unsigned char i=0;
unsigned char j=0;
for(i=0;i<2;i++)
{
write_cmd_1(Page_Add+pag+i);
write_cmd_1(Col_Add+col);
for(j=0;j<16;j++)
write_data_1(Chinese_character[n][16*i+j]);
}
}
/***********************
显示汉字16*16右
***********************/
void Chinese_disp_2(unsigned char pag,unsigned char col,unsigned char n)
{
unsigned char i=0;
unsigned char j=0;
for(i=0;i<2;i++)
{
write_cmd_2(Page_Add+pag+i);
write_cmd_2(Col_Add+col);
for(j=0;j<16;j++)
write_data_2(Chinese_character[n][16*i+j]);
}
}
/***********************
显示叹号'!'
***********************/
void tanhao_disp(unsigned char pag,unsigned char col,unsigned char *chinese2)
{
unsigned char i=0;
unsigned char j=0;
for(i=0;i<2;i++)
{
write_cmd_2(Page_Add+pag+i);
write_cmd_2(Col_Add+col);
for(j=0;j<8;j++)
write_data_2(chinese2[8*i+j]);
}
}
/***********************
清屏左
***********************/
void qingping_disp1(unsigned char pag,unsigned char col,unsigned char *chinese2)
{
unsigned char i=0;
unsigned char j=0;
for(i=0;i<2;i++)
{
write_cmd_1(Page_Add+pag+i);
write_cmd_1(Col_Add+col);
for(j=0;j<8;j++)
write_data_1(chinese2[8*i+j]);
}
}
/***********************
清屏右
***********************/
void qingping_disp2(unsigned char pag,unsigned char col,unsigned char *chinese2)
{
unsigned char i=0;
unsigned char j=0;
for(i=0;i<2;i++)
{
write_cmd_2(Page_Add+pag+i);
write_cmd_2(Col_Add+col);
for(j=0;j<8;j++)
write_data_2(chinese2[8*i+j]);
}
}
/***********************
延时子程序
***********************/
void delay(unsigned int k)
{
unsigned int i;
unsigned int j;
for(i=0;i<k;i++)
for(j=0;j<20;j++);
}
/***********************
LCD显示子程序
***********************/
void display(void)
{
unsigned char i;
for(i=Start_line;i<0xff;i++)
{
Chinese_disp_1(0,16,0);
Chinese_disp_1(0,32,1);
Chinese_disp_1(0,48,2);
Chinese_disp_2(0,0,3);
Chinese_disp_2(0,16,4);
Chinese_disp_2(0,32,5);
Chinese_disp_1(2,32,6);
Chinese_disp_1(2,48,7);
Chinese_disp_2(2,0,8);
Chinese_disp_2(2,16,9);
Chinese_disp_2(2,32,10);
Chinese_disp_1(4,48,11);
Chinese_disp_2(4,0,12);
Chinese_disp_2(4,16,13);
Chinese_disp_1(6,32,14);
Chinese_disp_1(6,48,15);
Chinese_disp_2(6,0,16);
Chinese_disp_2(6,16,17);
tanhao_disp(6,32,tanhao);
write_cmd_1(i);
write_cmd_2(i);
delay(3000);
}
delay(60000);
}
/***********主程序************/
void main(void)
{
clear_1();
clear_2();
while(1)
{
_nop_();
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -