📄 lpc21_lcd.c
字号:
#include "LCD.H"
#include "char_16.h"
/*
//--------------240*128点阵液晶 的SYSTEM SET 参数 -----------------------------
const Uchar8 SYSTEMSET_code[8]={0x30,0x87,0x07,0x27,0x2c,0xf0,0x30,0x00};
const Uchar8 SCRTAB_code[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
*/
//--------------320*240点阵液晶 的SYSTEM SET 参数 -----------------------------
//const Uchar8 SYSTEMSET_code[8] = {0x38, 0x87, 0x07, 0x27, 0x42, 0xf0, 0x30, 0x00}; //P1-P8参数
//const Uchar8 SCRTAB_code[10] = {0x00, 0x00, 0xf0, 0x00, 0x40, 0xf0, 0x00, 0x80, 0x00, 0x00}; // P1-P10参数
const Uchar8 SYSTEMSET_code[8] = {0x32, 0x87, 0x07, 0x27, 0x42, 0xef, 0x28, 0x00}; //P1-P8参数
const Uchar8 SCRTAB_code[10] = {0x00, 0x00, 0xef, 0x00, 0x40, 0xef, 0x00, 0x80, 0x00, 0x00}; // P1-P10参数
/* 在此可以观察文本方式下的字符及光标的显示效果(写入内容为"Support tel:0571-85121742") */
//unsigned char CTAB1[16]={0x70,0x88,0x88,0x88,0xf8,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char CTAB1[8]={0x70,0x88,0x88,0x88,0xf8,0x88,0x88,0x00};
/******************************************************************************************************************
* 函数名称:LCM12864_Delay()
* 功 能:软件延时函数。用于LCM12864显示输出时序控制。
* 入口参数:无
* 出口参数:无
*******************************************************************************************************************/
void delay_us(Ushort16 time)
{
do
{
time--;
}
while (time>1);
}
/******************************************************************************************************************
* 函数名称:LCM12864_Delay()
* 功 能:软件延时函数。用于LCM12864显示输出时序控制。
* 入口参数:无
* 出口参数:无
*******************************************************************************************************************/
void delay_ms(Ushort16 time)
{
Uint32 TEMP;
do
{
time--;
for(TEMP = 0; TEMP < 1000; TEMP++)
{
;
}
}
while (time>1);
}
/*********************************************************************************************************
** 函数名称: void LCD_WriteCMD(Uchar8 command)
** 输 入: 命令command
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 向LCD写命令
********************************************************************************************************/
void InputData (Uchar8 dat)
{
Uint32 temp;
temp = dat;
temp = temp << 16;
temp = temp | (IO1PIN & 0xff00ffff);
IO1PIN = temp;
}
/*********************************************************************************************************
** 函数名称: void LCD_WriteCMD(Uchar8 command)
** 输 入: 命令command
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 向LCD写命令
*******************************************************************************************************/
void LCD_WriteCMD(Uchar8 command)
{
// IO1CLR |= LCD245_dir; //设置245为B-A方向
LCD_COM_START();
InputData(command);
H_LCD_WR(); //LCD进入写的状态
H_LCD_CS();
}
/*********************************************************************************************************
** 函数名称: void LCD_WritEDAta(Uchar8 dat)
** 输 入: 数据dat
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 向LCD写数据
********************************************************************************************************/
//8080时序
void LCD_WriteData(Uchar8 dat)
{
// IO1CLR |= LCD245_dir; //设置245为B-A方向
LCD_DATA_START();
InputData(dat);
H_LCD_WR(); //LCD进入写的状态
H_LCD_CS();
}
/*********************************************************************************************************
** 函数名称: void WR_Num8x8(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num8x8(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
Uchar8 i, n;
LCD_WriteCMD(CSRDIR_DOWN); //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 CSRW 代码
LCD_WriteData(j%256); //设置光标地址
LCD_WriteData(j/256); //设置光标地址
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 MWRITE 代码
for(i = 0; i < 8; i++)
{
n = *T_data;
if(type != 0) n = ~n;
LCD_WriteData(n); //写入汉字代码
T_data++;
}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x8(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num16x8(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
Uchar8 i, n;
LCD_WriteCMD(CSRDIR_DOWN); //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 CSRW 代码
LCD_WriteData(j%256); //设置光标地址
LCD_WriteData(j/256); //设置光标地址
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 MWRITE 代码
for(i = 0; i < 16; i++)
{
n = *T_data;
if(type != 0) n = ~n;
LCD_WriteData(n); //写入汉字代码
T_data++;
}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num16x16(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
Uchar8 i, m, n;
for(m = 0; m < 2; m++)
{
LCD_WriteCMD(CSRDIR_DOWN); //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 CSRW 代码
// LCD_WriteData(j&256); //设置光标地址
LCD_WriteData(j%256); //设置光标地址
LCD_WriteData(j/256); //设置光标地址
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 MWRITE 代码
for(i = 0; i < 16; i++)
{
n = *T_data;
if(type != 0) n = ~n;
LCD_WriteData(n); //写入汉字代码
T_data++;
}
j++;
}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num24x24(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
Uchar8 i, m, n;
for(m = 0; m < 3; m++)
{
LCD_WriteCMD(CSRDIR_DOWN); //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 CSRW 代码
LCD_WriteData(j%256); //设置光标地址
LCD_WriteData(j/256); //设置光标地址
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 MWRITE 代码
for(i = 0; i < 24; i++)
{
n = *T_data;
if(type != 0) n = ~n;
LCD_WriteData(n); //写入汉字代码
T_data++;
}
j++;
}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num20x40(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
Uchar8 i, m, n;
for(m = 0; m < 3; m++)
{
LCD_WriteCMD(CSRDIR_DOWN); //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 CSRW 代码
LCD_WriteData(j%256); //设置光标地址
LCD_WriteData(j/256); //设置光标地址
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 MWRITE 代码
for(i = 0; i < 40; i++)
{
n = *T_data;
if(type != 0) n = ~n;
LCD_WriteData(n); //写入汉字代码
T_data++;
}
j++;
}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num40x40(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
Uchar8 i, m, n;
for(m = 0; m < 5; m++)
{
LCD_WriteCMD(CSRDIR_DOWN); //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 CSRW 代码
LCD_WriteData(j%256); //设置光标地址
LCD_WriteData(j/256); //设置光标地址
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 MWRITE 代码
for(i = 0; i < 40; i++)
{
n = *T_data;
if(type != 0) n = ~n;
LCD_WriteData(n); //写入汉字代码
T_data++;
}
j++;
}
}
/*********************************************************************
** 函数名称: void LCD_WAIT_16x16(Uchar8 x, Uchar8 y)
** 输 入: x坐标(<320),Y坐标(<240),
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:
显示一个等待的图标
************************************************************/
void LCD_WAIT_16x16(Uchar8 x, Uchar8 y)
{
Ushort16 j;
Uchar8 temp_row, n;
temp_row = ROW;
n = 0;
for( ; ;)
{
n = n % 4;
j= temp_row * y + x;
WR_Num16x16(0, j, (Uchar8 *)&ASCII_BUZY_16[n][0]);
delay_ms(3000);
n++;
}
}
/*********************************************************************
** 函数名称: void LCD_WR_string_16x8(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:
1、 在指定的位置中写16*8字符
************************************************************/
void LCD_WR_string_16x8(Uchar8 type, Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
{
Ushort16 j;
Uchar8 m, temp_row;
temp_row = ROW;
j= temp_row * y + x;
for(m = 0; m < unm; m++)
{
WR_Num16x8(type, j, (Uchar8 *)&ASCII_NUM_16[*font][0]);
font++;
j++;
}
}
/*********************************************************************
** 函数名称: void LCD_WR_char_string_16x8(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:
1、 在指定的位置中写16*8字符
************************************************************/
void Account_num(Uchar8 num, Uint32 font)
{
Uchar8 m;
Uint32 pp;
pp = 10;
for(m = 1; m < num; m++)
{
pp = pp * 10;
}
if(num < 10)
{
font = font % pp;
}
for(m = 0; m < num; m++)
{
num_buf[num - m - 1] = font % 10;
font = font / 10;
}
}
/*********************************************************************
** 函数名称: Account_rate(Uint32 T_Data1, Uint32 T_Data2, Uint32 T_Data3)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:
1、 计算比列
************************************************************/
void Account_resistance(Uint32 Data1)
{
Uchar8 m;
if(Data1 != 0xffffffff)
{
if(Data1 > 0xee6b2800)
{
Disp_buf[0] = 68; //显示">"
Disp_buf[1] = CHAR_4;
for(m = 2; m < 8; m++)
{
Disp_buf[m] = CHAR_0;
}
Disp_buf[5] = 64; //显示"."
Disp_buf[7] = 65; //显示" "
}
else if(Data1 > 999999999) //千欧
{
Account_num(10, Data1);
Disp_buf[0] = num_buf[0]; //移位数据
Disp_buf[1] = num_buf[1]; //移位数据
Disp_buf[2] = num_buf[2]; //移位数据
Disp_buf[3] = num_buf[3]; //移位数据
Disp_buf[4] = 64; //显示". "
Disp_buf[5] = num_buf[4]; //移位数据
Disp_buf[6] = num_buf[5]; //移位数据
Disp_buf[7] = 65; //显示" "
}
else if(Data1 > 99999999) //百欧
{
Account_num(9, Data1);
Disp_buf[0] = num_buf[0]; //移位数据
Disp_buf[1] = num_buf[1]; //移位数据
Disp_buf[2] = num_buf[2]; //移位数据
Disp_buf[3] = 64; //显示". "
Disp_buf[4] = num_buf[3]; //移位数据
Disp_buf[5] = num_buf[4]; //移位数据
Disp_buf[6] = num_buf[5]; //移位数据
Disp_buf[7] = 65; //显示" "
}
else if(Data1 > 9999999) //十欧
{
Account_num(8, Data1);
Disp_buf[0] = num_buf[0]; //移位数据
Disp_buf[1] = num_buf[1]; //移位数据
Disp_buf[2] = 64; //显示". "
Disp_buf[3] = num_buf[2]; //移位数据
Disp_buf[4] = num_buf[3]; //移位数据
Disp_buf[5] = num_buf[4]; //移位数据
Disp_buf[6] = num_buf[5]; //移位数据
Disp_buf[7] = 65; //显示" "
}
else if(Data1 > 999999) //欧
{
Account_num(7, Data1);
Disp_buf[0] = num_buf[0]; //移位数据
Disp_buf[1] = 64; //显示". "
Disp_buf[2] = num_buf[1]; //移位数据
Disp_buf[3] = num_buf[2]; //移位数据
Disp_buf[4] = num_buf[3]; //移位数据
Disp_buf[5] = num_buf[4]; //移位数据
Disp_buf[6] = num_buf[5]; //移位数据
Disp_buf[7] = 65; //显示" "
}
else if(Data1 > 99999) //百毫欧
{
Account_num(6, Data1);
Disp_buf[0] = num_buf[0]; //移位数据
Disp_buf[1] = num_buf[1]; //移位数据
Disp_buf[2] = num_buf[2]; //移位数据
Disp_buf[3] = 64; //显示". "
Disp_buf[4] = num_buf[3]; //移位数据
Disp_buf[5] = num_buf[4]; //移位数据
Disp_buf[6] = num_buf[5]; //移位数据
Disp_buf[7] = CHAR_m; //显示"m "
}
else if(Data1 > 9999) //十毫欧
{
Account_num(5, Data1);
Disp_buf[0] = 65; //显示" "
Disp_buf[1] = num_buf[0]; //移位数据
Disp_buf[2] = num_buf[1]; //移位数据
Disp_buf[3] = 64; //显示". "
Disp_buf[4] = num_buf[2]; //移位数据
Disp_buf[5] = num_buf[3]; //移位数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -