383 lines
8.6 KiB
C
383 lines
8.6 KiB
C
#include "common.h"
|
|
#include "GPIO.h"
|
|
#include "tm1650.h"
|
|
#include "STDIO.H"
|
|
#include "EEPROM.h"
|
|
#include "timer.h"
|
|
u8 keyflag = 0;
|
|
u8 sunmode = 1;
|
|
u8 pog = 4;
|
|
u16 keytime = 0;
|
|
u8 keyloog = 0;
|
|
u8 speedmode1 = speedstart, speedmode2 = speedstart, speedmode3 = speedstart, speedmode4 = speedstart, subdivision1 = substart, subdivision2 = substart, subdivision3 = substart, subdivision4 = substart;
|
|
u8 num[9] = 0;
|
|
static void key_add(u8 *speedmode, u8 *subdivision)
|
|
{
|
|
u8 key__time = 0;
|
|
if (keyloog)
|
|
key__time = 100;
|
|
else
|
|
key__time = 500;
|
|
switch (pog)
|
|
{
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
if (keyflag == 0)
|
|
{
|
|
*speedmode += 1;
|
|
if (*speedmode >= speedmax)
|
|
*speedmode = speedmax;
|
|
keyflag = 1;
|
|
}
|
|
if (keytime > key__time)
|
|
{
|
|
*speedmode += 1;
|
|
keytime = 0;
|
|
keyloog = 1;
|
|
if (*speedmode >= speedmax)
|
|
*speedmode = speedmax;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (keyflag == 0)
|
|
{
|
|
*subdivision += 1;
|
|
if (*subdivision >= subdivisionmax)
|
|
*subdivision = subdivisionmax;
|
|
keyflag = 1;
|
|
}
|
|
if (keytime > key__time)
|
|
{
|
|
*subdivision += 1;
|
|
keytime = 0;
|
|
keyloog = 1;
|
|
if (*subdivision >= subdivisionmax)
|
|
*subdivision = subdivisionmax;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void key_Redu(u8 *speedmode, u8 *subdivision)
|
|
{
|
|
u8 key__time = 0;
|
|
if (keyloog)
|
|
key__time = 100;
|
|
else
|
|
key__time = 500;
|
|
switch (pog)
|
|
{
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
if (keyflag == 0)
|
|
{
|
|
*speedmode -= 1;
|
|
if (*speedmode <= speedmin)
|
|
*speedmode = speedmin;
|
|
keyflag = 1;
|
|
}
|
|
if (keytime > key__time)
|
|
{
|
|
*speedmode -= 1;
|
|
keytime = 0;
|
|
keyloog = 1;
|
|
if (*speedmode <= speedmin)
|
|
*speedmode = speedmin;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (keyflag == 0)
|
|
{
|
|
if (*subdivision <= subdivisionmin)
|
|
*subdivision = subdivisionmin;
|
|
else
|
|
*subdivision -= 1;
|
|
keyflag = 1;
|
|
}
|
|
if (keytime > key__time)
|
|
{
|
|
keytime = 0;
|
|
keyloog = 1;
|
|
if (*subdivision <= subdivisionmin)
|
|
*subdivision = subdivisionmin;
|
|
else
|
|
*subdivision -= 1;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
void keyscan()
|
|
{
|
|
if (k1 == 0)
|
|
if (keyflag == 0)
|
|
{
|
|
timex = 400 * subdivision1;
|
|
DIR = 1;
|
|
sunmode = 1;
|
|
keyflag = 1;
|
|
setconfig();
|
|
}
|
|
if (k2 == 0)
|
|
if (keyflag == 0)
|
|
{
|
|
timex = 400 * subdivision2;
|
|
DIR = 0;
|
|
sunmode = 2;
|
|
keyflag = 1;
|
|
setconfig();
|
|
}
|
|
if (k3 == 0)
|
|
if (keyflag == 0)
|
|
{
|
|
timex = 800 <<subdivision3;
|
|
DIR = 1;
|
|
sunmode = 3;
|
|
keyflag = 1;
|
|
setconfig();
|
|
}
|
|
if (k4 == 0)
|
|
if (keyflag == 0)
|
|
{
|
|
timex = 0;
|
|
sunmode = 4;
|
|
keyflag = 1;
|
|
setconfig();
|
|
}
|
|
if (k5 == 0)
|
|
{
|
|
if (keyflag == 0)
|
|
{
|
|
switch (pog)
|
|
{
|
|
case 1:
|
|
pog = 2;
|
|
break;
|
|
case 2:
|
|
pog = 3;
|
|
break;
|
|
case 3:
|
|
pog = 4;
|
|
setconfig();
|
|
break;
|
|
case 4:
|
|
pog = 2;
|
|
break;
|
|
}
|
|
keyflag = 1;
|
|
}
|
|
}
|
|
if (k6 == 0)
|
|
{
|
|
switch (sunmode)
|
|
{
|
|
case 1:
|
|
key_add(&speedmode1, &subdivision1);
|
|
break;
|
|
case 2:
|
|
key_add(&speedmode2, &subdivision2);
|
|
break;
|
|
case 3:
|
|
key_add(&speedmode3, &subdivision3);
|
|
break;
|
|
case 4:
|
|
key_add(&speedmode4, &subdivision4);
|
|
break;
|
|
}
|
|
}
|
|
if (k7 == 0)
|
|
{
|
|
switch (sunmode)
|
|
{
|
|
case 1:
|
|
key_Redu(&speedmode1, &subdivision1);
|
|
break;
|
|
case 2:
|
|
key_Redu(&speedmode2, &subdivision2);
|
|
break;
|
|
case 3:
|
|
key_Redu(&speedmode3, &subdivision3);
|
|
break;
|
|
case 4:
|
|
key_Redu(&speedmode4, &subdivision4);
|
|
break;
|
|
}
|
|
}
|
|
if (k8 == 0)
|
|
{
|
|
if (keyflag == 0)
|
|
{
|
|
if (pog != 1)
|
|
pog = 1;
|
|
else
|
|
pog = 4;
|
|
setconfig();
|
|
keyflag = 1;
|
|
switch (sunmode)
|
|
{
|
|
case 1:
|
|
timex = 400 << subdivision1;
|
|
DIR = 1;
|
|
break;
|
|
case 2:
|
|
timex = 400 << subdivision2;
|
|
DIR = 0;
|
|
break;
|
|
case 3:
|
|
timex = 800 << subdivision3;
|
|
DIR = 1;
|
|
break;
|
|
case 4:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (k1 != 0 & k2 != 0 & k3 != 0 & k4 != 0 & k5 != 0 & k6 != 0 & k7 != 0 & k8 != 0)
|
|
{
|
|
keyflag = 0;
|
|
keyloog = 0;
|
|
}
|
|
}
|
|
static void dislittleplay(u8 speedmode, u16 subdivision)
|
|
{
|
|
switch (pog)
|
|
{
|
|
case 1:
|
|
TM1650_printpogrun(sunmode, displaydata);
|
|
break;
|
|
case 2:
|
|
TM1650_print_SMG1(speedmode);
|
|
break;
|
|
case 3:
|
|
TM1650_print_SMG2(subdivision);
|
|
break;
|
|
case 4:
|
|
TM1650_printpogstop(sunmode);
|
|
break;
|
|
}
|
|
}
|
|
void display()
|
|
{
|
|
switch (sunmode)
|
|
{
|
|
case 1:
|
|
dislittleplay(speedmode1, (u16)(1 << subdivision1));
|
|
break;
|
|
case 2:
|
|
dislittleplay(speedmode2, (u16)(1 << subdivision2));
|
|
break;
|
|
case 3:
|
|
dislittleplay(speedmode3, (u16)(1 << subdivision3));
|
|
break;
|
|
case 4:
|
|
dislittleplay(speedmode4, (u16)(1 << subdivision4));
|
|
break;
|
|
}
|
|
}
|
|
void shuju()
|
|
{
|
|
|
|
switch (sunmode)
|
|
{
|
|
case 1:
|
|
if (((u16)(speedmode1 * 20 * (1 << subdivision1) / 3)) < 400)
|
|
{
|
|
Timer0_12T();
|
|
T0_Load(65536UL - (MAIN_Fosc / ((u32)speedmode1 * 80 * (1 << subdivision1))));
|
|
}
|
|
else
|
|
{
|
|
Timer0_1T();
|
|
T0_Load(65536UL - (MAIN_Fosc / ((u32)speedmode1 * 20 * (1 << subdivision1) / 3)));
|
|
}
|
|
break;
|
|
case 2:
|
|
if ((u16)(speedmode2 * 20 * (1 << subdivision2) / 3) < 400)
|
|
{
|
|
Timer0_12T();
|
|
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode2 * 80 * (1 << subdivision2))));
|
|
}
|
|
else
|
|
{
|
|
Timer0_1T();
|
|
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode2 * 20 * (1 << subdivision2) / 3)));
|
|
}
|
|
break;
|
|
case 3:
|
|
if ((u16)(speedmode3 * 20 * (1 << subdivision3) / 3) < 400)
|
|
{
|
|
Timer0_12T();
|
|
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode3 * 80 * (1 << subdivision3))));
|
|
}
|
|
else
|
|
{
|
|
Timer0_1T();
|
|
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode3 * 20 * (1 << subdivision3) / 3)));
|
|
}
|
|
break;
|
|
case 4:
|
|
if ((u16)(speedmode4 * 20 * (1 << subdivision4) / 3) < 400)
|
|
{
|
|
Timer0_12T();
|
|
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode4 * 80 * (1 << subdivision4))));
|
|
}
|
|
else
|
|
{
|
|
Timer0_1T();
|
|
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode4 * 20 * (1 << subdivision4) / 3)));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
void run()
|
|
{
|
|
switch (pog)
|
|
{
|
|
case 1:
|
|
if (timex == 0)
|
|
pog = 4;
|
|
EN = 0;
|
|
break;
|
|
case 2:
|
|
EN = 1;
|
|
break;
|
|
case 3:
|
|
EN = 1;
|
|
break;
|
|
case 4:
|
|
EN = 1;
|
|
break;
|
|
}
|
|
}
|
|
void getconfig()
|
|
{
|
|
EEPROM_read_n(MYaddress, num, 9);
|
|
if (num[0] != 255)
|
|
{
|
|
speedmode1 = num[0];
|
|
speedmode2 = num[1];
|
|
speedmode3 = num[2];
|
|
speedmode4 = num[3];
|
|
subdivision1 = num[4];
|
|
subdivision2 = num[5];
|
|
subdivision3 = num[6];
|
|
subdivision4 = num[7];
|
|
sunmode = num[8];
|
|
}
|
|
}
|
|
void setconfig()
|
|
{
|
|
EEPROM_SectorErase(MYaddress);
|
|
num[0] = speedmode1;
|
|
num[1] = speedmode2;
|
|
num[2] = speedmode3;
|
|
num[3] = speedmode4;
|
|
num[4] = subdivision1;
|
|
num[5] = subdivision2;
|
|
num[6] = subdivision3;
|
|
num[7] = subdivision4;
|
|
num[8] = sunmode;
|
|
EEPROM_write_n(MYaddress, num, 9);
|
|
}
|