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

📄 lcd.h

📁 C8051F020的PWM程序FYD12864显示
💻 H
字号:


#include "020_Function.h"

#define LCD_Data P4
sbit    LCD_RS      =P2^0;
sbit    LCD_WR      =P2^1;
sbit    LCD_E       =P2^2;

/*
返回值Status:   当前地址计数器的值.
*/

unsigned char LCDBusyWait()                     	//等待LCD就绪
{
    unsigned char Status;
    LCD_RS=0;
    LCD_WR=1;
    LCD_Data=0xFF;
    LCD_E=1;
    Status=LCD_Data;
    LCD_E=0;
    while(Status & 0x80)
    {
        LCD_E=1;
        Status=LCD_Data;
        LCD_E=0;
    }
    LCD_WR=0;
    return Status;
}

void WriteLCD_Data(unsigned char Data)          //向LCD写入一个字节的数据
{
    LCDBusyWait();
    LCD_RS=1;
    LCD_Data = Data;
    LCD_E=1;
    LCD_E=0;
}

void WriteLCD_Command(unsigned char Command)    //向LCD写入一个字节的命令
{
    LCDBusyWait();
    LCD_RS=0;
    LCD_Data=Command;
    LCD_E=1;
    LCD_E=0;
}

/*****************************改变地址,实现了逐行显示*************************/
unsigned char ChangeAddress(unsigned char StartAddress)
{
    switch(StartAddress)
    {
        case 0x87:WriteLCD_Command(0x90);StartAddress=0x90;break;
        case 0x8F:WriteLCD_Command(0x98);StartAddress=0x98;break;
        case 0x97:WriteLCD_Command(0x88);StartAddress=0x88;break;
        default:StartAddress+=1;
    }
    return StartAddress;
}

/*
WriteLCD 从LCD输出一个字符串:
    StartAddress为起始地址;
    Size为字符串大小;
    Size==0 时由程序自己判断字符串结束标志,否则输出 Size 个字符,不够则填充空格;
    Charactors为要求输出的字符串;
*/
void WriteLCD(unsigned char StartAddress,unsigned char Size,unsigned char Charactors[])
{
    unsigned char *i=Charactors;      //字符串的首地址
    WriteLCD_Command(StartAddress);
    if(Size)        //Size不为0
    {
        bit Over=0;
        while(i<(Charactors+Size))      //判断字符串结尾
    	{
            if(Over)
    		{
                WriteLCD_Data(' ');i++;
                if(i>=(Charactors+Size)) break;
                WriteLCD_Data(' ');i++;
    		}
        	else
    		{

                switch(((*i)*256)+(*(i+1)))
        		{

        		}
    		}
            StartAddress=ChangeAddress(StartAddress); //改变地址,实现了逐行显示
    	}
    }
    else                                            //Size为0
    {
        while(*i)                                 //判断字符串结尾,*i为0代表结束
    	{
            WriteLCD_Data(*i);
        	i++;
            WriteLCD_Data(*i);
        	i++;
            StartAddress=ChangeAddress(StartAddress);
    	}
    }
}


/**********************功能:写入数字Number, Number为0-99的两位数字********************/
void WriteLCD_Number(unsigned char Address,unsigned char Number)
{
    if(Address) WriteLCD_Command(Address); //如果地址为0则自动接着原来的位置写. 否则按指定地址写
    if((Number/10)!=0)
    WriteLCD_Data((Number/10)+0x30);       //取商,取出十位数字
    WriteLCD_Data((Number%10)+0x30);       //取余,取出个位数字
}


/******************************功能:显示ASSIC码****************************/
void WriteLCD_CharNumber(unsigned char Address,unsigned char CharNumber)
{    
    if(Address) 
    WriteLCD_Command(Address);       //如果地址为0则自动接着原来的位置写.   否则按指定地址写
    WriteLCD_Data(CharNumber);
}

  
/*******************************功能:显示多位数据****************************  */
void WriteLCD_HalfCharNumber(unsigned char Address,unsigned long HalfCharNumber)
   { 
     unsigned char Buffer[8];
     unsigned char j;
     unsigned char i=0;
     if(Address) 
     WriteLCD_Command(Address);
     do
     {
       Buffer[i++]=HalfCharNumber%10;         //对每一位进行存储
       HalfCharNumber=HalfCharNumber/10;
     }while(HalfCharNumber!=0);
     for(j=i;j>0;j--)
       WriteLCD_Number(0x00,Buffer[j-1]);
    }
 
 
/************************功能:小数显示.精确到小数点后面四位**********************/
void  WriteLCD_FloatNumber(unsigned char Address,unsigned long Float_Number)
  {
     static unsigned char Buffer[6];
     unsigned char i=0;
     if(Address) 
     WriteLCD_Command(Address);
     do
     {
       Buffer[i++]=Float_Number%10;       //对每一位进行逆序存储
       Float_Number=Float_Number/10;
     }while(Float_Number!=0);
      
     if(6==i)
       { 	
         WriteLCD_Number(0x00,Buffer[i-1]);   //显示整数
         WriteLCD_Number(0x00,Buffer[i-2]);   //显示整数	
         WriteLCD_CharNumber(0x00,0x2E);       //小数点显示
       for(i=i-2;i>0;i--)
          { 
            WriteLCD_Number(0x00,Buffer[i-1]);   //显示整数		   
          }
       }
       
     if(5==i)
       { 	
         WriteLCD_Number(0x00,Buffer[i-1]);   //显示整数		
         WriteLCD_CharNumber(0x00,0x2E);       //小数点显示
         for(i=i-1;i>0;i--)
          { 
            WriteLCD_Number(0x00,Buffer[i-1]);   //显示整数		   
          }
       }
     if(4==i)
       {
        WriteLCD_CharNumber(0x00,0x30);         //显示零
        WriteLCD_CharNumber(0x00,0x2E);        //小数点显示
         for(i=i;i>0;i--)
        WriteLCD_Number(0x00,Buffer[i-1]);    //显示整数
       }
   }

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -