蓝桥杯嵌入式第十一届省赛模拟试题(修正版)

第一次写的链接:蓝桥杯嵌入式第十一届省赛模拟试题
再做的时候,感觉之前的有些功能没实现:
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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值