2023-03-23 17:00:05 +08:00

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);
}