#include <REGX52.H>

sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
#define LCD_DatePort P0

void LCD_Delay(unsigned int x)    //@12.000MHz
{
    unsigned char data i, j;
    while(x){
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        x--;
    }
}
void LCD_WriteCommand(unsigned char Command){
    LCD_RS=0;
    LCD_RW=0;
    LCD_DatePort=Command;
    LCD_E=1;
    LCD_Delay(1);
    LCD_E=0;
    LCD_Delay(1);
}
void LCD_WriteDate(unsigned char Date){
    LCD_RS=1;
    LCD_RW=0;
    LCD_DatePort=Date;
    LCD_E=1;
    LCD_Delay(1);
    LCD_E=0;
    LCD_Delay(1);
}
void LCD_Init(void){
    LCD_WriteCommand(0x38);
    LCD_WriteCommand(0x0C);
    LCD_WriteCommand(0x06);
    LCD_WriteCommand(0x01);
}
void LCD_SetCursor(unsigned char Line,unsigned char Column){
    if(Line==1){
        LCD_WriteCommand(0x80|(Column-1));
    }else{
        LCD_WriteCommand(0x80|(Column-1)+0x40);
    }
}
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char){
    LCD_SetCursor(Line,Column);
    LCD_WriteDate(Char);
}
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String){
    unsigned char i;
    LCD_SetCursor(Line,Column);
    for(i=0;String[i]!='\0';i++){
        LCD_WriteDate(String[i]);
    }
}
int LCD_Pow(int x,int y){
    unsigned char i;
    int result=1;
    for(i=0;i<y;i++){
        result*=x;
    }
    return result;
}
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){
    unsigned char i;
    LCD_SetCursor(Line,Column);
    for(i=Length;i>0;i--){
        LCD_WriteDate(0x30+Number/LCD_Pow(10,i-1)%10);
    }    
}
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length){
    unsigned int number;
    unsigned char i;
    LCD_SetCursor(Line,Column);
    if(Number>=0){
        LCD_WriteDate('+');
        number=Number;
    }else{
        LCD_WriteDate('-');
        number=-Number;
    }
    for(i=Length;i>0;i--){
        LCD_WriteDate(0x30+Number/LCD_Pow(10,i-1)%10);
    }
}
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){
    unsigned char i;
    unsigned char singlenumber;
    LCD_SetCursor(Line,Column);
    for(i=Length;i>0;i--){
        singlenumber=Number/LCD_Pow(16,i-1)%16;
        if(singlenumber<10){
            LCD_WriteDate('0'+singlenumber);
        }else{
            LCD_WriteDate('A'+singlenumber-10);
        }
    }
}
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){
    unsigned char i;
    LCD_SetCursor(Line,Column);
    for(i=Length;i>0;i--){
        LCD_WriteDate(0x30+Number/LCD_Pow(2,i-1)%2);
    }    
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