蓝桥杯嵌入式-第九届省赛-电子定时器

/*
  程序说明: 蓝桥杯大赛嵌入式-第九届省赛-电子定时器
  软件环境: 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');
	}
}

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的lishan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值