STM32实现万年历Word文档格式.docx

上传人:b****4 文档编号:18169000 上传时间:2022-12-13 格式:DOCX 页数:24 大小:36.25KB
下载 相关 举报
STM32实现万年历Word文档格式.docx_第1页
第1页 / 共24页
STM32实现万年历Word文档格式.docx_第2页
第2页 / 共24页
STM32实现万年历Word文档格式.docx_第3页
第3页 / 共24页
STM32实现万年历Word文档格式.docx_第4页
第4页 / 共24页
STM32实现万年历Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

STM32实现万年历Word文档格式.docx

《STM32实现万年历Word文档格式.docx》由会员分享,可在线阅读,更多相关《STM32实现万年历Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

STM32实现万年历Word文档格式.docx

voidApp_UCGUI_TaskCreate(void)

{

CPU_INT08Uos_err;

os_err=os_err;

Clock_SEM=OSSemCreate

(1);

//建立秒更新中断的信号量

//硬件平台初始化

BSP_Init();

//主处理任务---------------------------------------------------------

os_err=OSTaskCreateExt(AppTaskUserIF,

(void*)0,

(OS_STK*)&

AppTaskUserIFStk[APP_TASK_USER_IF_STK_SIZE-1],

APP_TASK_USER_IF_PRIO,

AppTaskUserIFStk[0],

APP_TASK_USER_IF_STK_SIZE,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

//触摸屏任务---------------------------------------------------------

os_err=OSTaskCreateExt(AppTaskKbd,

(void*)0,

(OS_STK*)&

AppTaskKbdStk[APP_TASK_KBD_STK_SIZE-1],

APP_TASK_KBD_PRIO,

AppTaskKbdStk[0],

APP_TASK_KBD_STK_SIZE,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

//秒更新任务

os_err=OSTaskCreateExt(Clock_Updata,

Clock_Updata_Stk[Clock_Updata_STK_SIZE-1],

Clock_Updata_PRIO,

Clock_Updata_Stk[0],

Clock_Updata_STK_SIZE,

}

万年历中的时间用的是STM32自带的RTC实时时钟。

1、主处理任务:

界面背景初始化,并根据当前时间,画出图1的数据。

staticvoidAppTaskUserIF(void*p_arg)

(void)p_arg;

INT8Uerr;

//界面初始化

GUI_Init();

//ucgui初始化

_ExecCalibration();

/*触摸屏校准*/

GUI_SetBkColor(GUI_WHITE);

//设置背景色

GUI_SetColor(GUI_GRAY);

//设置前景色

GUI_Clear();

//清屏

Lcd_show_bmp(0,0,"

/RTC.bmp"

);

//显示万年历背景

GUI_SetFont(&

GUI_FontHZ_SimSun_16);

GUI_DispStringAt("

一"

15,47);

//显示星期一

二"

44,47);

//显示星期二

三"

73,47);

//显示星期三

四"

102,47);

//显示星期四

五"

131,47);

//显示星期五

GUI_SetColor(GUI_RED);

//用红字显示周末

六"

160,47);

//显示星期六

日"

189,47);

//显示星期日

to_tm(RTC_GetCounter(),&

s_time);

//根据RTC时钟得到万年历时间的初值,注意,这个值是根据用户查询万年历变化

GUI_Font16_1);

//设置英文字体

GUI_DispDecAt(s_time.tm_year,4,13,4);

//显示万年历的年份

//设置中文字体

GUI_DispString("

年"

//显示年

GUI_DispDec(s_time.tm_mon,2);

//显示万年历的月份

月"

//显示月

GUI_DispDec(s_time.tm_mday,2);

//显示万年历的日子

//设置中文字体

//显示日

//画模拟时钟界面

u16index,x,y;

GUI_SetPenSize

(1);

GUI_DrawCircle(264,170,45);

//画时钟最外层的圆,

for(index=0;

index<

60;

index++)//画时钟的刻度

{

x=-(40*cos((index*6)*DEG2RAD))+264;

y=-(40*sin((index*6)*DEG2RAD))+170;

if(index%5==0)

{

GUI_SetPenSize(4);

//指示为小时的刻度用粗点画

}

else

GUI_SetPenSize

(2);

//其它刻度用西点画

GUI_DrawPoint(x,y);

while

(1)

RTC_Show(RTC_GetCounter());

//主任务执行程序,接下来分析

OSTimeDlyHMSM(0,0,0,10);

}

}

//主任务执行程序

voidRTC_Show(uint32_tTimeVar)

u8str[15];

//字符串暂存

u8i,k;

staticflag=0;

#if(GUI_SUPPORT_CURSOR|GUI_SUPPORT_TOUCH)

GUI_CURSOR_Show();

//鼠标显示

#endif

WM_SetCreateFlags(WM_CF_MEMDEV);

/*Automaticallyusememorydevicesonallwindows*/

if(flag==0)//初始化按键,只执行一次。

//建立按键F1-F5

_ahButton[0]=BUTTON_Create(5,0,32,13,GUI_KEY_F1,WM_CF_SHOW|WM_CF_STAYONTOP|WM_CF_MEMDEV);

_ahButton[1]=BUTTON_Create(5,29,32,13,GUI_KEY_F2,WM_CF_SHOW|WM_CF_STAYONTOP|WM_CF_MEMDEV);

_ahButton[2]=BUTTON_Create(53,0,16,13,GUI_KEY_F3,WM_CF_SHOW|WM_CF_STAYONTOP|WM_CF_MEMDEV);

_ahButton[3]=BUTTON_Create(53,29,16,13,GUI_KEY_F4,WM_CF_SHOW|WM_CF_STAYONTOP|WM_CF_MEMDEV);

_ahButton[4]=BUTTON_Create(85,0,16,13,GUI_KEY_F5,WM_CF_SHOW|WM_CF_STAYONTOP|WM_CF_MEMDEV);

_ahButton[5]=BUTTON_Create(85,29,16,13,GUI_KEY_F6,WM_CF_SHOW|WM_CF_STAYONTOP|WM_CF_MEMDEV);

//按键字体设置

BUTTON_SetFont(_ahButton[0],&

GUI_Font6x8);

//GUI_Font16_ASCII

BUTTON_SetFont(_ahButton[1],&

BUTTON_SetFont(_ahButton[2],&

BUTTON_SetFont(_ahButton[3],&

BUTTON_SetFont(_ahButton[4],&

BUTTON_SetFont(_ahButton[5],&

//按键背景色设置

BUTTON_SetBkColor(_ahButton[0],0,GUI_DARKMAGENTA);

//按键背景颜色

BUTTON_SetBkColor(_ahButton[1],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[2],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[3],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[4],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[5],0,GUI_DARKMAGENTA);

//按键前景色设置

BUTTON_SetTextColor(_ahButton[0],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[1],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[2],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[3],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[4],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[5],0,GUI_WHITE);

//按键显示字符

BUTTON_SetText(_ahButton[0],"

+"

BUTTON_SetText(_ahButton[1],"

-"

BUTTON_SetText(_ahButton[2],"

BUTTON_SetText(_ahButton[3],"

BUTTON_SetText(_ahButton[4],"

BUTTON_SetText(_ahButton[5],"

flag=1;

u8key=GUI_GetKey();

//实时获得触摸按键的值

if(key==40)//年数增加按钮

{

s_time.tm_year++;

//F1

if(s_time.tm_year>

2099)//超过围处理

s_time.tm_year=1970;

}

elseif(key==41)//年数减小按钮

s_time.tm_year--;

//F2

if(s_time.tm_year<

1900)//超过围处理

s_time.tm_year=2099;

elseif(key==42)//月数增加按钮

s_time.tm_mon++;

//F3

if(s_time.tm_mon>

12)//超过围处理

{

s_time.tm_mon=1;

}

elseif(key==43)//月数减小按钮

s_time.tm_mon--;

//F4

if(s_time.tm_mon<

0)//超过围处理

s_time.tm_mon=12;

elseif(key==44)//日数增加按钮

s_time.tm_mday++;

//F5

if(s_time.tm_mday>

getDays(s_time.tm_year,s_time.tm_mon))//超过围处理

s_time.tm_mday=1;

elseif(key==45)//日数减小按钮

s_time.tm_mday--;

//F6

if(s_time.tm_mday<

s_time.tm_mday=getDays(s_time.tm_year,s_time.tm_mon);

//显示万年历的年数

//显示年

//显示万年历的月数

//显示万年历的日数

"

GetChinaCalendarStr((u16)systmtime.tm_year,(u8)systmtime.tm_mon,(u8)systmtime.tm_mday,str);

//阳历转阴历

//见下面子程序1

GUI_DispString(str);

//显示阴历

//字体颜色

竹天笑万年历"

k=getWeekDay(s_time.tm_year,s_time.tm_mon,1);

//得到某年某月的第一天的星期数//见下面子程序2

GUI_GotoXY(18,69);

.//位置设定

//万年历日子显示

for(i=1;

i<

=40;

i++)//第一行最少显示一个,第六行最多显示二个,i的上限只需要大于37即可

if(i<

k+1||i>

getDays(s_time.tm_year,s_time.tm_mon)+k)//本月1号前和最后一天后的格子显示清零

{//见子程序3

GUI_DispString("

//显示空格,用于清除之前数据

else

if((i+1)%7==0||i%7==0)//如果为星期六和星期天,字体设置为红色

{

GUI_SetColor(GUI_RED);

}

else//否则为黑色

GUI_SetColor(GUI_BLACK);

if(i==s_time.tm_mday+k)//如果该天为所选日期,设置背景为黄色

GUI_SetBkColor(GUI_YELLOW);

GUI_DispDecSpace(i-k,2);

//显示日子

GUI_SetBkColor(GUI_WHITE);

//恢复之前背景色

GUI_GotoXY(GUI_GetDispPosX()+17,GUI_GetDispPosY());

//光标移动到下一个格子

if(i%7==0)

GUI_GotoXY(18,GUI_GetDispPosY()+27);

//7天换行显示

GUI_GotoXY(12,79);

//光标移动到下一行首行

GUI_FontHZ_SimSun_11);

//显示为初几,若为节气则显示节气

i++)

  "

//显示两个中文空格,占两个中文字符

if(GetJieQiDay((u16)s_time.tm_year,(u8)s_time.tm_mon,i-k,str)==1)//如果为节气

{//见子程序4

GUI_SetColor(GUI_MAGENTA);

//设置字体为橙色

else

GUI_SetColor(GUI_BLUE);

//正常显示蓝色

GUI_DispString(str);

//显示阴历号

//恢复背景色

GUI_GotoXY(GUI_GetDispPosX()+7,GUI_GetDispPosY());

GUI_GotoXY(12,GUI_GetDispPosY()+27);

WM_ExecIdle();

//刷新屏幕

#defineDEG2RAD(3.1415926f/180)

GUI_POINTm_Hour[2],m_Sec[2],m_Min[2];

//时分秒两个端点

staticGUI_POINTm_OldHour[2],m_OldMin[2],m_OldSec[2];

//时分秒之前的两个端点

m_Hour[0].x=-20*cos((systmtime.tm_hour*30+90)*DEG2RAD)+264;

//时钟指针端点计算,每一时旋转30

m_Hour[0].y=-20*sin((systmtime.tm_hour*30+90)*DEG2RAD)+170;

//度,逆时针旋转,当前时钟*30得旋

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1