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

📄 display.c

📁 由LPC76X构成的LIN BUS节点实例 包含LIN总线的Demo程序
💻 C
字号:
 #include <Relpc764.h>
#include "linCmpSL.h"
#include "tja1020.h"
#include "seg7.h"
#include "Identifier.h"
#include "IIc\IIcDriver.h"
#include "IIc\Display\IIcDisplay.h"

//IIC-Adressen
#DEFINE IIcEepromAdr	80

extern data char IIcXmtdat;

data unsigned char i;
data unsigned char t;
data char dLED1, dLED2, dLED3, dLED4;
data char aktTemp, DispTemp, _aktTemp;
data char maxTemp, minTemp;

char data Stack[40];

sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit Keyrow1 = P0^4;
sbit Keyrow2 = P0^5;
sbit Keyrow3 = P0^6;
sbit Keyrow4 = P0^7;


data char* LinDataPtr;

data char* IIcRcvptr;
data char* IIcXmtptr;

void writeTemp();

void LinSetToSleep()
 {
  P0_0 = 1;
  P0_1 = 1;
   return;
 }
 
void LinWakeUp()
 {
   return;
 }

void LinServiceRoutine()
{
 asm{0xC0, 0xD0}; //Push PSW
 asm{0xC0, 0xE0}; //Push ACC
 asm{0xC0, 0x00}; //Push AR0
 
 if (LinError==0) 	
   {
    if (LinFrameOk)
      {
       if (LinID==0x14)
       	aktTemp=LinDataPtr[0];
      }
    else if (LinIDreceived)
      {
       if (LinID==0x10)
       	{
       	  LinDataPtr[0]=dLED1;
       	  TI=1;
       	 }
       else if (LinID==0x11)
         {
       	 LinDataPtr[0]=dLED2;
       	 TI=1;
       	}
       else if (LinID==0x12)
         {
       	 LinDataPtr[0]=dLED3;
       	 TI=1;
       	}
       else if (LinID==0x13)
         {
       	 LinDataPtr[0]=dLED4;
       	 TI=1;
       	}		
      } 
   }
  else
   {
    LinError=0;
   }
   
 asm{0xD0, 0x00}; //Push AR0  
 asm{0xD0, 0xE0}; //Push ACC
 asm{0xD0, 0xD0}; //Push PSW  
 
 return;
}

void writeMin()
 {
  SetCursor(0,2);
  IIcXmtptr[0]=6;
  IIcXmtptr[1]=0xED; //'m'
  IIcXmtptr[2]=0xE9; //'i'
  IIcXmtptr[3]=0xEE; //'n'
  IIcXmtptr[4]=0xBA; //':'
  IIcXmtptr[5]=0x91; //' '
  WriteChars();
  
  DispTemp=minTemp;
  writeTemp();
 }

void writeMax()
 {
  Home();
  IIcXmtptr[0]=6;
  IIcXmtptr[1]=0xED; //'m'
  IIcXmtptr[2]=0xE1; //'a'
  IIcXmtptr[3]=0xF8; //'x'
  IIcXmtptr[4]=0xBA; //':'
  IIcXmtptr[5]=0x91; //' '
  WriteChars();
  
  DispTemp=maxTemp;
  writeTemp();
 }
 
void writeAkt()
 {
  SetCursor(0,1);
  IIcXmtptr[0]=6;
  IIcXmtptr[1]=0xE1; //'a'
  IIcXmtptr[2]=0xEB; //'k'
  IIcXmtptr[3]=0xF4; //'t'
  IIcXmtptr[4]=0xBA; //':'
  IIcXmtptr[5]=0x91; //' '
  WriteChars();
  
  DispTemp=aktTemp;
  writeTemp();
 
 }


