|
/*
*********************************************************************************************************
*
* 模块名称 : 主程序模块。
* 文件名称 : main.c
* 版 本 : V2.0
* 说 明 : 触摸屏例程,支持3.0、4.3和7.0寸屏。
* 其中3.0寸屏的触摸芯片是TSC2046;
* 4.3和7寸屏的驱动是RA8875,触摸是RA8875内置。
* 修改记录 :
* 版本号 日期 作者 说明
* v1.0 2012-08-08 armfly ST固件库V3.5.0版本。
*
* Copyright (C), 2012-2013, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
#include "stm32f4xx.h" /* 如果要用ST的固件库,必须包含这个文件 */
#include <stdio.h> /* 因为用到了printf函数,所以必须包含这个文件 */
#include <string.h> /* 因为用到了strcpy函数,所以必须包含这个文件 */
#include "bsp.h" /* printf函数定向输出到串口,所以必须包含这个文件 */
#include "images.h" /* 图标文件 */
#include "num_pad.h"
/* 定义例程名和例程发布日期 */
#define EXAMPLE_NAME "F4-018_TFT触摸屏例程(支持4.3寸、7寸屏)"
#define EXAMPLE_DATE "2012-08-08"
#define DEMO_VER "1.0"
/* 定义界面结构 */
typedef struct
{
FONT_T FontBlack; /* 静态的文字 */
FONT_T FontBlue; /* 变化的文字字体 */
FONT_T FontRed;
FONT_T FontBtn; /* 按钮的字体 */
FONT_T FontBox; /* 分组框标题字体 */
GROUP_T Box1;
LABEL_T Label1; LABEL_T Label2;
LABEL_T Label3; LABEL_T Label4;
LABEL_T Label5; LABEL_T Label6;
LABEL_T Label7; LABEL_T Label8;
LABEL_T Label9;
EDIT_T Edit1; /* 日期 */
EDIT_T Edit2; /* 时间 */
BUTTON_T Btn1; /* 拨号 */
BUTTON_T Btn2; /* 挂机 */
BUTTON_T Btn3; /* 切换音频通道 */
BUTTON_T BtnRet; /* 返回 */
char strHardInfo[32]; /* 模块硬件信息 */
uint8_t ucNetStatus; /* 网络状态 */
uint8_t ucAudioCh; /* 当前音频通道 0, 1 */
uint8_t ucEarVolume; /* 耳机音量 0 - 5 */
int16_t ucMicGain; /* MIC音量 -12:最小增益 12:最大增益 13:静音*/
}FormFJ_T;
/* 窗体背景色 */
#define FORM_BACK_COLOR CL_BTN_FACE
/* 框的坐标和大小 */
#define BOX1_X 5
#define BOX1_Y 8
#define BOX1_H (g_LcdHeight - BOX1_Y - 10)
#define BOX1_W (g_LcdWidth - 2 * BOX1_X)
#define BOX1_TEXT "测试程序"
/* 返回按钮的坐标(屏幕右下角) */
#define BTN_RET_H 32
#define BTN_RET_W 60
#define BTN_RET_X ((BOX1_X + BOX1_W) - BTN_RET_W - 4)
#define BTN_RET_Y ((BOX1_Y + BOX1_H) - BTN_RET_H - 4)
#define BTN_RET_TEXT "返回"
#define LABEL1_X (BOX1_X + 8)
#define LABEL1_Y (BOX1_Y + 30)
#define LABEL1_TEXT "日期"
#define LABEL2_X (LABEL1_X)
#define LABEL2_Y (LABEL1_Y + 30 * 1)
#define LABEL2_TEXT "时间"
#define LABEL3_X (LABEL1_X + 50)
#define LABEL3_Y (BOX1_Y + 30)
#define LABEL3_TEXT ""
#define LABEL4_X (LABEL2_X + 50)
#define LABEL4_Y (LABEL1_Y + 30 * 1)
#define LABEL4_TEXT ""
/* Edit */
#define EDIT1_X (LABEL1_X + 50)
#define EDIT1_Y (LABEL1_Y - 50)
#define EDIT1_H 20
#define EDIT1_W 90
#define EDIT2_X (LABEL2_X + 50)
#define EDIT2_Y (LABEL2_Y - 50)
#define EDIT2_H 20
#define EDIT2_W 90
static void InitFormFJ(void);
static void DispFJInitFace(void);
static void DispFJStatus(void);
FormFJ_T *FormFJ;
extern uint8_t aShowTime[8]; /* 在文件bsp_rtc里面 */
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: c程序入口
* 形 参:无
* 返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
uint8_t fRefresh;
FormFJ_T form;
FormFJ = &form;
/*
由于ST固件库的启动文件已经执行了CPU系统时钟的初始化,所以不必再次重复配置系统时钟。
启动文件 startup_stm32f4xx.s 会调用 system_stm32f4xx.c 中的 void SystemInit(void)。
SystemInit()函数配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。
安富莱STM32-V5开发板主晶振是25MHz, 内部PLL倍频到168MHz。如果需要更改主频,可以修改下面的文件:
\User\bsp_stm32f4xx\system_stm32f4xx.c
文件开头的几个宏是PLL倍频参数,修改这些宏就可以修改主频,无需更改硬件。
*/
bsp_Init();
LCD_InitHard(); /* 初始化显示器硬件(配置GPIO和FSMC,给LCD发送初始化指令) */
TOUCH_InitHard();
LCD_ClrScr(CL_BTN_FACE);
InitFormFJ();
DispFJInitFace();
fRefresh = 1;
bsp_StartAutoTimer(0, 500); /* 每秒定时显示GPS状态 */
while (1)
{
bsp_Idle();
if (bsp_CheckTimer(0) || (fRefresh == 1))
{
fRefresh = 0;
DispFJStatus();
fRefresh = 1;
}
}
}
/*
*********************************************************************************************************
* 函 数 名: DispADStatus
* 功能说明: 显示AD7606状态
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void DispFJStatus(void)
{
char buf[128];
RTC_DateShow();sprintf(buf, "%s", aShowTime);FormFJ->Label3.pCaption = buf;
LCD_DrawLabel(&FormFJ->Label3);
RTC_TimeShow();sprintf(buf, "%s", aShowTime);FormFJ->Label4.pCaption = buf;
LCD_DrawLabel(&FormFJ->Label4);
}
/*
*********************************************************************************************************
* 函 数 名: InitFormFJ
* 功能说明: 初始化控件属性
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void InitFormFJ(void)
{
/* 分组框标题字体 */
FormFJ->FontBox.FontCode = FC_ST_16;
FormFJ->FontBox.BackColor = CL_BTN_FACE; /* 和背景色相同 */
FormFJ->FontBox.FrontColor = CL_BLACK;
FormFJ->FontBox.Space = 0;
/* 字体1 用于静止标签 */
FormFJ->FontBlack.FontCode = FC_ST_16;
FormFJ->FontBlack.BackColor = CL_MASK; /* 透明色 */
FormFJ->FontBlack.FrontColor = CL_BLACK;
FormFJ->FontBlack.Space = 0;
/* 字体2 用于变化的文字 */
FormFJ->FontBlue.FontCode = FC_ST_16;
FormFJ->FontBlue.BackColor = CL_BTN_FACE;
FormFJ->FontBlue.FrontColor = CL_BLUE;
FormFJ->FontBlue.Space = 0;
FormFJ->FontRed.FontCode = FC_ST_16;
FormFJ->FontRed.BackColor = CL_BTN_FACE;
FormFJ->FontRed.FrontColor = CL_RED;
FormFJ->FontRed.Space = 0;
/* 按钮字体 */
FormFJ->FontBtn.FontCode = FC_ST_16;
FormFJ->FontBtn.BackColor = CL_MASK; /* 透明背景 */
FormFJ->FontBtn.FrontColor = CL_BLACK;
FormFJ->FontBtn.Space = 0;
/* 分组框 */
FormFJ->Box1.Left = BOX1_X;
FormFJ->Box1.Top = BOX1_Y;
FormFJ->Box1.Height = BOX1_H;
FormFJ->Box1.Width = BOX1_W;
FormFJ->Box1.pCaption = BOX1_TEXT;
FormFJ->Box1.Font = &FormFJ->FontBox;
/* 静态标签 */
FormFJ->Label1.Left = LABEL1_X;
FormFJ->Label1.Top = LABEL1_Y;
FormFJ->Label1.MaxLen = 0;
FormFJ->Label1.pCaption = LABEL1_TEXT;
FormFJ->Label1.Font = &FormFJ->FontBlack;
FormFJ->Label2.Left = LABEL2_X;
FormFJ->Label2.Top = LABEL2_Y;
FormFJ->Label2.MaxLen = 0;
FormFJ->Label2.pCaption = LABEL2_TEXT;
FormFJ->Label2.Font = &FormFJ->FontBlack;
FormFJ->Label3.Left = LABEL3_X;
FormFJ->Label3.Top = LABEL3_Y;
FormFJ->Label3.MaxLen = 0;
FormFJ->Label3.pCaption = LABEL3_TEXT;
FormFJ->Label3.Font = &FormFJ->FontBlack;
FormFJ->Label4.Left = LABEL4_X;
FormFJ->Label4.Top = LABEL4_Y;
FormFJ->Label4.MaxLen = 0;
FormFJ->Label4.pCaption = LABEL4_TEXT;
FormFJ->Label4.Font = &FormFJ->FontBlack;
/* 按钮 */
FormFJ->BtnRet.Left = BTN_RET_X;
FormFJ->BtnRet.Top = BTN_RET_Y;
FormFJ->BtnRet.Height = BTN_RET_H;
FormFJ->BtnRet.Width = BTN_RET_W;
FormFJ->BtnRet.pCaption = BTN_RET_TEXT;
FormFJ->BtnRet.Font = &FormFJ->FontBtn;
FormFJ->BtnRet.Focus = 0;
/* 编辑框 */
FormFJ->Edit1.Left = EDIT1_X;
FormFJ->Edit1.Top = EDIT1_Y;
FormFJ->Edit1.Height = EDIT1_H;
FormFJ->Edit1.Width = EDIT1_W;
sprintf(FormFJ->Edit1.Text, "13-01-01");
FormFJ->Edit1.pCaption = FormFJ->Edit1.Text;
FormFJ->Edit1.Font = &FormFJ->FontBtn;
FormFJ->Edit2.Left = EDIT2_X;
FormFJ->Edit2.Top = EDIT2_Y;
FormFJ->Edit2.Height = EDIT2_H;
FormFJ->Edit2.Width = EDIT2_W;
sprintf(FormFJ->Edit2.Text, "00:00:00");
FormFJ->Edit2.pCaption = FormFJ->Edit2.Text;
FormFJ->Edit2.Font = &FormFJ->FontBtn;
}
/*
*********************************************************************************************************
* 函 数 名: DispFormFJ
* 功能说明: 显示所有的控件
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void DispFJInitFace(void)
{
//LCD_ClrScr(CL_BTN_FACE);
/* 分组框 */
LCD_DrawGroupBox(&FormFJ->Box1);
/* 静态标签 */
LCD_DrawLabel(&FormFJ->Label1);
LCD_DrawLabel(&FormFJ->Label2);
// LCD_DrawLabel(&FormFJ->Label3);
// LCD_DrawLabel(&FormFJ->Label4);
/* 按钮 */
LCD_DrawButton(&FormFJ->BtnRet);
// /* 编辑框 */
// LCD_DrawEdit(&FormFJ->Edit1);
// LCD_DrawEdit(&FormFJ->Edit2);
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
实时显示RTC,结果显示出来字符重叠了。
我对照其他程序,一直找不出问题,求解答…… |
|