⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 A7102-433.rar
💻 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 + -