void writeTemp()
 {
  char cTemp;
  char tenth, ones;
 
  
  IIcXmtptr[0]=8;
  if (DispTemp>127)
     {
  		IIcXmtptr[1]=0xAD;//'-'
  		cTemp = ~DispTemp;
  		cTemp+=1;
  	  }
  	else
  	  {
  	   IIcXmtptr[1]=0xAB;//'+'
  	   cTemp=DispTemp;
  	  }
  	  
  	tenth=cTemp/10;
  	ones=cTemp-tenth*10;
  	
  	IIcXmtptr[2]=0xB0+tenth;
  	IIcXmtptr[3]=0xB0+ones;
  	IIcXmtptr[4]=0xC3; //'C'
  	IIcXmtptr[5]=0xE5; //'e'
  	IIcXmtptr[6]=0xEC; //'l'
  	IIcXmtptr[7]=0xAE; //'.'
  	
  	WriteChars();
  	   
   return;
 
 }


char checkKeypad()
 {
 	char maprow;
 	char scancolumn;
 	char keyval;
 		
 	maprow = 0x10;
 	scancolumn = 0xF0;
 	keyval = 0xFC;//(-4)
 	Keyrow1=1;
 	Keyrow2=1;
 	Keyrow3=1;
 	Keyrow4=1;
 	
 	while (maprow && (scancolumn == 0xF0))
 	  {
 	   switch (maprow)
 	     {
 	      case 0x10 : Keyrow1=0;
 	      				break;
 	      case 0x20 : Keyrow1=1;
 	      				Keyrow2=0;
 	      				break;
 	      case 0x40 : Keyrow2=1;
 	      				Keyrow3=0;
 	      				break;
 	      case 0x80 : Keyrow3=1;
 	      				Keyrow4=0;
 	     }
 	   scancolumn=P1;
 	   scancolumn&=0xF0;
 	   maprow<<=1;
 	   keyval += 4;
 	  } 
 	 Keyrow4 =1;
 	 switch (scancolumn)
 	 	{
		 case 0xE0: keyval +=1;
		 				break; 	 
		 case 0xD0: keyval +=2;
		 				break;
		 case 0xB0: keyval +=3;
		 				break;
		 case 0x70: keyval +=4;	
		 				break;
		 default:   keyval = 0;
 	 	}
 	 	
 	 return (keyval);	
 }

void InitKeypad()
 {
  P0M1|=0xF0; //P1.4 - P1.7 = Open Drain
  P0M2|=0xF0; 
  P1M1&=0x0F; //P0.4 - P0.7 = Quasi Bidirectional
  P1M2|=0xF0;
  
  P1|=0xF0;
  P0|=0xF0;
 }


void main()
 {
  SP=(char)Stack;
 
 	IIcXmtptr=&IIcXmtDat;
 	IIcRcvptr=&IIcRcvDat;
 	
 	maxTemp=27;
 	minTemp=246;
 	aktTemp=0;

  ETI = 1;
  EA = 1;
  
  P0M2|=0x0f;
  LinDataPtr=&LinData; 
  InitTranceiver();
  InitLinMac();
  EA=1;
  
  while (!aktTemp){};
 	_aktTemp=aktTemp;
 	
  DisplayInit();
  ClearScreen();
    
  dLED1=0;
  dLED2=0;
  dLED3=1;
  dLED4=1;
  
  writeMin();
  writeAkt();
  writeMax();
  
  while (1) 
  	{ 
    if ((signed char)aktTemp>=(signed char)maxTemp)
     {
      dLED1=1;
      dLED2=1;
     }
    else
     {
      dLED1=0;
      dLED2=0;
     } 
     
    if ((signed char)aktTemp<=(signed char)minTemp)
     {
      dLED3=0;
      dLED4=0;
     }
    else
     {
      dLED3=1;
      dLED4=1;
     } 
    
    if (_aktTemp!=aktTemp)
     {
    	writeMin();
    	writeAkt();
    	writeMax();
    	_aktTemp=aktTemp;
     }
  	};
  return; 	
 }
















⌨️ 快捷键说明

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