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

📄 main.c

📁 此程式为LED驱动,用合泰的蕊片,希望对大家有帮助
💻 C
📖 第 1 页 / 共 2 页
字号:
//***********************************************************
//********************* Mask Option *************************
//***********************************************************
// HT48R30 LED Driver(1632) control
//
// MCU Body:			HT48R30 + HT1632
// Fsys:                   	4MHZ
// WDT:                   	WDT Disable
// WDT Clock Soure:                   
// CLR WDT:                           
// Project name:           	LED Driver(1632)
// Programmer:			Dolphin
// Ver	  : 			0.0.1
// Date   : 			2007-02-27 02:41 PM
//***********************************************

#include	<ht48r30a-1.h>
#include	<memory.h>

//***********************************************
//************** const table ********************
//***********************************************
//const unsigned char T_Data_Index[24]={CH,CO,CL,CT,CE,CK,SPACE,CS,CE,CM,CI,CC,CO,CN,CD,CU,CC,CT,CO,CR,SPACE,CI,CN,CC};
//				       HOLTEK SEMICONDUCTOR INC


//const unsigned char T_Data_Value[15][5]={
//	{0x7c,0x82,0x82,0x82,0x44},		/* C 0*/
//	{0xfe,0x82,0x82,0x44,0x3c},		/* D 1*/
//	{0xfe,0x92,0x92,0x92,0x92},		/* E 2*/
//	{0xfe,0x10,0x10,0x10,0xfe},		/* H 3*/
//	{0x00,0x82,0xfe,0x82,0x00},		/* I 4*/
//	{0xfe,0x10,0x28,0x44,0x82},		/* K 5*/
//	{0xfe,0x80,0x80,0x80,0x80},		/* L 6*/
//	{0xfe,0x04,0x18,0x04,0xfe},		/* M 7*/
//	{0xfe,0x08,0x10,0x20,0xfe},		/* N 8*/
//	{0x7c,0x82,0x82,0x82,0x7c},		/* O 9*/
//	{0xfe,0x12,0x32,0x52,0x8c},		/* R 10*/
//	{0x4c,0x92,0x92,0x92,0x64},		/* S 11*/
//	{0x02,0x02,0xfe,0x02,0x02},		/* T 12*/
//	{0x7e,0x80,0x80,0x80,0x7e},		/* U 13*/
//	{0x00,0x00,0x00,0x00,0x00}		/*   14*/
//};


const unsigned char T_Data_Value[144]={
	0x7f,0x08,0x08,0x08,0x7f,0x00,		/* H  3*/
	0x3e,0x41,0x41,0x41,0x3e,0x00,		/* O  9*/
	0x7f,0x01,0x01,0x01,0x01,0x00,		/* L  6*/
	0x40,0x40,0x7f,0x40,0x40,0x00,		/* T 12*/
	0x7f,0x49,0x49,0x49,0x49,0x00,		/* E  2*/
	0x7f,0x08,0x14,0x22,0x41,0x00,		/* K  5*/
	0x00,0x00,0x00,0x00,0x00,			/*   14*/
	0x32,0x49,0x49,0x49,0x26,0x00,		/* S 11*/
	0x7f,0x49,0x49,0x49,0x49,0x00,		/* E  2*/
	0x7f,0x20,0x18,0x20,0x7f,0x00,		/* M  7*/
	0x00,0x41,0x7f,0x41,0x00,0x00,		/* I  4*/
	0x3e,0x41,0x41,0x41,0x22,0x00,		/* C  0*/
	0x3e,0x41,0x41,0x41,0x3e,0x00,		/* O  9*/
	0x7f,0x10,0x08,0x04,0x7f,0x00,		/* N  8*/
	0x7f,0x41,0x41,0x22,0x1c,0x00,		/* D  1*/
	0x7e,0x01,0x01,0x01,0x7e,0x00,		/* U 13*/
	0x3e,0x41,0x41,0x41,0x22,0x00,		/* C  0*/
	0x40,0x40,0x7f,0x40,0x40,0x00,		/* T 12*/
	0x3e,0x41,0x41,0x41,0x3e,0x00,		/* O  9*/
	0x7f,0x48,0x4c,0x4a,0x31,0x00,		/* R 10*/
	0x00,0x00,0x00,0x00,0x00,			/*   14*/
	0x00,0x41,0x7f,0x41,0x00,0x00,		/* I  4*/
	0x7f,0x10,0x08,0x04,0x7f,0x00,		/* N  8*/
	0x3e,0x41,0x41,0x41,0x22,0x00,0x01,0x00	/* C  0*/
};

//const unsigned char T_HT_LogoIcon[13]={0x10,0x28,0xe8,0x78,0x3c,0x2e,0xe8,0x78,0x3c,0x2e,0x28,0x10,0x00};
const unsigned char T_HT_LogoIcon[13]={0x08,0x14,0x17,0x1e,0x3c,0x74,0x17,

									0x1e,0x3c,0x74,0x14,0x08,0x00};

const unsigned char T_Data_UpDown[8]={0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81,0x00};

//***********************************************
//************** function void*******************
//***********************************************

//---------------------
//--- 1632_driver.c ---
void SBR_PRECOMMAND_1632(void);					//send "100" for command
void SBR_COMMAND_1632(unsigned char command);	//send command for 1632

void SBR_PREDATA_1632(void);					//send "101" for data
void SBR_ADDRESS_1632(unsigned char address);	//send address for 1632 RAM
void SBR_DATA_1632(unsigned char data);			//send data for 1632

void SBR_INIT_1632(void);						//inital 1632's set
void SBR_ALLRAM_1632(bit F_RAM1632_SET);		//clear or set all ram for 1632

//-------------
//--- sub.c ---
void INI_Memory(void);							//clear all RAM
void INI_System(void);							//initial system set
void INI_1632(void);							//initial 1632

void SBR_DATA_DisplayCS(unsigned char CSEn,unsigned char station);	//write data into 1632
void SBR_DATA_DisplayByte(unsigned char CSEn,unsigned char station,unsigned char data);	//write data into 1632

//function step
void SBR_FUNCTION_STEP0(void);			//Step0
void SBR_FUNCTION_STEP1(void);			//Step1
void SBR_FUNCTION_STEP2(void);			//Step2
void SBR_FUNCTION_STEP4(void);			//Step4
void SBR_FUNCTION_STEP6(void);			//Step6
void SBR_FUNCTION_STEP8(void);			//Step8
void SBR_FUNCTION_STEP10(void);			//Step10
void SBR_FUNCTION_STEP12(void);			//Step12
void SBR_FUNCTION_STEP14(void);			//Step14
void SBR_FUNCTION_STEP16(void);			//Step16
void SBR_FUNCTION_STEP18(void);			//Step18

//-----------------
//--- isr_tmr.c ---

//***********************************************
//************** main function ******************
//***********************************************
void main()
{
	// part for initial
	INI_Memory();				//clear all RAM
	INI_System();				//initial system set
	INI_1632();					//initial 1632
	_0e_4 = 1;					//TMRC.4 = 1,tmr on
	while(1);					//Jump $
}




void ISR_TMR()
{
	//------------------
	//TMR count part
	//------------------
	M_DATA_SPEED++;
	M_TMR_MS++;
	if(M_TMR_MS >= 125)
	{
		// 125 * 8ms = 1 sec
		M_TMR_MS = 0;
		M_TMR_SEC++;
	}
	
	//Function choice
	switch(M_Function_Step)
	{
		//check which step run
		//===============================
		//character run part
		case 0:
		{
			//move form R->L
			if(M_DATA_SPEED >= C_DATA_SPEED)
			{
				//move 1 station
				M_DATA_SPEED = 0;		//speed count clear
				M_DATA_FrePoint++;		//data display next station
				
				#asm
				CALL 	_SBR_FUNCTION_STEP0
				#endasm
			}
			break;
		}
		
		case 1:
		{
			//delay
			if(M_TMR_SEC > 1) 
			{
				/*
				M_Function_Step++;		//next function step
				
				//insert initial step3 code at here
				//command set
				P_CS1_1632 = P_CS2_1632 = P_CS3_1632 = C_1632_CSOn;	//1632 CS1 & CS2 & CS3 enable
				#asm
				CALL 	_SBR_PRECOMMAND_1632				//send "100" for command
				MOV	A,09H
				MOV	SBR_COMMAND_16320,A
				CALL 	_SBR_COMMAND_1632				//BLINK ON
				#endasm
				P_CS1_1632 = P_CS2_1632 = P_CS3_1632 = C_1632_CSOff;	//1632 CS1 & CS2 & CS3 disable
				
				M_TMR_SEC = 0;
				*/
				
				#asm
				CALL 	_SBR_FUNCTION_STEP1
				#endasm
			}
			break;
		}
		
		case 2:
		{
			//data blink
			/*
			M_Function_Step++;		//next function step
			
			//insert initial step3 code at here
			//command set
			P_CS1_1632 = P_CS2_1632 = P_CS3_1632 = C_1632_CSOn;	//1632 CS1 & CS2 & CS3 enable
			#asm
			CALL 	_SBR_PRECOMMAND_1632				//send "100" for command
			MOV	A,08H
			MOV	SBR_COMMAND_16320,A				//var set!!!
			CALL 	_SBR_COMMAND_1632				//BLINK OFF
			#endasm
			P_CS1_1632 = P_CS2_1632 = P_CS3_1632 = C_1632_CSOff;	//1632 CS1 & CS2 & CS3 disable
			
			M_DATA_SPEED = 0;
			*/
			
			#asm
			CALL 	_SBR_FUNCTION_STEP2
			#endasm
			
			break;
		}
		
		case 3:
		{
			//delay
			if(M_TMR_SEC > C_LED_StaticTime)
			{
				M_Function_Step++;		//next function step
				
				//insert initial step3 code at here
				M_DATA_SPEED = 0;
				M_DATA_FrePoint = C_DATA_MAX_Length;
			}
			break;
		}
		
		case 4:
		{
			//move form R->L overflow
			if(M_DATA_SPEED >= C_DATA_SPEED)
			{
				//move 1 station
				M_DATA_SPEED = 0;		//speed count clear
				M_DATA_FrePoint--;		//data display next station
				
				#asm
				CALL 	_SBR_FUNCTION_STEP4
				#endasm
			}
			break;
		}
		
		case 5:
		{
			//delay
			if(M_TMR_SEC > C_LED_AllOffTime)
			{
				//M_Function_Step = 0;		//end , use this code
				M_Function_Step++;		//next function,use this code
				M_DATA_SPEED = 0;
				M_UDMask_Cnt = 0;
			}
			break;
		}
		//end of character run part
		//===============================
		
		//===============================
		//character display up + down
		case 6:
		{
			//display
			if(M_DATA_SPEED >= C_DATA_SPEED)
			{
				//move 1 station
				M_DATA_SPEED = 0;		//speed count clear
				#asm
				CALL 	_SBR_FUNCTION_STEP6
				#endasm
			}
			break;
		}
		
		case 7:
		{
			//delay
			if(M_TMR_SEC > C_LED_StaticTime)
			{
				M_Function_Step++;		//next function step
				
				//insert initial step3 code at here
				M_DATA_SPEED = 0;
			}
			break;
		}
		
		case 8:
		{
			//display
			if(M_DATA_SPEED >= C_DATA_SPEED)
			{
				//move 1 station
				M_DATA_SPEED = 0;		//speed count clear
				#asm
				CALL 	_SBR_FUNCTION_STEP8
				#endasm
			}
			break;
		}
		
		case 9:
		{
			//delay
			if(M_TMR_SEC > C_LED_AllOffTime)
			{
				M_Function_Step++;		//next function,use this code
				M_DATA_SPEED = 0;
				M_DATA_TableCnt = 0;
			}
			break;
		}
		//character display up + down end
		//===============================
		
		//===============================
		//character display L + R
		case 10:
		{
			//display
			if(M_DATA_SPEED >= C_DATA_SPEED)
			{
				//move 1 station
				M_DATA_SPEED = 0;		//speed count clear
				#asm
				CALL 	_SBR_FUNCTION_STEP10
				#endasm
			}
			break;
		}
		
		case 11:
		{
			//delay
			if(M_TMR_SEC > C_LED_StaticTime)
			{
				M_Function_Step++;		//next function step
				
				//insert initial step code at here
				M_DATA_SPEED = 0;
			}
			break;
		}
		
		case 12:
		{
			//display
			if(M_DATA_SPEED >= C_DATA_SPEED)
			{
				//move 1 station
				M_DATA_SPEED = 0;		//speed count clear
				#asm
				CALL 	_SBR_FUNCTION_STEP12
				#endasm
			}
			break;
		}
		
		case 13:
		{
			//delay
			if(M_TMR_SEC > C_LED_AllOffTime)
			{
				M_Function_Step++;		//next function,use this code
			}
			break;
		}
		//character display L + R end
		//===============================
		
		//===============================
		//display HOLTEK
		case 14:
		{
			//CS1 & CS3 all on
			#asm
			CALL 	_SBR_FUNCTION_STEP14
			#endasm
			break;
		}
		
		case 15:
		{
			//delay
			if(M_TMR_SEC > C_LED_AllOffTime)
			{
				M_Function_Step++;		//next function,use this code
			}
			break;
		}
		
		case 16:
		{
			//display HOLTEK
			#asm
			CALL 	_SBR_FUNCTION_STEP16
			#endasm
			break;
		}
		
		case 17:
		{
			//delay
			if(M_TMR_SEC > C_LED_StaticTime)
			{
				M_Function_Step++;		//next function step
				
				//insert initial step code at here
			}
			break;
		}
		
		case 18:
		{
			//clear all LED RAM
			#asm
			CALL 	_SBR_FUNCTION_STEP18
			#endasm
			break;
		}
		
		case 19:
		{
			//delay
			if(M_TMR_SEC > C_LED_AllOffTime)
			{
				M_Function_Step = 0;		//end function,use this code
				M_DATA_SPEED = 0;		//speed count clear
				M_DATA_FrePoint = 0;
			}
			break;
		}
		//HOLTEK display end
		//===============================		
		default : break;
	}
}




//-----------------------------------------------
//filename :	1632_driver.c
//stack :	2
//programer :	dolphin
//date :	2007-02-26
//-----------------------------------------------

/*
//--- 1632_driver.c ---
void SBR_PRECOMMAND_1632(void);			//send "100" for command
void SBR_COMMAND_1632(unsigned char command);	//send command for 1632

void SBR_PREDATA_1632(void);			//send "101" for data
void SBR_ADDRESS_1632(unsigned char address);	//send address for 1632 RAM
void SBR_DATA_1632(unsigned char data);		//send data for 1632

void SBR_INIT_1632(void);			//inital 1632's set
void SBR_ALLRAM_1632(bit F_RAM1632_SET);	//clear or set all ram for 1632
*/

//-----------------------------------------------
//Const define
#define	C_COMMAND1632_SYSEN	0x01		//SYSTEM ENABLE
#define	C_COMMAND1632_OPTION	0x2c		//P-MOS OUTPUT AND 16 COMMON OPTION(8-com 0x28)
#define	C_COMMAND1632_LEDON	0x03		//LED ON
#define	C_COMMAND1632_LEDOFF	0x02		//LED OFF
#define	C_COMMAND1632_BLINKOFF	0x08		//BLINK OFF
#define	C_COMMAND1632_BLINKON	0x09		//BLINK OFF
#define	C_COMMAND1632_PWMDUTY	0xaa		//PWM DUTY SET(0xa0~0xaf)

/*
#define P_WR_1632	_pa0
#define	P_DATA_1632	_pa1
#define P_WRC_1632	_pac0
#define	P_DATAC_1632	_pac1
*/

//-----------------------------------------------
//function : 	SBR_INIT_1632
//in : 		NULL
//out : 	NULL
//description:	inital 1632's set
//notice : user must set CS before call this function
//-----------------------------------------------
void SBR_INIT_1632()
{
//	P_WR_1632 = 1;
//	P_WRC_1632 = 0;
//	P_DATAC_1632 = 0;				//set IO output
	
	SBR_PRECOMMAND_1632();
	SBR_COMMAND_1632(C_COMMAND1632_SYSEN);		//SYSTEM ENABLE
	SBR_COMMAND_1632(C_COMMAND1632_OPTION);		//P-MOS OUTPUT AND 16COMMON OPTION
	SBR_COMMAND_1632(C_COMMAND1632_LEDON);		//LED ON
	SBR_COMMAND_1632(C_COMMAND1632_BLINKOFF);	//BLINK OFF
	SBR_COMMAND_1632(C_COMMAND1632_PWMDUTY);	//PWM DUTY SET
}

//-----------------------------------------------
//function : 	SBR_ALLRAM_1632
//in : 		NULL
//out : 	NULL
//description:	clear or set all ram for 1632
//notice :      user must set CS before call this function
//-----------------------------------------------	
void SBR_ALLRAM_1632(bit F_RAM1632_SET)
{
	unsigned char i;
	
	SBR_PREDATA_1632();				// "101" , ready for write
	SBR_ADDRESS_1632(0);				// address = 0
	
	// all RAM have 96
	for(i=0 ; i<48 ; i++)
	{   
		if(F_RAM1632_SET) 	SBR_DATA_1632(0xff);	//all RAM write 1
		else			SBR_DATA_1632(0x00);	//all RAM write 0
	}
}

//-----------------------------------------------
//function : 	SBR_PRECOMMAND_1632
//in : 		NULL
//out : 	NULL
//description:	send "100" for command
//-----------------------------------------------
void SBR_PRECOMMAND_1632()
{
	P_WR_1632 = 0;
	P_DATA_1632 = 1;		// 1
	_nop();
	
	P_WR_1632 = 1;
	_nop();
	_nop();
	
	P_WR_1632 = 0;
	P_DATA_1632 = 0;		// 0
	_nop();
	
	P_WR_1632 = 1;
	_nop();
	_nop();
	
	P_WR_1632 = 0;
	P_DATA_1632 = 0;		// 0
	_nop();
	
	P_WR_1632 = 1;
	_nop();
	_nop();
}

//-----------------------------------------------
//function : 	SBR_COMMAND_1632
//in : 		command
//out : 	NULL
//description:	send command for 1632 (command-X)
//-----------------------------------------------
void SBR_COMMAND_1632(unsigned char command)
{

⌨️ 快捷键说明

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