初始化程序包括key、lcd、rtc、usart2,led,EEPROM初始化 .c文件
.h文件
#ifndef __MYSOURCE_H#define __MYSOURCE_H#include "stm32f10x.h"#include "i2c.h"#include "lcd.h"#include "stdio.h"//读出按键值#define b1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)#define b2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)#define b3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)#define b4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)void sys_init(void);void led_control(u8 date);void rtc_init(void);void Time_Adjust(uint32_t THH,uint32_t TMM,uint32_t TSS);void w_04c02(u8 ad,u8 date);u8 r_04c02(u8 ad);void usart_init(void);void send_str(u8 *str);#endif中断处理函数
//RTC中断处理void RTC_IRQHandler(void){ if (RTC_GetITStatus(RTC_IT_SEC) != RESET) {/* Clear the RTC Second interrupt */RTC_ClearITPendingBit(RTC_IT_SEC);/* Wait until last write operation on RTC registers has finished */RTC_WaitForLastTask(); }} //滴答定时器中断处理函数void SysTick_Handler(void){TimingDelay--;//key3长短按键判断 if(key3_flag==1){ if(b3==0){ if( key3_hold_ms20) { key3_hold_ms=0; key3_long=0;key3_short=1; key3_flag=0; } else { key3_hold_ms=0; key3_long=0;key3_short=0; key3_flag=0; } }} //key4长短按键判断if(key4_flag==1){ if(b4==0){if(key4_hold_ms20) {key4_flag=0; key4_short=1; key4_long=0; key4_hold_ms=0; } else {key4_flag=0; key4_short=0; key4_long=0; key4_hold_ms=0; }}}if(led_show==1){if(++led_show_delay==1000) {led_show_delay=0;led_control(runled); runled^=0x01; }}else{led_show_delay=0;}}如果长短按键判断函数不明白可以参考这个博主的写法
主函数部分
#include "stm32f10x.h"#include "lcd.h"#include "mysource.h"u8 alarm_change=0;u8 rtc_change=0;u8 string[20];u32 TimingDelay = 0;//RTCsetting 时间int THH_temp=11,TMM_temp=59,TSS_temp=55;//警报时间int THH_temp_a=12,TMM_temp_a=00,TSS_temp_a=00;//setting,alarm等状态选择位置u8 sys_mode=0;//按键2按下标志u8 key2_flag=0;u8 key2_flag_i=1;//lcd显示标志 滴答定时器规定多少ms刷新一次u8 led_show=0;u16 led_show_delay=0;//led控制 0x00为全关,0x01为开led1,以此类推u8 runled =0x01;//按键1按下标志u8 key1_flag=0;u8 key1_flag_i=1;//按键3u8 key3_flag=0;//按下标志u16 key3_hold_ms=0;//按下时间u8 key3_long=0;//长按标志u8 key3_short=0;//短按标志//按键4u8 key4_flag=0;u16 key4_hold_ms=0;u8 key4_long=0;u8 key4_short=0;//rtc显函数void Time_Display(uint32_t TimeVar);void Delay_Ms(u32 nTime);//按键扫描void key_scan(void);int main(void){SysTick_Config(SystemCoreClock/1000);sys_init();led_control(0x00);//关闭所有ledrtc_init();usart_init();//eeprom 各个存储位置初始化if(r_04c02(0x39)!=243){ Delay_Ms(5);w_04c02(0x00,0); Delay_Ms(5);w_04c02(0x01,0);Delay_Ms(5);w_04c02(0x02,12);Delay_Ms(5);w_04c02(0x03,0);Delay_Ms(5);w_04c02(0x04,0);Delay_Ms(5);w_04c02(0x39,243);Delay_Ms(5);}//读出各个eeprom各个位置的数值rtc_change=r_04c02(0x00);Delay_Ms(5);alarm_change=r_04c02(0x01);Delay_Ms(5); THH_temp_a=r_04c02(0x02);Delay_Ms(5);TMM_temp_a=r_04c02(0x03);Delay_Ms(5);TSS_temp_a=r_04c02(0x04);Delay_Ms(5);while(1) {key_scan();//main 模式下 if(sys_mode==0) { LCD_DisplayStringLine(Line1,(unsigned char *)"MAIN"); Time_Display(RTC_GetCounter()); led_show=1; } if(key1_flag==1&&sys_mode==0) { key1_flag=0; sys_mode=1;//set led_show=0; LCD_DisplayStringLine(Line1,(unsigned char *)" RTC-SETTING"); sprintf((char*)string,"RTC: %0.2d:%0.2d:%0.2d",THH_temp,TMM_temp,TSS_temp);LCD_DisplayStringLine(Line4,string); }if(sys_mode==1){ led_control(0x02);if(key2_flag==1) {key2_flag=0; if(key2_flag_i==1) { LCD_SetTextColor(Red);//高亮显示LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); key2_flag_i=2; } else if(key2_flag_i==2) { LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); key2_flag_i=3; } else if(key2_flag_i==3) { LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30);key2_flag_i=1; } } if(key3_short==1) { key3_short=0;if(key2_flag_i==2) {THH_temp++; if(THH_temp==24) { THH_temp=0; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==3) {TMM_temp++; if(TMM_temp==60) {TMM_temp=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==1) {TSS_temp++; if(TSS_temp==60) {TSS_temp=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); } }if(key3_long==1){ key3_long=0;while(b3==0){ if(key2_flag_i==2) {THH_temp++; if(THH_temp==24) { THH_temp=0; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==3) {TMM_temp++; if(TMM_temp==60) {TMM_temp=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==1) {TSS_temp++; if(TSS_temp==60) {TSS_temp=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); } Delay_Ms(100);}}if(key4_short==1){ key4_short=0;if(key2_flag_i==2) {THH_temp--; if(THH_temp==-1) { THH_temp=23; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==3) {TMM_temp--; if(TMM_temp==-1) {TMM_temp=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==1) {TSS_temp--; if(TSS_temp==-1) {TSS_temp=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); }}if(key4_long==1){key4_long=0;while(b4==0){ if(key2_flag_i==2) {THH_temp--; if(THH_temp==-1) { THH_temp=23; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==3) {TMM_temp--; if(TMM_temp==-1) {TMM_temp=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); } else if(key2_flag_i==1) {TSS_temp--; if(TSS_temp==-1) {TSS_temp=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp%10+0x30); } Delay_Ms(100);}} }if(key1_flag==1&&sys_mode==1){key1_flag=0; sys_mode=0; led_show=1;Time_Adjust(THH_temp,TMM_temp,TSS_temp);rtc_change++;w_04c02(0x00,rtc_change);Delay_Ms(5);printf("New RTC:%0.2d:%0.2d:%0.2d\r\n",THH_temp,TMM_temp,TSS_temp);}if(key2_flag==1&&sys_mode==0){ key2_flag=0; sys_mode=2;//alarm led_show=0; LCD_DisplayStringLine(Line1,(unsigned char *)"ALARM-SETTING"); sprintf((char*)string," Alarm: %0.2d:%0.2d:%0.2d",THH_temp_a,TMM_temp_a,TSS_temp_a);LCD_DisplayStringLine(Line4,string);}if(sys_mode==2){led_control(0x04); if(key1_flag==1){ key1_flag=0; if(key1_flag_i==1) { LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); key1_flag_i=2; } else if(key1_flag_i==2) { LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); key1_flag_i=3; } else if(key1_flag_i==3) { LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30);key1_flag_i=1; }}if(key3_short==1){ key3_short=0;if(key1_flag_i==2) {THH_temp_a++; if(THH_temp_a==24) { THH_temp_a=0; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==3) {TMM_temp_a++; if(TMM_temp_a==60) {TMM_temp_a=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==1) {TSS_temp_a++; if(TSS_temp_a==60) {TSS_temp_a=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); }}if(key3_long==1){while(b3==0){ if(key1_flag_i==2) {THH_temp_a++; if(THH_temp_a==24) { THH_temp_a=0; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==3) {TMM_temp_a++; if(TMM_temp_a==60) {TMM_temp_a=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==1) {TSS_temp_a++; if(TSS_temp_a==60) {TSS_temp_a=0; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); } Delay_Ms(100);}}if(key4_short==1){key4_short=0;if(key1_flag_i==2) {THH_temp_a--; if(THH_temp_a==-1) { THH_temp_a=23; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==3) {TMM_temp_a--; if(TMM_temp_a==-1) {TMM_temp_a=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==1) {TSS_temp_a--; if(TSS_temp_a==-1) {TSS_temp_a=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); }}if(key4_long==1) {key4_long=0;while(b4==0){if(key1_flag_i==2) {THH_temp_a--; if(THH_temp_a==-1) { THH_temp_a=23; } LCD_SetTextColor(Red);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_SetTextColor(White); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==3) {TMM_temp_a--; if(TMM_temp_a==-1) {TMM_temp_a=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); } else if(key1_flag_i==1) {TSS_temp_a--; if(TSS_temp_a==-1) {TSS_temp_a=59; } LCD_SetTextColor(Red); LCD_DisplayChar(Line4,16*5,TSS_temp_a/10+0x30);LCD_DisplayChar(Line4,16*4,TSS_temp_a%10+0x30); LCD_SetTextColor(White);LCD_DisplayChar(Line4,16*11,THH_temp_a/10+0x30);LCD_DisplayChar(Line4,16*10,THH_temp_a%10+0x30); LCD_DisplayChar(Line4,16*8,TMM_temp_a/10+0x30);LCD_DisplayChar(Line4,16*7,TMM_temp_a%10+0x30); }Delay_Ms(100); } } }if(key2_flag==1&&sys_mode==2){ sys_mode=0;led_show=1; key2_flag=0;alarm_change++;w_04c02(0x01,alarm_change);Delay_Ms(5);w_04c02(0x02,THH_temp_a);Delay_Ms(5);w_04c02(0x03,TMM_temp_a);Delay_Ms(5);w_04c02(0x04,TSS_temp_a);Delay_Ms(5);printf("New Alarm:%0.2d:%0.2d:%0.2d\r\n",THH_temp_a,TMM_temp_a,TSS_temp_a);}}}//void Delay_Ms(u32 nTime){TimingDelay = nTime;while(TimingDelay != 0);}void Time_Display(uint32_t TimeVar){ uint32_t THH = 0, TMM = 0, TSS = 0;/* Reset RTC Counter when Time is 23:59:59 */ if (RTC_GetCounter() == 0x0001517F) { RTC_SetCounter(0x0); /* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); }/* Compute hours */ THH = TimeVar / 3600; /* Compute minutes */ TMM = (TimeVar % 3600) / 60; /* Compute seconds */ TSS = (TimeVar % 3600) % 60; sprintf((char*)string,"RTC: %0.2d:%0.2d:%0.2d",THH,TMM,TSS); LCD_DisplayStringLine(Line4,string);}void key_scan(void){ if(b1==0){ Delay_Ms(20);if(b1==0){key1_flag=1;}while(!b1);}else if(b2==0){ Delay_Ms(20);if(b2==0){key2_flag=1;}while(!b2);}else if(b3==0){ key3_flag=1;}else if(b4==0){ key4_flag=1;}}模拟题考察的逻辑,写的时候追求时限值(5小时),主要是按照自己想到的逻辑一步步往下写,没有进行函数封装,显得比较冗长。另外设置次数等虽然存储进去了EEPROM但是没有显示出来,还有定时上报没有体现,可以到特定时间,在lcd上警报。 最后附上完整工程文件