📄 lpc21_lcd.c
字号:
** 功能描述:
1、 画右竖数
************************************************************/
void LCD_Write_ROW_Right(Ushort16 x_start, Ushort16 y_start, Ushort16 legth)
{
Ushort16 temp_row, j, p, m;
temp_row = ROW;
if((legth + y_start) > 320) //防止数据溢出
{
legth = legth - ((legth + y_start) - 240);
}
for(m = 0; m < (legth / 8); m++) //画右竖线
{
j= temp_row * ((m * 8) + y_start) + (x_start / 8);
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(p = 0; p < 8; p++)
{
LCD_WriteData(0x01); //写入合成数据
}
j++;
}
if((legth / 8) != 0)
{
j= temp_row * ((m * 8) + y_start) + (x_start / 8);
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(p = 0; p < (legth % 8); p++)
{
LCD_WriteData(0x01); //写入合成数据
}
}
}
/*********************************************************************************************************
** 函数名称:void LCD_Write_rectangle(Ushort16 x_start,Ushort16 y_start, Ushort16 x_end,Ushort16 y_end)
** 输 入: x坐标(<320),Y坐标(<240), 对头坐标
** 输 出:
** 全局变量: ROW
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:
1、 画矩形
************************************************************/
void LCD_Write_rectangle(Ushort16 x_start,Ushort16 y_start, Ushort16 x_end,Ushort16 y_end)
{
Ushort16 x_num, y_num;
x_num = x_end - x_start;
y_num = y_end - y_start;
if(y_num != 0) //画直线
{
LCD_Write_ROW_Left(x_start, y_start, y_num); //画左竖线
LCD_Write_ROW_Right((((x_end / 8) - 1) * 8), y_start, y_num); //画右竖线
}
if(x_num != 0) //画横线
{
LCD_Write_Line(x_start, y_start, x_num); //画上横线
LCD_Write_Line(x_start, (y_end - 1), x_num); //画上横线
}
}
/*********************************************************************************************************
** 函数名称: void LCD_CLR(void)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:清屏
********************************************************************************************************/
void LCD_CLR(void)
{
Ushort16 j;
Uchar8 i;
LCD_WriteCMD(CSRDIR_RIGHT); //CSRDIR_RIGHT = 0x4c 令规定了光标地址指针自动移动的方向
LCD_WriteCMD(CSRW); //CSRW = 0x46 /令设置了光标地址CSR
LCD_WriteData(0x00); //设置参数光标指针低8位
LCD_WriteData(0x00); //设置参数光标指针高8位
LCD_WriteCMD(MWRTTE); //MWRTTE = 0x42 指令允许MPU连续地把显示数据写入显示区内,在使用指令之前要首先设置好光标地址和光标移动方向的参数
for(j = 0; j < 2195; j++) //清64K的显示存储器*/
{
for(i = 0;i < 30; i++) /*写入一行*/
{
LCD_WriteData(0x00); /* 写入数据 */
}
}
}
/*********************************************************************************************************
** 函数名称:void LCD_Init(void)
** 输 入: 无
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 液晶初始化
********************************************************************************************************/
void LCD_Init(void)
{
Uchar8 p;
PINSEL0 &= LCD_CS_A0; //引脚定义为I/O口
PINSEL1 &= LCD_WR_RD; //引脚定义为I/O口
PINSEL2 = 0x00000004; //P1口的P1[31:26]用作调试端口,P1[25:16]用作I/0口
#ifdef LPC2148
SCS = 0x03; //选择快速I/0口
FIO0MASK = 0; //不屏蔽P1口
FIO1MASK = 0; //不屏蔽P1口
FIO1DIR2 = 0xff; //引脚为输出
FIO0DIR |= LCD_CTRL; //设置LCD控制引脚为输出
FIO1DIR |= LCD245_dir; //控制245的引脚为输出脚
FIO0SET |= LCD_CTRL; //输出设置LCD控制引脚为输出
#else
IO1DIR |= 0x00ff0000; //设置引脚为输出
IO0DIR |= LCD_CTRL; //设置LCD控制引脚为输出
IO0SET |= LCD_CTRL; //输出设置LCD控制引脚为输出
IO1DIR |= LCD245_dir;
#endif
LCD_WriteCMD(SYSTEMSET); //SYSTEMSET = 0x40 该指令是SID13305软件初始化指令
for(p = 0; p < 8; p++)
{
LCD_WriteData(SYSTEMSET_code[p]);
}
LCD_WriteCMD(SCROLL); //SCROLL = 0x44 设置了显示RAM区中各显示区的起始地址及所占有的显示行数
for(p = 0; p < 10; p++)
{
LCD_WriteData(SCRTAB_code[p]);
}
LCD_WriteCMD(HDOTSET); //HDOTSET = 0x5a 设置以点为单位的显示画面水平移动量,相当于一个字节内的卷动
LCD_WriteData(0x00);
LCD_WriteCMD(OYLAY); //OYLAY = 0x5b 令规定画面重叠显示的合成方式及显示一、三区的显示属性
// LCD_WriteData(0x01); //文本方式,或显示一三区
LCD_WriteData(0x0d); //图行方式,异或显示一三区
LCD_WriteCMD(CSRW); //CSRW = 0x46 /令设置了光标地址CSR
LCD_WriteData(0x00); //设置参数光标指针低8位
LCD_WriteData(0x00); //设置参数光标指针高8位
LCD_WriteCMD(DISP_ON); //DISP_ON = 0x59 开(59H)/关(58H)显示
LCD_WriteData(0x54); //设置参数:显示一~四区开显示
LCD_CLR(); //清屏
}
/*********************************************************************************************************
** 函数名称:void WR_Date_16(Uchar8 *Date_time)
** 输 入: 无
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 写日期
typedef struct{ //时间的结构体
Ushort16 YE;
Uchar8 MO;
Uchar8 DD;
Uchar8 HH;
Uchar8 MI;
Uchar8 SS;
}Str_Date;
********************************************************************************************************/
void WR_Date_16(Uchar8 *Date_time)
{
Uchar8 temp_x, temp_y, m;
Ushort16 temp_year;
Uchar8 temp_month, temp_day, temp_hour, temp_minute, temp_second;
Uchar8 temp_time[19];
m = *Date_time;
Date_time++;
temp_year = *Date_time;
temp_year = temp_year << 8;
temp_year |= m;
Date_time++;
temp_month = *Date_time;
Date_time++;
temp_day = *Date_time;
Date_time++;
temp_hour = *Date_time;
Date_time++;
temp_minute = *Date_time;
Date_time++;
temp_second = *Date_time;
temp_time[0] = temp_year / 1000;
temp_year = temp_year % 1000;
temp_time[1] = temp_year / 100;
temp_year = temp_year % 100;
temp_time[2] = temp_year / 10;
temp_time[3] = temp_year % 10;
temp_time[4] = 11;
temp_time[5] = (temp_month / 10) & 0x01; //防止月份溢出
temp_time[6] = temp_month % 10;
temp_time[7] = 11;
temp_time[8] = (temp_day / 10) & 0x03; //防止月份溢出
temp_time[9] = temp_day % 10;
temp_time[10] = 10;
temp_time[11] = temp_hour / 10;
temp_time[12] = temp_hour % 10;
temp_time[13] = 12;
temp_time[14] = temp_minute / 10;
temp_time[15] = temp_minute % 10;
temp_time[16] = 12;
temp_time[17] = temp_second / 10;
temp_time[18] = temp_second % 10;
temp_x = Time16_addr_x;
temp_y = Time16_addr_y;
LCD_WR_char_string_16(temp_x, temp_y, 19, temp_time);
}
/*********************************************************************************************************
** 函数名称:void WR_Date_16(Uchar8 *Date_time)
** 输 入: 无
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 写日期
typedef struct{ //时间的结构体
Ushort16 YE;
Uchar8 MO;
Uchar8 DD;
Uchar8 HH;
Uchar8 MI;
Uchar8 SS;
}Str_Date;
********************************************************************************************************/
void WR_Date_8(Uchar8 *Date_time)
{
Uchar8 temp_x, temp_y, m;
Ushort16 temp_year;
Uchar8 temp_month, temp_day, temp_hour, temp_minute, temp_second;
Uchar8 temp_time[19];
m = *Date_time;
Date_time++;
temp_year = *Date_time;
temp_year = temp_year << 8;
temp_year |= m;
Date_time++;
temp_month = *Date_time;
Date_time++;
temp_day = *Date_time;
Date_time++;
temp_hour = *Date_time;
Date_time++;
temp_minute = *Date_time;
Date_time++;
temp_second = *Date_time;
temp_time[0] = temp_year / 1000;
temp_year = temp_year % 1000;
temp_time[1] = temp_year / 100;
temp_year = temp_year % 100;
temp_time[2] = temp_year / 10;
temp_time[3] = temp_year % 10;
temp_time[4] = 11;
temp_time[5] = (temp_month / 10) & 0x01; //防止月份溢出
temp_time[6] = temp_month % 10;
temp_time[7] = 11;
temp_time[8] = (temp_day / 10) & 0x03; //防止月份溢出
temp_time[9] = temp_day % 10;
temp_time[10] = 10;
temp_time[11] = temp_hour / 10;
temp_time[12] = temp_hour % 10;
temp_time[13] = 12;
temp_time[14] = temp_minute / 10;
temp_time[15] = temp_minute % 10;
temp_time[16] = 12;
temp_time[17] = temp_second / 10;
temp_time[18] = temp_second % 10;
temp_x = Time8_addr_x;
temp_y = Time8_addr_y;
LCD_WR_char_string_8(temp_x, temp_y, 19, temp_time);
}
/*********************************************************************************************************
** 函数名称:void WR_temperature_16(Ushort16 TData)
** 输 入: 无
** 输 出:
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 写温度
********************************************************************************************************/
void WR_temperature_16(Ushort16 TData)
{
Uchar8 temp_buf[8], m;
Uchar8 temp_x, temp_y;
for(m = 0; m < 5; m++)
{
temp_buf[(4 - m)] = TData % 10;
if((TData == 0) && (m > 2))
{
temp_buf[(4 - m)] = 10; //不显示
}
TData = TData / 10;
}
temp_buf[5] = temp_buf[4];
temp_buf[4] = 13;
temp_buf[6] = 15;
temp_buf[7] = 16;
temp_x = Tem16_addr_x;
temp_y = Tem16_addr_y;
LCD_WR_char_string_16(temp_x, temp_y, 8, temp_buf);
}
void WR_temperature_8(Ushort16 TData)
{
Uchar8 temp_buf[8], m;
Uchar8 temp_x, temp_y;
for(m = 0; m < 5; m++)
{
temp_buf[(4 - m)] = TData % 10;
if((TData == 0) && (m > 2))
{
temp_buf[(4 - m)] = 10; //不显示
}
TData = TData / 10;
}
temp_buf[5] = temp_buf[4];
temp_buf[4] = 13;
temp_buf[6] = 15;
temp_buf[7] = 16;
temp_x = Tem8_addr_x;
temp_y = Tem8_addr_y;
LCD_WR_char_string_8(temp_x, temp_y, 8, temp_buf);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -