?? lcd.c
字號:
// LCD型號:TC802B
// P0為數據口線
#include "../header/lcd.h"
/***********************************************
函 數: InitLcdMouble
功 能: 初始化TCB802B所有內部寄存器
輸 入: /
輸 出: /
描 述: /
***********************************************/
void InitLcdMouble(void)
{
WriteLcdCmd(0x01); // 清屏命令
Delay(3); // 延時3ms
WriteLcdCmd(0x38); // 8位數據接口,兩行5x7點顯示
Delay(3); // 延時3ms
WriteLcdCmd(0x06); // 地址從左至右,自動加1
Delay(3); // 延時3ms
WriteLcdCmd(0x0c); // 開顯示,光標關閉,無閃爍
LcdDclear();
LcdDisplay(&logo,0x10);
}
/***********************************************
函 數: WriteLcdCmd
功 能: 寫TCB802B一個內部寄存器
輸 入: CmdValue
輸 出: /
描 述: /
***********************************************/
void WriteLcdCmd(uchar CmdValue)
{
LCD_Rs = false; // 選擇指令寄存器
LCD_Rw = false; // 選擇寫使能
LCD_En = true;
Delay(1); // 延時1ms
P0 = CmdValue;
Delay(1); // 延時1ms
LCD_En = false; // 下降沿觸發鎖定
LCD_Rw = true; // 恢復默認讀使能
LCD_Rs = true; // 恢復默認數據寄存器
}
/***********************************************
函 數: WriteLcdData
功 能: 寫TCB802B一個顯示數據
輸 入: DataValue
輸 出: /
描 述: /
***********************************************/
void WriteLcdData(uchar DataValue)
{
LCD_Rw = false; // 選擇寫使能
Delay(1); // 延時1ms
LCD_En = true;
Delay(1); // 延時1ms
P0 = DataValue;
Delay(1); // 延時1ms
LCD_En = false; // 下降沿觸發鎖定
LCD_Rw = true; // 恢復默認讀使能
}
/***********************************************
函 數: Lcd_Display_Hex()
功 能: 顯示十六進制數據在LCD上
輸 入: /
輸 出: /
描 述: /
***********************************************/
void Lcd_Display_Hex(uchar hex)
{
uchar temp;
temp = hex;
temp >>= 0x04;
/* 以下程序為把十六進制數據換為LCD顯示的字模 */
if((temp&0x0f) >= 0x0a)
WriteLcdData((temp&0x0f)+0x37);
else
WriteLcdData((temp&0x0f)+0x30);
if((hex&0x0f) >= 0x0a)
WriteLcdData((hex&0x0f)+0x37);
else
WriteLcdData((hex&0x0f)+0x30);
}
/***********************************************
函 數: LcdDisplay
功 能: 顯示緩沖區數據
輸 入: buffer,number
輸 出: /
描 述: 從LCD第一個位置開始顯示number個數據
***********************************************/
void LcdDisplay(uchar *buffer,uchar number)
{
uchar i;
uchar temp;
WriteLcdCmd(0x08); //關顯示,光標關閉,無閃爍
Delay(3); // 延時3ms
if(number>0x08)
{
temp = number - 0x08;
WriteLcdCmd(0x80); // 設置DDRAM地址第一行
Delay(3); // 延時3ms
for(i=0x00;i<0x08;i++)
{
WriteLcdData(*buffer);
buffer ++;
}
Delay(3); // 延時3ms
WriteLcdCmd(0xc0); // 設置DDRAM地址第二行
Delay(3); // 延時3ms
for(i=0x00;i<temp;i++)
{
WriteLcdData(*buffer);
buffer ++;
}
}
else
{
WriteLcdCmd(0x80); // 設置DDRAM地址第一行
Delay(3); // 延時3ms
for(i=0x00;i<number;i++)
{
WriteLcdData(*buffer);
buffer ++;
}
}
WriteLcdCmd(0x0c); // 開顯示,光標關閉,無閃爍
}
/***********************************************
函 數: Lcd_Display_Character
功 能: 顯示一個字符
輸 入: /
輸 出: /
描 述: /
***********************************************/
void Lcd_Display_Character(uchar character)
{
WriteLcdData(character);
}
/***********************************************
函 數: LcdDclear
功 能: 清除緩沖區數據
輸 入: /
輸 出: /
描 述: /
***********************************************/
void LcdDclear(void)
{
uchar i;
WriteLcdCmd(0x08); // 關顯示,光標關閉,無閃爍
Delay(3); // 延時3ms
WriteLcdCmd(0x80); // 設置DDRAM地址第一行
Delay(3); // 延時3ms
for(i=0x00;i<0x08;i++)
{
WriteLcdData(0x20);
}
Delay(3); // 延時3ms
WriteLcdCmd(0xc0); // 設置DDRAM地址第二行
Delay(3); // 延時3ms
for(i=0x00;i<0x08;i++)
{
WriteLcdData(0x20);
}
WriteLcdCmd(0x0c); // 開顯示,光標關閉,無閃爍
}
/***********************************************
函 數: Delay
功 能: 延時X(0x00-0xff)毫秒
輸 入: X
輸 出: /
描 述: 誤差1ms,要求有定時器定時1ms,使用全局變量Time_count
***********************************************/
void Delay(uchar X)
{
Time_Count = X;
while(Time_Count)
{
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -