📄 led_matrix.c
字号:
/* Send out Characters */
if(message_length>COLUMNS)
{
for (c = 0; c < COLUMNS; c++)
{
if (c < COLUMNS/2)
{
PTAD = 0x00;
PTED = ~(1 << c);
PTDD = 0xFF;
PTAD = fb[message_length-COLUMNS+c-1];
}
else
{
PTAD = 0x00;
PTDD = ~(1 << c - (COLUMNS/2));
PTED = 0xFF;
PTAD = fb[message_length-COLUMNS+c-1];
}
// Enter stop mode and wait for RTC wakeup
//asm (stop #0x2000);
for(j=0;j<100;j++)
asm("nop");
}
}
else
{
for (c = 0; c < COLUMNS; c++)
{
if (c < COLUMNS/2)
{
PTAD=0x00;
PTED = ~(1 << c);
PTDD = 0xFF;
PTAD = fb[c];
}
else
{
PTAD=0x00;
PTDD = ~(1 << c - (COLUMNS/2));
PTED = 0xFF;
PTAD = fb[c];
}
// Enter stop mode and wait for RTC wakeup
//asm (stop #0x2000);
for(j=0;j<100;j++)
asm("nop");
}
}
/* Turn off RTC Interrupt */
//RTCSC = 0x00;
/* Turn off RTC clock */
//SCGC2_RTC=0;
}
/*******************************************************************/
/*!
* Edit the default message
* If E4 is touched, returns early to avoid saving message
* E1 increments character
* E2 decrements character
* E3 toggles Caps Lock
* E4 exits without saving message
* E5 saves character and moves to next one
* E6 deletes previous character
* E8 saves message
*/
void
EditMessage()
{
int i;
char scrollspeed;
char message[MAX_CHAR_LENGTH];
unsigned char alphabetpos=0;
unsigned char messagepos=0;
unsigned char CapsLock=0;
for(i=0;i<MAX_CHAR_LENGTH;i++)
{
message[i]=0;
}
message[0]='a';
while(KeyPressed()) {
}
/* Continue until Exit */
while(LastKeyPressed()!=8)
{
if(KeyPressed())
{
/* Increment Character */
if(LastKeyPressed()==1)
{
alphabetpos++;
/* Roll alphabet position counter over */
if(alphabetpos>=sizeof(SelectChar))
{
alphabetpos=0;
}
/* If CapsLock is set, use capital character for a-z */
if(CapsLock==1 && SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z')
{
message[messagepos]=SelectChar[alphabetpos]-32;
}
else
{
message[messagepos]=SelectChar[alphabetpos];
}
}
/* Decrement Character */
if(LastKeyPressed()==2)
{
/* Roll alphabet position counter over */
if(alphabetpos==0)
{
alphabetpos=sizeof(SelectChar)-1;
}
else
{
alphabetpos--;
}
/* If CapsLock is set, use capital character for a-z */
if(CapsLock==1 && SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z')
{
message[messagepos]=SelectChar[alphabetpos]-32;
}
else
{
message[messagepos]=SelectChar[alphabetpos];
}
}
/* Caps Lock Key */
if(LastKeyPressed()==3)
{
if(CapsLock==1)
{
message[messagepos]=SelectChar[alphabetpos];
CapsLock=0;
}
else
{
if(SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z')
{
message[messagepos]=SelectChar[alphabetpos]-32;
}
CapsLock=1;
}
}
/* Cancel */
if(LastKeyPressed()==4)
{
return;
}
/* Save character */
if(LastKeyPressed()==5)
{
if(messagepos < (MAX_CHAR_LENGTH - 1))
{
messagepos++;
if(CapsLock==1 && SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z')
{
message[messagepos]=SelectChar[alphabetpos]-32;
}
else
{
message[messagepos]=SelectChar[alphabetpos];
}
}
}
/* Delete last character */
if(LastKeyPressed()==6)
{
if(messagepos>0)
{
message[messagepos]=0;
messagepos--;
//message[messagepos]=0;
}
}
/* Wait until Key No Longer Pressed */
while(KeyPressed())
{
LEDWrite(message);
}
}
else
{
LEDWrite(message);
}
}
/* Exit hit. Save last character */
messagepos++;
message[messagepos]=0;
scrollspeed=*SpeedAddress;
/* Write Message to Flash */
if(message[0]!=0 && message[0]!=' ')
{
SCGC2_FLS=1;
Flash_SectorErase(MessageAddress);
Flash_ByteProgram(MessageAddress,message,(MAX_CHAR_LENGTH/4 + 1));
Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
SCGC2_FLS=0;
}
}
/*******************************************************************/
/*!
* Change the speed that the message scrolls
* E1 Speeds Up
* E2 Slows Down
* E3 sets to default
* E8 exits
*/
void ScrollSpeed()
{
char message[MAX_CHAR_LENGTH];
char scrollspeed=*SpeedAddress;
int i;
/* Wait while button to select this demo is raised */
while(KeyPressed()) {}
/* Continue until Exit */
while(LastKeyPressed()!=8)
{
if(KeyPressed())
{
/* Increase speed */
if(LastKeyPressed()==1)
{
if(scrollspeed > SCROLL_MAX)
{
scrollspeed--;
memcpy(message, (void*)MessageAddress, MAX_CHAR_LENGTH);
SCGC2_FLS=1;
Flash_SectorErase(MessageAddress);
Flash_ByteProgram(MessageAddress,message, (MAX_CHAR_LENGTH/4 + 1));
Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
SCGC2_FLS=0;
}
}
/* Decrease speed */
if(LastKeyPressed()==2)
{
if(scrollspeed < SCROLL_MIN)
{
scrollspeed++;
memcpy(message, (void*)MessageAddress, MAX_CHAR_LENGTH);
SCGC2_FLS=1;
Flash_SectorErase(MessageAddress);
Flash_ByteProgram(MessageAddress,message, (MAX_CHAR_LENGTH/4 + 1));
Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
SCGC2_FLS=0;
}
}
/* Set to default speed */
if(LastKeyPressed()==3)
{
scrollspeed = SCROLL_DEFAULT;
memcpy(message, (void*)MessageAddress, MAX_CHAR_LENGTH);
SCGC2_FLS=1;
Flash_SectorErase(MessageAddress);
Flash_ByteProgram(MessageAddress,message, (MAX_CHAR_LENGTH/4 + 1));
Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
SCGC2_FLS=0;
}
/* Wait until Key No Longer Pressed */
while(KeyPressed())
{
//LEDScroll("Press E1 to speed up. E2 to slow down");
}
/* Delay */
for(i=0;i<30000;i++)
asm("nop");
}
else
{
LEDScrollTouch("E1 to speed up. E2 to slow down. E3 set to default");
}
}
}
/*******************************************************************/
/*!
* Draw a graphic on the LED screen
* A '1' turns on the LED, '0' is off
* display_screen() controls how long each frame is shown
* Exits if detect a slide down the left hand side buttons
*/
void graphic()
{
byte gb[MAX_MSG_LENGTH];
char i;
while(KeyPressed())
{
asm("nop");
}
/* Turn on RTC Clock */
SCGC2_RTC=1;
/* Turn on RTC Interrupt */
rtc_init(8);
for(i=0;i<1;i++) {
/* gb[0] is far left column, gb[15] is far right */
/* The MSB (left side) is bottom row, LSB is the top row */
gb[0] = 0b00000;
gb[1] = 0b00000;
gb[2] = 0b00000;
gb[3] = 0b00000;
gb[4] = 0b00000;
gb[5] = 0b00000;
gb[6] = 0b00000;
gb[7] = 0b00000;
gb[8] = 0b00000;
gb[9] = 0b00000;
gb[10] = 0b00000;
gb[11] = 0b00000;
gb[12] = 0b00000;
gb[13] = 0b00000;
gb[14] = 0b00000;
gb[15] = 0b00000;
/* Send out to LED Matrix */
display_screen(gb);
/* Check for slide left down on buttons */
if(KeyPressed())
{
PTAD = 0x00;
break;
}
////////////////////
gb[0] = 0b00000;
gb[1] = 0b00000;
gb[2] = 0b00000;
gb[3] = 0b00000;
gb[4] = 0b00000;
gb[5] = 0b00000;
gb[6] = 0b00000;
gb[7] = 0b00100;
gb[8] = 0b00000;
gb[9] = 0b00000;
gb[10] = 0b00000;
gb[11] = 0b00000;
gb[12] = 0b00000;
gb[13] = 0b00000;
gb[14] = 0b00000;
gb[15] = 0b00000;
display_screen(gb);
if(KeyPressed())
{
PTAD = 0x00;
break;
}
//////////////////////////////
gb[0] = 0b00000;
gb[1] = 0b00000;
gb[2] = 0b00000;
gb[3] = 0b00000;
gb[4] = 0b00000;
gb[5] = 0b00000;
gb[6] = 0b00100;
gb[7] = 0b01110;
gb[8] = 0b00100;
gb[9] = 0b00000;
gb[10] = 0b00000;
gb[11] = 0b00000;
gb[12] = 0b00000;
gb[13] = 0b00000;
gb[14] = 0b00000;
gb[15] = 0b00000;
display_screen(gb);
if(KeyPressed())
{
PTAD = 0x00;
break;
}
///////////////////////////
gb[0] = 0b00000;
gb[1] = 0b00000;
gb[2] = 0b00000;
gb[3] = 0b00000;
gb[4] = 0b00000;
gb[5] = 0b00000;
gb[6] = 0b01110;
gb[7] = 0b11111;
gb[8] = 0b01110;
gb[9] = 0b00000;
gb[10] = 0b00000;
gb[11] = 0b00000;
gb[12] = 0b00000;
gb[13] = 0b00000;
gb[14] = 0b00000;
gb[15] = 0b00000;
display_screen(gb);
if(KeyPressed())
{
PTAD = 0x00;
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -