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

📄 lcd.c

📁 基于ucosSAEj1939的汽车组合仪表,硬件是MC9S12H128
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <MC9S12H256.h>     /* derivative information */
#include "lcd.h"
 
void InitLcd()
{
	LCDCR0=0xb0;	//LCDEN LCLK(488) BIASW duty1/4     				
								//10		110       0     00
	FPENR0=0xff;	//FP0--FP21
	FPENR1=0xff;
	FPENR2=0x3f;
	FPENR3=0; 
}

void DisplayTotalDistance(dword DisTotalDistance) 
{
  if(DisTotalDistance>999999) 
  {
    //display "ERROR"
    DisplayError();
  }
  
  else 
  {
    if(DisTotalDistance/100000==0) {
      if(DisTotalDistance/10000==0) {
        if(DisTotalDistance/1000==0) {
          if(DisTotalDistance/100==0) {
            if(DisTotalDistance/10==0) {
              DisplayNum(9,DisTotalDistance);
            }
            else{  
              DisplayNum(9,DisTotalDistance%10);
              DisplayNum(8,DisTotalDistance/10);
            }
          }
          else{  
            DisplayNum(9,DisTotalDistance%10);
            DisplayNum(8,(DisTotalDistance%100)/10);
            DisplayNum(7,DisTotalDistance/100);
          }
        }
        else{          
          DisplayNum(9,DisTotalDistance%10);
          DisplayNum(8,(DisTotalDistance%100)/10);
          DisplayNum(7,(DisTotalDistance%1000)/100);
          DisplayNum(6,DisTotalDistance/1000);
        }
      }
      else{        
        DisplayNum(9,DisTotalDistance%10);
        DisplayNum(8,(DisTotalDistance%100)/10);
        DisplayNum(7,(DisTotalDistance%1000)/100);
        DisplayNum(6,(DisTotalDistance%10000)/1000);
        DisplayNum(5,DisTotalDistance/10000);
      }
    }
    else{      
      DisplayNum(9,DisTotalDistance%10);
      DisplayNum(8,(DisTotalDistance%100)/10);
      DisplayNum(7,(DisTotalDistance%1000)/100);
      DisplayNum(6,(DisTotalDistance%10000)/1000);
      DisplayNum(5,(DisTotalDistance%100000)/10000);
      DisplayNum(4,DisTotalDistance/100000);    
    }
  }
}

void DisplayTripDistance(dword DistanceBeforePoint, byte DistanceAfterPoint) 
{
  if(DistanceBeforePoint>999 || DistanceAfterPoint>9) 
  {
    //display "ERROR"
    DisplayErr();
  }
  else 
  {
    DisplayNum(0,DistanceAfterPoint);
    if(DistanceBeforePoint/100==0) {
      if(DistanceBeforePoint/10==0) {
        DisplayNum(1,DistanceBeforePoint);
        LCDRAM1|= 0x80;  //point
      }
      else {
        DisplayNum(1,DistanceBeforePoint%10);
        DisplayNum(2,DistanceBeforePoint/10);
        LCDRAM1|= 0x80;  //point
      }
    }
    else {
      DisplayNum(1,DistanceBeforePoint%10);
      DisplayNum(2,(DistanceBeforePoint%100)/10);
      DisplayNum(3,DistanceBeforePoint/100);
      LCDRAM1|= 0x80;  //point
    }
  }
}

void DisplayA() {
  LCDRAM10|=0x01;
}

void DisplayB() {
  LCDRAM10|=0x02;
}

void DisplaySpan() {
  LCDRAM10|=0x04;
}

void DisplayNum(byte pos, byte num) 
{
  byte *lcdram;
  
  lcdram=(volatile unsigned char*)(0x0128);
  
  switch(num) {
    
    case 0: 
      *(lcdram+pos)=0x7d;
      break;
    case 1: 
      *(lcdram+pos)=0x60;
      break;
    case 2: 
      *(lcdram+pos)=0x3e;
      break;
    case 3: 
      *(lcdram+pos)=0x7a;
      break;
    case 4: 
      *(lcdram+pos)=0x63;
      break;
    case 5: 
      *(lcdram+pos)=0x5b;
      break;
    case 6: 
      *(lcdram+pos)=0x5f;
      break;
    case 7: 
      *(lcdram+pos)=0x70;
      break;
    case 8: 
      *(lcdram+pos)=0x7f;
      break;
    case 9: 
      *(lcdram+pos)=0x7b;
      break;
  }        
}

void DisplayError() 
{
  LCDRAM5=0x1f;//E
  LCDRAM6=0x77;//R
  LCDRAM7=0x77;//R
  LCDRAM8=0x7d;//O
  LCDRAM9=0x77;//R
}

void DisplayErr() 
{
  LCDRAM2=0x1f;//E
  LCDRAM1=0x77;//R
  LCDRAM0=0x77;//R
}

void DisplayNone() 
{
  byte *lcdram;
  byte i;
  
  lcdram=(volatile unsigned char*)(0x0128);  
  
  for(i=0;i<11;i++) {
    *(lcdram+i)=0;
  }
}
    

⌨️ 快捷键说明

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