📄 main.c
字号:
//***********************************************************
//********************* 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 + -