基于STM32的多功能数字钟(中文版)
ude "text.h"
//时间结构体
typedef struct
{
vu8 s_hour;
vu8 s_min;
vu8 s_sec;
//公历日月年周
vu16 s_year;
vu8 s_month;
vu8 s_date;
vu8 s_week;
vu8 s_al_min;
vu8 s_al_sec;
}Timer;
Timer S_timer;
unsigned char flag_20ms=0x0,flag_500ms=0,flag_250ms=0,flag_1s=0;//定时标志
unsigned char flag_key0=0,flag_key1=0,flag_key2=0,flag_tiao=0,key_remot=0;
void Disp_Tiao_Shan(void);
void Load_Drow_Dialog(void);
int main(void)
{
unsigned char temp[12],sec_back=0xff,t=0,len=0;
short temp5;
delay_init();
NVIC_Configuration();
uart_init(9600);
Led_Init();
key_init();
Timer2_config(71,2000); //定时两毫秒
mem_init();
SPI_Flash_Init();
SD_Initialize();
exfuns_init();
DS18B20_Init();
Remote_Init();
AT24CXX_Init();
RTC_Init();
LCD_Init();
LCD_Clear(BLUE);
TP_Init();
POINT_COLOR=RED;
BACK_COLOR=BLUE;
if(!FONT_init())
printf("字库OK!、\r\n");
else
{
if(!update_FONT(10,30,16))
printf("字库更新完毕!、\r\n");
}
Show_Str(10,30,220,24,"--多功能数字钟--",24,0);
Show_Str(30,70,230,24,"作者:王庐山 16/08/18",16,0);
Show_Str(10,100,220,24,"日期: 年 月 日",24,0);
Show_Str(10,140,220,24,"时间: 时 分 秒 ",24,0);
Show_Str(55,260,150,24,"设置 加 减",24,0);
calendar.al_hour=AT24CXX_ReadOneByte(0x0000);//从24C02中读出闹铃时间
calendar.al_min=AT24CXX_ReadOneByte(0x0001);
// POINT_COLOR=YELLOW ;
LCD_DrawRectangle(50,250,100,290);
LCD_DrawRectangle(110,250,160,290);
LCD_DrawRectangle(170,250,220,290);
f_mount(fs[0],"0:",1);
f_mount(fs[1],"1:",1);
while(1)
{
if(tp_dev.sta&TP_PRES_DOWN)//有触摸按下状态。
{//按下时,方框的颜色要发生变化,这样看效果才明显示,
//手松开后,又要恢复原画的颜色。
if((tp_dev.x[0]>50)&&(tp_dev.x[0]<100)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))
{LCD_Fill(51,251,99,289,YELLOW);Show_Str(55,260,48,24,"设置",24,0);}
else if((tp_dev.x[0]>110)&&(tp_dev.x[0]<160)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))
{LCD_Fill(111,251,159,289,YELLOW);Show_Str(120,260,48,24,"加",24,0);}
else if((tp_dev.x[0]>170)&&(tp_dev.x[0]<220)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))
{LCD_Fill(171,251,219,289,YELLOW);Show_Str(180,260,48,24,"减",24,0);}
}
if((USART_RX_STA&0x8000))//收到了一帧串行口数据,进行解析。
{
switch(USART_RX_BUF[0])
{
case t:{//time是调时间
S_timer.s_hour=(USART_RX_BUF[1]-0)*10+(USART_RX_BUF[2]-0);
S_timer.s_min=(USART_RX_BUF[3]-0)*10+(USART_RX_BUF[4]-0);
S_timer.s_sec=(USART_RX_BUF[5]-0)*10+(USART_RX_BUF[6]-0);
USART_RX_STA=0;
printf("set time:%s",USART_RX_BUF);
calendar.sec=S_timer.s_sec;
calendar.hour=S_timer.s_hour;
calendar.min=S_timer.s_min;
calendar.w_date=S_timer.s_date;
calendar.w_month=S_timer.s_month;
calendar.w_year=S_timer.s_year;
calendar.week=S_timer.s_week;
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);
break;
}
case d:{//date是调日期
S_timer.s_year =(USART_RX_BUF[1]-0)*1000+(USART_RX_BUF[2]-0)*100+(USART_RX_BUF[3]-0)*10+(USART_RX_BUF[4]-0);
S_timer.s_month=(USART_RX_BUF[5]-0)*10+(USART_RX_BUF[6]-0);
S_timer.s_date=(USART_RX_BUF[7]-0)*10+(USART_RX_BUF[8]-0);
USART_RX_STA=0;
printf("set date:%s",USART_RX_BUF);
calendar.sec=S_timer.s_sec;
calendar.hour=S_timer.s_hour;
calendar.min=S_timer.s_min;
calendar.w_date=S_timer.s_date;
calendar.w_month=S_timer.s_month;
calendar.w_year=S_timer.s_year;
calendar.week=S_timer.s_week;
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);
break;
}
default :break;
}
}
if(flag_tiao!=0)//用于调节时闪烁显示
{
switch(flag_tiao)
{
STM32数字钟中文 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)