標題: LCD1602模塊化代碼,超級方便,以后再不用打那么長的代碼LCD1602.c和LCD1602.h [打印本頁]

作者: 洛倫茲力量    時間: 2021-7-12 09:40
標題: LCD1602模塊化代碼,超級方便,以后再不用打那么長的代碼LCD1602.c和LCD1602.h
主要內容顯示如下:
模塊化LCD1602.c和LCD1602.h如下文件

#include <REGX52.H>

sbit LCD_RW=P2^5;  
sbit LCD_RS=P2^6;//1為數據,0為指令
sbit LCD_E=P2^7;

#define LCD_DataPort P0

void Delay(unsigned char xms)
{
        unsigned char i=2,j=199;
        while(xms--)
        {
                do
                {
                        while(--j);
                }while(--i);
        }
}

void LCD_WriteCommand(unsigned char Command)
{
        LCD_RS=0;
        LCD_RW=0;
        
        LCD_DataPort=Command;
        
        LCD_E=1;
        Delay(1);
        
        LCD_E=0;
        Delay(1);
}

void LCD_WriteData(unsigned char Data)
{
        
        LCD_RS=1;
        LCD_RW=0;
        
        LCD_DataPort=Data;
        
        LCD_E=1;
        Delay(1);
        
        LCD_E=0;
        Delay(1);
}

void LCD_Init(void)
{
        LCD_WriteCommand(0x38);
        LCD_WriteCommand(0x0C);
        LCD_WriteCommand(0x06);
        LCD_WriteCommand(0x01);
}

void LCD_SetAC(unsigned char Line,unsigned char Column)
{
        LCD_WriteCommand(0x80);
        if(Line==1)
        {
                LCD_WriteCommand(0x80|(Column-1));
        }
        else if(Line==2)
        {
                LCD_WriteCommand(0x80|(Column-1)+0x40);
        }
}

void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{
        LCD_SetAC(Line,Column);
        LCD_WriteData(Char);
}

void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)
{
        LCD_SetAC(Line,Column);
        while(1)
        {
                if(*String!='\0'){LCD_WriteData(*String);}
                else{break;}
                String++;
        }
}
int Power(unsigned char X,unsigned char 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,int Number,unsigned char Length)
{
        unsigned char i;
        LCD_SetAC(Line,Column);
        for(i=Length;i>0;i--)
        {
                LCD_WriteData('0'+Number/Power(10,i-1)%10);
        }
}
void LCD_ShowsignedNum(unsigned char Line,unsigned char Column,int Num1,unsigned char Length)
{
        int Number1;
        unsigned char i;
        LCD_SetAC(Line,Column);
        if(Num1>0)
        {
                LCD_WriteData('+');
                Number1=Num1;
        }
        else if(Num1<0)
        {
                LCD_WriteData('-');
                Number1=-Num1;
        }
        for(i=Length;i>0;i--)
        {
                LCD_WriteData('0'+Number1/Power(10,i-1)%10);
        }
}


void main()
{
                LCD_Init();
                LCD_ShowChar(1,1,'A');
                LCD_ShowString(1,3,"Hello");
                LCD_ShowNum(1,9,66,2);
                LCD_ShowsignedNum(1,12,-88,2);
                while(1)
                {
                        
                }
}

LCD.rar

25.4 KB, 下載次數: 74, 下載積分: 黑幣 -5

LCD1602模塊化


作者: 1233xdtf    時間: 2023-12-30 14:50
為什么沒有檢測BF是否處于忙標識呢
作者: ESJIAN    時間: 2024-3-14 23:28
怪了,俺的lcd函數為什么不能用




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1