Posted at

電子工作LEDちかちかrev2

過去記事を書いたときに頂いたご指摘を元にコードの修正を試みました。

ソフトの設計レベルもっとあげたいな。。


r_cg_timer_user.c


/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/

/* Start user code for global. Do not edit comment generated here */
int32_t loopcnt = 0;
static uint8_t sts = 0;
static void Sadamerareshi_Hikari(const uint8_t pattern[],uint8_t size);
static void Gyakutensuru_Hikari(const uint8_t pattern[],uint8_t size);
//固定パターンであれば、constでFLASH-ROMへ。メモリ(RAM)の1バイトは血の一滴!!!
const uint8_t led_pattern [] = {
0x00,/* □□□□□□□ */
0x08,/* □□□■□□□ */
0x1C,/* □□■■■□□ */
0x3E,/* □■■■■■□ */
0x7F,/* ■■■■■■■ */
0x3E,/* □■■■■■□ */
0x1C,/* □□■■■□□ */
0x08,/* □□□■□□□ */
};
const uint8_t led_pattern2 [] = {
0x00,/* □□□□□□□ */
0x40,/* ■□□□□□□ */
0x60,/* ■■□□□□□ */
0x70,/* ■■■□□□□ */
0x78,/* ■■■■□□□ */
0x7C,/* ■■■■■□□ */
0x7E,/* ■■■■■■□ */
0x7F,/* ■■■■■■■ */
};
const uint8_t led_pattern3 [] = {
0x00,/* □□□□□□□ */
0x01,/* □□□□□□■ */
0x03,/* □□□□□■■ */
0x07,/* □□□□■■■ */
0x0F,/* □□□■■■■ */
0x1F,/* □□■■■■■ */
0x3F,/* □■■■■■■ */
0x7F,/* ■■■■■■■ */
};

/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
* Function Name: r_tau0_channel0_interrupt
* Description : This function is INTTM00 interrupt service routine.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/

static void __near r_tau0_channel0_interrupt(void)
{
/* Start user code. Do not edit comment generated here */
switch(sts){
case(0):
if(loopcnt < 6){
P0 = (P0 >> 1);
}
else{
P0 = (P0 << 1);
}
loopcnt++;
if(loopcnt > 11){
loopcnt=0;
sts=1;
}
break;
case(1):
Sadamerareshi_Hikari(led_pattern, sizeof(led_pattern));
break;
case(2):
Sadamerareshi_Hikari(led_pattern2, sizeof(led_pattern2));
break;
case(3):
Gyakutensuru_Hikari(led_pattern2, sizeof(led_pattern2));
break;
case(4):
Sadamerareshi_Hikari(led_pattern3, sizeof(led_pattern3));
break;
case(5):
Gyakutensuru_Hikari(led_pattern3, sizeof(led_pattern3));
break;
default:
P0=0x40;
sts=0;
break;
}
}
static void Sadamerareshi_Hikari(const uint8_t pattern[],uint8_t size){
P0 = pattern[loopcnt];
loopcnt = (loopcnt+1) % size;
if (loopcnt == 0) {
sts++;
}
}
static void Gyakutensuru_Hikari(const uint8_t pattern[],uint8_t size){
uint8_t tmp;
tmp = pattern[loopcnt];
P0 = ~tmp;
loopcnt = (loopcnt+1) % size;
if (loopcnt == 0) {
sts++;
}
}

/* End user code. Do not edit comment generated here */
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */


XXX.gif

次はどうしようっかな~