/*
程序说明: 蓝桥杯大赛嵌入式-第九届省赛-电子定时器
软件环境: Keil uVision 4.11
硬件环境: CT117E嵌入式竞赛板(代码兼容ILI932X系列、uc8230液晶控制器)
日 期: 2020年10月13日
作 者: lishan
*/
#include "stm32f10x.h"
#include "lcd.h"
#include "stdio.h"
#include "pwm.h"
#include "led.h"
#include "key.h"
#include "timer.h"
#include "i2c.h"
u32 TimingDelay = 0;
u8 data_buf[20];
u16 data = 0;
void Delay_Ms(u32 nTime);
void Time_Polling(void);
void LCD_Show(u8 Status);
void Data_Save(void);
void Data_Load(void);
//Main Body
int main(void)
{
SysTick_Config(SystemCoreClock/1000);
Delay_Ms(200);
STM3210B_LCD_Init();
LCD_Clear(Blue);
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
LED_Init();
TIM4_Init();
KEY_Init();
TIM3_PWM_Init();
i2c_init();
Data_Load();
// //测试PWM输出
// TIM3_PWM_CH1(1*1000,0.8); //定时器3通道1输出 1KHz频率,80%占空比
while(1)
{
LCD_Show(Status);
Time_Polling();
Data_Save();
}
}
//
void Delay_Ms(u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
void Data_Load(void)
{
static u8 number = 1;
for(number=1; number<=5; number++)
{
Time[number-1][0] = Read_AT24c02((number-1)*3);
Time[number-1][1] = Read_AT24c02((number-1)*3 + 1);
Time[number-1][2] = Read_AT24c02((number-1)*3 + 2);
}
HH = Time[0][0];
MM = Time[0][1];
SS = Time[0][2];
}
void Data_Save(void)
{
if(save)
{
save = 0;
Time[number - 1][0] = HH;
Time[number - 1][1] = MM;
Time[number - 1][2] = SS;
Write_AT24c02((number-1)*3, HH);
Delay_Ms(5);
Write_AT24c02((number-1)*3 + 1, MM);
Delay_Ms(5);
Write_AT24c02((number-1)*3 + 2, SS);
Delay_Ms(5);
}
}
void Time_Polling(void)
{
if(flag_500ms && Status == 2)
{
flag_500ms = 0;
LED_Toggling(LD1);
}
if(flag_1s && Status == 2)
{
flag_1s = 0;
if(--SS >= 255)
{
SS = 59;
if(--MM >= 255)
{
MM = 59;
if(--HH >= 255)
{
HH = 23;
}
}
}
}
}
void LCD_Show(u8 Status)
{
sprintf((char*)data_buf," No %d ",number);
LCD_DisplayStringLine(Line2,data_buf);
if(Status == 0)
{
sprintf((char*)data_buf," Standby ");
LCD_DisplayStringLine(Line8,data_buf);
}
else if(Status == 1)
{
sprintf((char*)data_buf," Setting ");
LCD_DisplayStringLine(Line8,data_buf);
}
else if(Status == 2)
{
sprintf((char*)data_buf," Running ");
LCD_DisplayStringLine(Line8,data_buf);
}
else if(Status == 3)
{
sprintf((char*)data_buf," Pause ");
LCD_DisplayStringLine(Line8,data_buf);
}
else
{
sprintf((char*)data_buf," Standby ");
LCD_DisplayStringLine(Line8,data_buf);
}
if(Choose == 1)
{
LCD_DisplayChar(Line5, 96+16*1, SS%10 + '0');
LCD_DisplayChar(Line5, 96+16*2, SS/10 + '0');
LCD_DisplayChar(Line5, 96+16*3, ' ');
LCD_DisplayChar(Line5, 96+16*4, ':');
LCD_DisplayChar(Line5, 96+16*5, MM%10 + '0');
LCD_DisplayChar(Line5, 96+16*6, MM/10 + '0');
LCD_DisplayChar(Line5, 96+16*7, ' ');
LCD_DisplayChar(Line5, 96+16*8, ':');
LCD_SetBackColor(Yellow);
LCD_SetTextColor(Red);
LCD_DisplayChar(Line5, 96+16*9, HH%10 + '0');
LCD_DisplayChar(Line5, 96+16*10, HH/10 + '0');
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
}
else if(Choose == 2)
{
LCD_DisplayChar(Line5, 96+16*1, SS%10 + '0');
LCD_DisplayChar(Line5, 96+16*2, SS/10 + '0');
LCD_DisplayChar(Line5, 96+16*3, ' ');
LCD_DisplayChar(Line5, 96+16*4, ':');
LCD_SetBackColor(Yellow);
LCD_SetTextColor(Red);
LCD_DisplayChar(Line5, 96+16*5, MM%10 + '0');
LCD_DisplayChar(Line5, 96+16*6, MM/10 + '0');
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
LCD_DisplayChar(Line5, 96+16*7, ' ');
LCD_DisplayChar(Line5, 96+16*8, ':');
LCD_DisplayChar(Line5, 96+16*9, HH%10 + '0');
LCD_DisplayChar(Line5, 96+16*10, HH/10 + '0');
}
else if(Choose == 3)
{
LCD_SetBackColor(Yellow);
LCD_SetTextColor(Red);
LCD_DisplayChar(Line5, 96+16*1, SS%10 + '0');
LCD_DisplayChar(Line5, 96+16*2, SS/10 + '0');
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
LCD_DisplayChar(Line5, 96+16*3, ' ');
LCD_DisplayChar(Line5, 96+16*4, ':');
LCD_DisplayChar(Line5, 96+16*5, MM%10 + '0');
LCD_DisplayChar(Line5, 96+16*6, MM/10 + '0');
LCD_DisplayChar(Line5, 96+16*7, ' ');
LCD_DisplayChar(Line5, 96+16*8, ':');
LCD_DisplayChar(Line5, 96+16*9, HH%10 + '0');
LCD_DisplayChar(Line5, 96+16*10, HH/10 + '0');
}
else
{
LCD_DisplayChar(Line5, 96+16*1, SS%10 + '0');
LCD_DisplayChar(Line5, 96+16*2, SS/10 + '0');
LCD_DisplayChar(Line5, 96+16*3, ' ');
LCD_DisplayChar(Line5, 96+16*4, ':');
LCD_DisplayChar(Line5, 96+16*5, MM%10 + '0');
LCD_DisplayChar(Line5, 96+16*6, MM/10 + '0');
LCD_DisplayChar(Line5, 96+16*7, ' ');
LCD_DisplayChar(Line5, 96+16*8, ':');
LCD_DisplayChar(Line5, 96+16*9, HH%10 + '0');
LCD_DisplayChar(Line5, 96+16*10, HH/10 + '0');
}
}