微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于STM32的多功能数字钟(中文版)

基于STM32的多功能数字钟(中文版)

时间:11-18 来源:互联网 点击:

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)

{

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top