?? lcdm_hd61202_128d64.lib
字號:
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置讀/寫選擇為L */
if (WC_CSNum == LCDM_CS1)
{
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片選1為H */
}
if (WC_CSNum == LCDM_CS2)
{
LCDM_CS1_PORT |= LCDM_CS2_PINNum; /* 置片選2為H */
}
LCDM_DATA_PORT = WriteCode; /* 將控制指令代碼輸出到的數據端口 */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信號為L */
// delay_us(2); /* 延時2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信號為H */
// delay_us(2); /* 延時2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信號為L */
LCDM_CS1_PORT &= ~LCDM_CS1_PINNum; /* 置片選1為L */
LCDM_CS2_PORT &= ~LCDM_CS2_PINNum; /* 置片選2為L */
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于向液晶模塊寫入顯示數據。
函數入口參數:WriteData ------ 向液晶模塊寫入的顯示數據 。
WD_CSNum ------- 片選數值,僅取值 LCDM_CS1 或 LCDM_CS2 中的一個。
----------------------------------------------------------------------------*/
void LCDM_WriteData(Uchar8 WriteData, Uchar8 WD_CSNum)
{
#ifdef LCDM_DI_RW_EN_PinShare /* "LCDM_DI_RW_EN_PinShare" 條件編譯開始 */
LCDM_DI_DDR |= LCDM_DI_PINNum; /* 設置液晶的寄存器選擇控制端口為輸出引腳 */
LCDM_RW_DDR |= LCDM_RW_PINNum; /* 設置液晶的讀/寫選擇控制端口為輸出引腳 */
LCDM_EN_DDR |= LCDM_EN_PINNum; /* 設置液晶的使能信號控制端口為輸出引腳 */
#endif /* "LCDM_DI_RW_EN_PinShare" 條件編譯結束 */
LCDM_DATA_DDR = 0xFF; /* 設置液晶模塊的數據端口為輸出引腳 */
LCDM_DI_PORT |= LCDM_DI_PINNum; /* 置寄存器選擇為H */
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置讀/寫選擇為L */
if (WD_CSNum == LCDM_CS1)
{
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片選1為H */
}
if (WD_CSNum == LCDM_CS2)
{
LCDM_CS1_PORT |= LCDM_CS2_PINNum; /* 置片選2為H */
}
LCDM_DATA_PORT = WriteData; /* 將顯示數據輸出到的數據端口 */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信號為L */
// delay_us(2); /* 延時2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信號為H */
// delay_us(2); /* 延時2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信號為L */
LCDM_CS1_PORT &= ~LCDM_CS1_PINNum; /* 置片選1為L */
LCDM_CS2_PORT &= ~LCDM_CS2_PINNum; /* 置片選2為L */
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于在液晶屏幕上在指定坐標位置(x,y)顯示單個點陣字符的操作。
函數入口參數:x ----------------- X軸坐標,其數值范圍:x ≤63。
y ----------------- Y軸坐標,其數值范圍:y ≤7。
*pdc_address ------ 顯示字符點陣數據存儲地址,即指向存儲點陣數據的指針。
dc_row_num -------- 顯示字符行點數,其數值范圍:x ≤127。
dc_column_num ----- 顯示字符列點數,其數值范圍:x ≤63。
備注: ①.參數 y(Y軸坐標)的數值范圍:y ≤7。
②.在移植程序時,請注意 *pdc_address 參數前的 flash 關鍵字,此關鍵字
為 CodeVision AVR C 所擴充,在移植時要做相應修改。
----------------------------------------------------------------------------*/
void LCDM_Display_Character(Uchar8 x, /* X軸坐標 */
Uchar8 y, /* Y軸坐標 */
const Uchar8 flash *pdc_address, /* 字符點陣數據存儲地址 */
const Uchar8 dc_row_num, /* 顯示字符行點數 */
const Uchar8 dc_column_num) /* 顯示字符列點數 */
{
register Uchar8 i_counter; /* 行循環計數器變量 */
register Uchar8 j_counter; /* 列循環計數器變量 */
register Uchar8 temp; /* 臨時寄存器變量 */
register Uchar8 temp_data; /* 臨時數據寄存器變量 */
LCDM_Display(ON); /* 打開液晶顯示屏幕 */
LCDM_SetStartLine(0); /* 設置顯示開始行為第一行 */
j_counter = dc_column_num/LCDM_DataBits; /* 列循環次數=字符列點數÷字符位長 */
temp = x + dc_row_num; /* 字符行寬范圍=X軸坐標+顯示字符行點數 */
if (temp < LCDM_MaxRowDot) /* 字符行寬范圍是否全部在芯片1內? */
{
x = x + LCDM_Yaddress_1; /* 設置X軸坐標 */
LCDM_WriteCode(x, LCDM_CS1);
y = y + LCDM_DataPage_1; /* 設置Y軸坐標 */
LCDM_WriteCode(y, LCDM_CS1);
while (j_counter>0)
{
for (i_counter=dc_row_num; i_counter>0; i_counter--)
/* 行循環次數=字符行點數 */
{
temp_data = *(pdc_address++); /* 輸入顯示字符點陣數據 */
LCDM_WriteData(temp_data, LCDM_CS1); /* 將顯示字符點陣數據寫入液晶顯示屏幕 */
}
LCDM_WriteCode(x, LCDM_CS1); /* X軸坐標退回到設置點 */
y = y + 1; /* 顯示頁數(Y軸坐標)+1 */
LCDM_WriteCode(y, LCDM_CS1);
j_counter--;
}
}
else /* 否則字符行寬范圍即在芯片2和芯片1之間 */
{
if (x >= LCDM_MaxRowDot) /* 字符行寬范圍是否全部在芯片2內? */
{
x = x - LCDM_MaxRowDot; /* X軸坐標=X軸坐標-芯片1的最大行點陣數 */
x = x + LCDM_Yaddress_1; /* 設置X軸坐標 */
LCDM_WriteCode(x, LCDM_CS2);
y = y + LCDM_DataPage_1; /* 設置Y軸坐標 */
LCDM_WriteCode(y, LCDM_CS2);
while (j_counter>0)
{
for (i_counter=dc_row_num; i_counter>0; i_counter--)
/* 行循環次數=字符行點數 */
{
temp_data = *(pdc_address++); /* 輸入顯示字符點陣數據 */
LCDM_WriteData(temp_data, LCDM_CS2); /* 將顯示字符點陣數據寫入液晶顯示屏幕 */
}
LCDM_WriteCode(x, LCDM_CS2); /* X軸坐標退回到設置點 */
y = y + 1; /* 顯示頁數(Y軸坐標)+1 */
LCDM_WriteCode(y, LCDM_CS2);
j_counter--;
}
}
else
{
temp = x + LCDM_Yaddress_1; /* 設置X軸坐標 */
LCDM_WriteCode(temp, LCDM_CS1);
y = y + LCDM_DataPage_1; /* 設置Y軸坐標 */
LCDM_WriteCode(y, LCDM_CS1);
while (j_counter>0)
{
for (i_counter=(LCDM_MaxRowDot-x); i_counter>0; i_counter--)
/* 芯片1行循環次數=芯片1的最大行點陣數-X軸坐標 */
{
temp_data = *(pdc_address++); /* 輸入顯示字符點陣數據 */
LCDM_WriteData(temp_data, LCDM_CS1); /* 將顯示字符點陣數據寫入液晶顯示屏幕 */
}
temp = 0 + LCDM_Yaddress_1; /* 設置芯片2的X軸坐標為起點 */
LCDM_WriteCode(temp, LCDM_CS2);
LCDM_WriteCode(y, LCDM_CS2); /* 設置芯片2的Y軸坐標 */
for (i_counter=(x + dc_row_num - LCDM_MaxRowDot); i_counter>0; i_counter--)
/* 芯片2行循環次數=X軸坐標+顯示字符行點數-芯片1的最大行點陣數 */
{
temp_data = *(pdc_address++); /* 輸入顯示字符點陣數據 */
LCDM_WriteData(temp_data, LCDM_CS2); /* 將顯示字符點陣數據寫入液晶顯示屏幕 */
}
temp = x + LCDM_Yaddress_1; /* 芯片1的X軸坐標退回到設置點 */
LCDM_WriteCode(temp, LCDM_CS1);
y = y + 1; /* 顯示頁數(Y軸坐標)+1 */
LCDM_WriteCode(y, LCDM_CS1);
j_counter--;
}
}
}
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于在液晶屏幕上全屏幕填充單一字符數據的操作。
函數入口參數:all_data ------------ 填充的字符數據,例:清屏操作的字符數據可能為 0x00 。
max_row_num --------- 最大行點數值,為63。
max_column_num ------ 最大列點數值,為63。
備注: 對于片選數值的定義必須從 1 到 n 連續排列,如下所示 1,2,3,……,n-1,n 。
----------------------------------------------------------------------------*/
void LCDM_AllScreenData(const Uchar8 all_data, /* 填充的字符數據 */
const Uchar8 max_row_num, /* 最大行點數 */
const Uchar8 max_column_num) /* 最大列點數 */
{
register Uchar8 i_counter; /* 行循環計數器變量 */
register Uchar8 j_counter; /* 列循環計數器變量 */
register Uchar8 temp; /* 臨時寄存器變量 */
register Uchar8 DC_CSNum; /* 片選數值變量,取 LCDM_CS1 或 LCDM_CS2 中的一個 */
LCDM_Display(ON); /* 打開液晶顯示屏幕 */
LCDM_SetStartLine(0); /* 設置顯示開始行為第一行 */
for (DC_CSNum=1; DC_CSNum<=LCDM_CS2; DC_CSNum++)
/* 片選循環次數=最大列片選數值 */
{
LCDM_WriteCode(LCDM_Yaddress_1, DC_CSNum); /* 設置X軸坐標為起點 */
temp = 0x00;
temp = temp + LCDM_DataPage_1; /* 設置Y軸坐標為起點 */
LCDM_WriteCode(LCDM_DataPage_1, DC_CSNum);
for (j_counter=(max_column_num/LCDM_DataBits); j_counter>0; j_counter--)
/* 列循環次數=最大列點數÷字符位長 */
{
for (i_counter=max_row_num; i_counter>0; i_counter--)
/* 行循環次數=最大行點數 */
{
LCDM_WriteData(all_data, DC_CSNum); /* 將填充的字符數據寫入液晶顯示屏幕 */
}
LCDM_WriteCode(LCDM_Yaddress_1, DC_CSNum); /* X軸坐標退回到起點 */
temp = temp + 1; /* 顯示頁數(Y軸坐標)+1 */
LCDM_WriteCode(temp, DC_CSNum);
}
}
}
/*
****************************************************************************************
本C語言源程序文件到此結束
****************************************************************************************
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -