📄 main.c
字号:
*********************************************************************************************************
** 函数名称 :ST3()
** 函数功能 :判状态位S3子程序(数据自动写状态)
** 入口参数 :LCD_State
** 出口参数 :无
*********************************************************************************************************
*/
void ST3(void)
{
uint8 LCD_State;
LCD_State = R_ST();
while((LCD_State & 0x08) != 0x08)
{
LCD_State = R_ST();
}
}
/*
*********************************************************************************************************
** 函数名称 :ST6()
** 函数功能 :判状态位S6子程序(屏读/屏拷贝状态)
** 入口参数 :LCD_State
** 出口参数 :无
*********************************************************************************************************
*/
void ST6(void)
{
uint8 LCD_State;
LCD_State = R_ST();
while((LCD_State & 0x40) != 0x40)
{
LCD_State = R_ST();
}
}
/*
*********************************************************************************************************
** 函数名称 :PR14()
** 函数功能 :自动写数据子程序
** 入口参数 :dat 要写入的数据
** 出口参数 :无
*********************************************************************************************************
*/
void PR14(uint8 dat)
{
ST3();
IO1DIR = 0xFF070000; // 恢复P1.24~P1.31为输出口
IO1CLR = LCD_CD; // LCD数据写入通道
IO1CLR = 0xFF000000;
IO1SET = dat << 24;
IO1CLR = LCD_WR;
IO1SET = LCD_WR;
}
/*
***************************************** ****************************************************************
** 函数名称 :PR13()
** 函数功能 :写数据子程序
** 入口参数 :dat 要写入的数据
** 出口参数 :无
*********************************************************************************************************
*/
void PR13(uint8 dat)
{
ST01();
IO1DIR = 0xFF070000; // 恢复P1.24~P1.31为输出口
IO1CLR = LCD_CD; // LCD数据写入通道
IO1CLR = 0xFF000000;
IO1SET = dat << 24;
IO1CLR = LCD_WR;
IO1SET = LCD_WR; // 写入数据(包括第一个和第二个参数数据以及指令代码数据,
// 还有其他各种数据:如计数器值,属性代码数据,显示RAM地址等)
}
/*
*********************************************************************************************************
** 函数名称 :PR12()
** 函数功能 :写指令代码数据子程序
** 入口参数 :-
** 出口参数 :无
*********************************************************************************************************
*/
void PR12(uint8 cmd)
{
ST01();
IO1DIR = 0xFF070000; // 恢复P1.24~P1.31为输出口
IO1SET = LCD_CD; // LCD指令通道
IO1CLR = 0xFF000000;
IO1SET = cmd << 24;
IO1CLR = LCD_WR;
IO1SET = LCD_WR; // 写入指令代码数据
}
/*
*********************************************************************************************************
** 函数名称 :PR11()
** 函数功能 :写单字节参数指令及其数据子程序
** 入口参数 :DAT2
** 出口参数 :无
*********************************************************************************************************
*/
void PR11(uint8 dat,uint8 cmd)
{
PR13(dat); // 写入单字节参数指令的参数DAT2
PR12(cmd); // 写入指令代码数据
}
/*
*********************************************************************************************************
** 函数名称 :PR1()
** 函数功能 :写双字节参数指令及其数据子程序
** 入口参数 :DAT1,DAT2
** 出口参数 :无
*********************************************************************************************************
*/
void PR1(uint8 dat_1,uint8 dat_2,uint8 cmd)
{
PR13(dat_1); // 写入第一个参数数据DAT1
PR13(dat_2); // 写入第二个参数数据DAT2
PR12(cmd); // 写入指令代码数据
}
/*
*********************************************************************************************************
** 函数名称 :INT()
** 函数功能 :初始化设置子程序,主要是对显示区域的设置和显示方式的设置。
** 入口参数 :DAT1,DAT2
** 出口参数 :无
*********************************************************************************************************
*/
void INI(void)
{
/*DAT1,DAT2,COM*/
PR1(0x00,0x00,0x40); // 设置文本显示区域首地址
PR1(0x20,0x00,0x41); // 设置文本显示区域宽度,即一行显示所占字节数
PR1(0x00,0x08,0x42); // 设置图形显示区域首地址(0800H),或为文本属性区域首地址
PR1(0x20,0x00,0x43); // 设置图形显示区域宽度,或为文本属性区域宽度,即一行显示所占字节数
PR12(0xa7); // 光标形状设置:8*7的格式
PR12(0x80); // 显示方式设置逻辑"或"合成
PR12(0x9c); // 显示开关设置 开文本和图形显示
}
/*
*********************************************************************************************************
** 函数名称 :CLEAR()
** 函数功能 :清显示存储器子程序,该子程序对显示存储器完全清零,不分显示区域性质。
** 另外该程序也可以作为接口电路及驱动程序的调试使用,将写入的数据不为"0",
** 即可以观察显示效果。
** 入口参数 :DAT1,DAT2
** 出口参数 :无
*********************************************************************************************************
*/
void CLEAR(void)
{
uint8 i,j;
uint8 a=00; //清屏时写入0连续写入即可,改变此值,可以用来调试驱动程序
PR1(0x00,0x08,0x24); // 设置清零首地址
PR12(0xb0); // 设置自动写方式
for(i=0;i<16;i++)
{
for(j=0;j<20;j++)
{
PR13(a);
}
}
PR12(0xb2); // 设置自动写结束指令
}
// *********************************************** */
// 此表为图形显示方式下(自定义字符,包括汉字)的字模 */
uint8 const CCTAB[] = {
0x21,0xF8,0x21,0x08,0x21,0xF8,0xF8,0x00,0x23,0xBC,0x22,0xA4,0x2A,0xA4,0x33,0xBC,
0x60,0x40,0xA7,0xFE,0x20,0x60,0x20,0xD0,0x21,0x48,0x22,0x4E,0xAC,0x44,0x40,0x40,/*"操",0*/
0x08,0x80,0x0C,0x80,0x09,0x00,0x13,0xFE,0x12,0x80,0x34,0x88,0x50,0xFC,0x90,0x80,
0x10,0x80,0x10,0x84,0x10,0xFE,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,/*"作",1*/
0x40,0x00,0x27,0xF8,0x20,0x90,0x00,0x60,0x07,0xF8,0x04,0x48,0xE7,0xF8,0x24,0x48,
0x24,0x48,0x27,0xF8,0x24,0x48,0x24,0x68,0x24,0x50,0x50,0x00,0x8F,0xFE,0x00,0x00,/*"通",2*/
0x40,0x00,0x27,0xF8,0x31,0x08,0x21,0x08,0x01,0x08,0xF1,0x08,0x17,0xE8,0x11,0x08,
0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x0A,0x15,0x0A,0x19,0x0A,0x11,0x04,0x00,0x00,/*"讯",3*/
0x00,0x00,0x3F,0xF0,0x00,0x10,0x1F,0xF0,0x00,0x10,0xFF,0xFE,0x01,0x10,0x11,0x30,
0x09,0x40,0x05,0x80,0x03,0x40,0x0D,0x30,0x71,0x1C,0x21,0x08,0x05,0x00,0x02,0x00,/*"录",4*/
0x08,0x00,0x0F,0xFC,0x10,0x80,0x10,0x80,0x20,0x80,0x4F,0xF8,0x88,0x80,0x08,0x80,
0x08,0x80,0x08,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,/*"年",5*/
0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,
0x07,0xF0,0x04,0x10,0x08,0x10,0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20,0x00,0x00,/*"月",6*/
0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,0x00,0x00,/*"日",7*/
0x00,0x00,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x01,0x00,0x11,0x00,
0x1F,0xFC,0x21,0x00,0x21,0x00,0x4F,0xF8,0x01,0x00,0x01,0x00,0x7F,0xFE,0x00,0x00,/*"星",8*/
0x22,0x00,0x22,0x7C,0x7F,0x44,0x22,0x44,0x3E,0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,
0x22,0x44,0xFF,0x7C,0x00,0x44,0x24,0x84,0x22,0x84,0x43,0x14,0x81,0x08,0x00,0x00,/*"期",9*/
0x20,0x00,0x53,0xF4,0x24,0x0C,0x08,0x04,0x08,0x04,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x08,0x04,0x08,0x04,0x04,0x08,0x03,0xF0,0x00,0x00,/*"℃",10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",11*/
0x00,0x00,0x00,0x10,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,/*"二",12*/
0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,/*"三",13*/
0x00,0x00,0x7F,0xFC,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,
0x48,0x84,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,/*"四",14*/
0x00,0x00,0x7F,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x3F,0xF0,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x24,0xFF,0xFE,0x00,0x00,0x00,0x00,/*"五",15*/
0x04,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x04,0x80,
0x06,0x40,0x04,0x20,0x08,0x10,0x08,0x18,0x10,0x0C,0x20,0x0C,0x40,0x08,0x00,0x00,/*"六",16*/
};
// *********************************************** */
// **
// **
// *********************************************** */
// 此表为图形显示方式下(西文字符:8*16点阵数据)的字模 */
uint8 const CTAB_8_16[] = {
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"0",0*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"1",1*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,/*"2",2*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*"3",3*/
0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,/*"4",4*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*"5",5*/
0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"6",6*/
0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,/*"7",7*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*"8",8*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,/*"9",9*/
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,/*":",10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,/*".",11*/
0x00,0x00,0x20,0x3F,0x22,0x74,0x54,0x54,0x5F,0x64,0x24,0x34,0x34,0x54,0x0C,0x00,/*"好",12*/
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x18,0x14,0x24,0x22,0x42,0x01,0x00,/*"人",13*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",14*/
0x00,0x00,0x08,0x28,0x48,0x3F,0x48,0x48,0x88,0x3E,0x08,0x08,0x08,0x08,0x7F,0x00,/*"生",15*/
0x00,0x00,0x00,0xFE,0x10,0x52,0x32,0x34,0x14,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,/*"平",16*/
0x00,0x00,0x00,0x08,0x7F,0x51,0x51,0x10,0x7F,0x24,0x24,0x34,0x08,0x16,0x60,0x00,/*"安",17*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
// *********************************************** */
// **
// **
// *********************************************** */
// 此表为图形显示方式下(西文字符:8*8点阵数据)的字模 */
uint8 const CTAB_8_8[] ={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
/*
*********************************************************************************************************
** 函数名称 :WRI_CC()
** 函数功能 :写入点阵数据子程序**
** 入口参数 : LCD_X(0-19),LCD_Y(0-127),CODE,dat8_16(其值表示:
** 1表示8*16点阵式数据,2表示16*16点阵数据即汉字写入,3表示8*8点阵数据)
** 出口参数 :无
*********************************************************************************************************
*/
void WRI_CC (uint8 x,uint8 y,uint8 cod,uint8 dat8_16)
{
uint8 m;
uint8 n;
uint16 i;
uint16 a;
LCD_X = x;
LCD_Y = y;
CODE = cod;
n = dat8_16;
a = (LCD_Y)*(0x20); // 计算显示RAM地址
LCD_X = a + LCD_X;
a = (a >> 8);
LCD_Y = a + 0x08;
/* 写入汉字,16*16点阵数据 */
if(n == 2)
{
i = CODE * 0x20;
for(m=0;m<16;m++)
{
PR1(LCD_X,LCD_Y,0x24);
PR11(CCTAB[i],0xc0); // 写入左部字模数据
i++;
PR11(CCTAB[i],0xc0); // 写入右部字模数据
i++;
a = LCD_X + 0x20;
LCD_X = a;
a = (a >> 8);
LCD_Y = LCD_Y + a;
}
}
/* 写入8*16点阵数据 */
if(n == 1)
{
i = CODE * 16;
for(m=0;m<16;m++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -