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

📄 sled.c

📁 使用Microchip公司16F648实现4*6键盘程序. 在PICC环境下编译通过,包含RS485通讯. 代码完整,可供参考.
💻 C
字号:
//led seriarl in merge out
#include  "pic16f62xa.h"
#include  "pic.h"
#include  "typedefine.h"
#include  "extern.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 unsigned int LedSLink;
//bank1 volatile LEDCONTROL ledControl;   
bank1 volatile LEDCONTROL ledControl;
bank1 volatile 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 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 =   LedSLink;
       	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 + -