第一次写的链接:蓝桥杯嵌入式第十一届省赛模拟试题
再做的时候,感觉之前的有些功能没实现:
1.时钟显示界面的LD1是1s闪烁,之前是200ms一闪烁。
2.时钟设置完成后,时钟显示界面的时间也要变。
3.时间边界,hour<0,min<0,sec<0应该变为0,改用了int。之前用的uint8,无符号数,当小于0时会报错,如hour+1<=0,hour=23,但到边界时不是变为23。改用int,hour<0,hour=23。
只改动了主函数,如下:
#include "stm32f10x.h"
#include "lcd.h"
#include "tx.h"
#include "i2c.h"
#include "stdio.h"
u32 TimingDelay = 0;
u16 time;
u8 hour,min,sec;
int t_hour=11,t_min=59,t_sec=50; //设置时间
int a_hour,a_min,a_sec; //闹钟时间
u16 set_cnt=0; //时间设置次数
u16 alarm_cnt=0; //闹钟设置次数
u16 LED_MODE=0xffff;
u8 SET_flag=0;//0-Main,1-RTC_setting,2-alarm-setting
u8 time_flag=0;//0-时,1-分,2-秒
u8 alarm_flag=0;//0-时,1-分,2-秒
u8 key1_flag=0;//0-设置,1-切换时分秒
u8 key2_flag=1;//0-设置,1-切换时分秒
u8 Led1_flag=1;
u8 Led2_flag=0;
u8 Led3_flag=0;
u8 RXD_flag=0;
u8 RXD_buf[20];
u8 str[20];
u8 i;
u8 ms200_flag=1;
u8 s1_flag=0;
void Usart_action(int code);
void Show_main(void);
void Show_rtc_setting(void);
void Show_alarm_setting(void);
void Led_action(void);
void Delay_Ms(u32 nTime);
void Key_action(int code,u8 sta);
//Main Body
int main(void)
{
SysTick_Config(SystemCoreClock/1000);
Delay_Ms(200);
STM3210B_LCD_Init();
LCD_Clear(Blue);
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
i2c_init();
KEY_Init();
LED_Init();
RTC_Init(11,59,50);
Tim4_Init(2000,72);
Usart2_Init();
set_cnt=i2c_read(0x00);Delay_Ms(5);
a_hour=i2c_read(0x02);Delay_Ms(5);
a_min=i2c_read(0x03);Delay_Ms(5);
a_sec=i2c_read(0x04);Delay_Ms(5);
alarm_cnt=i2c_read(0x01);Delay_Ms(5);
set_cnt=0;
alarm_cnt=0;
while(1){
KEY_Driver();
if(ms200_flag){
ms200_flag=0;
Led_action();
if(SET_flag==0)
Show_main();
else if(SET_flag==1)
Show_rtc_setting();