?? 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 + -