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

📄 sled_s.c

📁 Microchip 公司16F648 芯片实现RS485通讯,符合Modbus通讯协议,可用PICC环境编译.文件完整,可供参考.
💻 C
字号:
//led seriarl in merge out
#include  "pic16f62xa.h"
#include  "pic.h"
#include  "typedefine_s.h"
#include  "extern_s.h"

#define   LEDCLK    RA1 
//#define    LEDCLK_1 		RA0=1
#define   LEDDATA 	RA0 
//#define    LEDDATA_1		RA1=1
#define   LEDLACK 	RA2 
//#define   LEDLACK_1		RA2=1


bank1 uint LedSSLink;
bank1  static char aloneD[4];

const unsigned char LEDCode[] = 
{
   	0x03,		 	// 0
	0x9f,		    // 1
	0x25,	 		// 2
	0x0d,		 	// 3
	0x99,		 	// 4
 	0x49,			// 5
 	0x41,			// 6
	0x1f, 			// 7
	0x01, 			// 8
 	0x09,			// 9
};

void CalculateSub(int Digit,char *p_aloneD);

void LedDrive(void)
{	
  	bank1 static char OffCnt;
 	bank1 static uint ShowDigit;
    unsigned char SixCnt=16;
    unsigned int TempLedData=0;
	
	if(ledControl.bits.once128ms)
	{
		ledControl.bits.once128ms=0;	
		ShowDigit = LedSSLink;
       	CalculateSub(ShowDigit,aloneD);    //
	}
//
	
//	if(LedStruct.linkLedNewDataTag==1)
//	{
//		LedStruct.linkLedNewDataTag = 0;       
//		ShowDigit =	LedStruct.linkLedData;     
//		CalculateSub(ShowDigit,aloneD);        
//	}
//-----------------------------------
//  	if(Tag_ms == 1)
//		Tag_ms= 0;
 
//   	if(Tag_ms)   
 //		Tag_ms = 0;  
	if(ledControl.bits.refurbish != 1)
		return;
		
		ledControl.bits.refurbish = 0;


		OffCnt++;
		switch (OffCnt)
		{
			case 1:
			{		
		//		TempLedData = aloneD[0];				
		//		TempLedData = TempLedData<<8;			
		//		TempLedData = TempLedData|0x10;			//0xef;
           		TempLedData  = LEDCode[aloneD[0]];   
         		TempLedData |= 0x8000;              
				break;	                    
			}                

			case 2:
			{
//				TempLedData	= aloneD[1];				
//				TempLedData = TempLedData<<8;			
//				TempLedData = TempLedData|0x20;			//0xdf;
        		TempLedData  = LEDCode[aloneD[1]];   
         		TempLedData |= 0x4000;   
				break;									
			}
			case 3:
			{
//				TempLedData = aloneD[2];					
//				TempLedData = TempLedData<<8;			
//				TempLedData = TempLedData|0x40;			//0xbf;
       			TempLedData  = LEDCode[aloneD[2]];   
         		TempLedData |= 0x2000;   
				break;									
			}
			case 4:
			{
	//			TempLedData = aloneD[3];					
	//			TempLedData = TempLedData<<8;			
	//			TempLedData = TempLedData|0x80;			//0x7f;
       			TempLedData  = LEDCode[aloneD[3]];   
         		TempLedData |= 0x1000;   
				OffCnt=0;								
				break;									
			}
			default:
			{
				OffCnt=0;
				TempLedData=0;
				break;                         
			}
		}
	
		NOP();
    	GIE = 0;
	 //	LEDLACK = 1;
	  	LEDLACK = 0; 
		SixCnt = 16; 
		do{
	 		  if(TempLedData & 0x0001) //    
		      {
				  LEDDATA=1;
			  }
			  else
			  {
			      LEDDATA=0;
			  }
			  LEDCLK = 1;
			  TempLedData >>= 1;
			  LEDCLK=0;
	      }while(--SixCnt);	
	     LEDLACK=1;   
	//	LEDLACK = 0;
		NOP();     
		LEDCLK=0;    
		LEDDATA=0;   
		NOP();	  
		NOP();      
    	GIE = 1;
		return;       
}//void LedDrive(void)

//10进制显示
void CalculateSub(int Digit,char *p_aloneD)
{
 	*p_aloneD = (char)(Digit/1000);
	Digit -= *p_aloneD++ * 1000;
	
	*p_aloneD = (char)(Digit/100);
	Digit -= *p_aloneD++ * 100;
	
	*p_aloneD = (char)(Digit/10);
	Digit -= *p_aloneD++ * 10;

	*p_aloneD = (char)Digit;
	p_aloneD = 0;
}//void CalculateSub(int Digit,char *p_aloneD)
    

⌨️ 快捷键说明

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