初级会员
- 积分
- 59
- 金钱
- 59
- 注册时间
- 2017-5-18
- 在线时间
- 16 小时
|
1金钱
我是在BUILDER的模板上自己设计了一个背景,只贴了图片,没有贴其他的控件,之后生成了.C文件,在EMWIN_DEMO里把下面的文件夹改了,之后在HARDWARE添加了ds18b20.c,pcf8574.c,头文件路径也加了,主函数如下:因为第一次自己动手改程序,现在完全不知道该怎么办,视频,教程也都看了,每个模块单独改我还是会的,但是如果需要两个功能合并到一起就不知道该怎么改,希望麻烦大神提点一二!
板子是阿波罗F429,触摸屏是7寸RGB TFTLCD.
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "tftlcd.h"
#include "timer.h"
#include "sdram.h"
#include "malloc.h"
#include "touch.h"
#include "GUI.h"
#include "WM.h"
#include "FramewinDLG.h"
#include "includes.h"
#include "DIALOG.h"
#include "pcf8574.h"
#include "ds18b20.h"
/************************************************
ALIENTEK STM32开发板STemWin实验
STemWin GUIBulider使用
UCOSIII中以下优先级用户程序不能使用,ALIENTEK
将这些优先级分配给了UCOSIII的5个系统内部任务
优先级0:中断服务服务管理任务 OS_IntQTask()
优先级1:时钟节拍任务 OS_TickTask()
优先级2:定时任务 OS_TmrTask()
优先级OS_CFG_PRIO_MAX-2:统计任务 OS_StatTask()
优先级OS_CFG_PRIO_MAX-1:空闲任务 OS_IdleTask()
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司
作者:正点原子 @ALIENTEK
************************************************/
//任务优先级
#define START_TASK_PRIO 3
//任务堆栈大小
#define START_STK_SIZE 128
//任务控制块
OS_TCB StartTaskTCB;
//任务堆栈
CPU_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *p_arg);
//TOUCH任务
//设置任务优先级
#define TOUCH_TASK_PRIO 4
//任务堆栈大小
#define TOUCH_STK_SIZE 128
//任务控制块
OS_TCB TouchTaskTCB;
//任务堆栈
CPU_STK TOUCH_TASK_STK[TOUCH_STK_SIZE];
//touch任务
void touch_task(void *p_arg);
//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO 5
//任务堆栈大小
#define LED0_STK_SIZE 128
//任务控制块
OS_TCB Led0TaskTCB;
//任务堆栈
CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
//led0任务
void led0_task(void *p_arg);
//FRAMEWIN任务
//设置任务优先级
#define FRAMEWIN_TASK_PRIO 6
//任务堆栈大小
#define FRAMEWIN_STK_SIZE 512
//任务控制块
OS_TCB FRAMEWINTaskTCB;
//任务堆栈
CPU_STK FRAMEWIN_TASK_STK[FRAMEWIN_STK_SIZE];
//mijikaofang_task任务
void FRAMEWIN_task(void *p_arg);
//DS18B20任务
//设置任务优先级
#define DS18B20_TASK_PRIO 7
//任务堆栈大小
#define DS18B20_STK_SIZE 512
//任务控制块
OS_TCB DS18B20TaskTCB;
//任务堆栈
CPU_STK DS18B20_TASK_STK[DS18B20_STK_SIZE];
//emwindemo_task任务
void DS18B20_task(void *p_arg);
int main(void)
{
OS_ERR err;
CPU_SR_ALLOC();
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
HAL_Init(); //初始化HAL库
delay_init(180); //初始化延时函数
uart_init(115200); //初始化USART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
SDRAM_Init(); //SDRAM初始化
TFTLCD_Init(); //LCD初始化
TP_Init(); //触摸屏初始化
my_mem_init(SRAMIN); //初始化内部内存池
my_mem_init(SRAMEX); //初始化外部内存池
my_mem_init(SRAMCCM); //初始化CCM内存池
OSInit(&err); //初始化UCOSIII
OS_CRITICAL_ENTER(); //进入临界区
//创建开始任务
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"start task", //任务名字
(OS_TASK_PTR )start_task, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[0], //任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )&err); //存放该函数错误时的返回值
OS_CRITICAL_EXIT(); //退出临界区
OSStart(&err); //开启UCOSIII
while(1);
}
//开始任务函数
void start_task(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCPUUsageInit(&err); //统计任务
#endif
#ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间
CPU_IntDisMeasMaxCurReset();
#endif
#if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候
//使能时间片轮转调度功能,设置默认的时间片长度
OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif
__HAL_RCC_CRC_CLK_ENABLE(); //使能CRC时钟
GUI_Init(); //STemWin初始化
WM_MULTIBUF_Enable(1); //开启STemWin多缓冲,RGB屏可能会用到
OS_CRITICAL_ENTER(); //进入临界区
//触摸屏任务
OSTaskCreate((OS_TCB* )&TouchTaskTCB,
(CPU_CHAR* )"Touch task",
(OS_TASK_PTR )touch_task,
(void* )0,
(OS_PRIO )TOUCH_TASK_PRIO,
(CPU_STK* )&TOUCH_TASK_STK[0],
(CPU_STK_SIZE)TOUCH_STK_SIZE/10,
(CPU_STK_SIZE)TOUCH_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
//LED0任务
OSTaskCreate((OS_TCB* )&Led0TaskTCB,
(CPU_CHAR* )"Led0 task",
(OS_TASK_PTR )led0_task,
(void* )0,
(OS_PRIO )LED0_TASK_PRIO,
(CPU_STK* )&LED0_TASK_STK[0],
(CPU_STK_SIZE)LED0_STK_SIZE/10,
(CPU_STK_SIZE)LED0_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
//DS18B20任务
OSTaskCreate((OS_TCB* )&DS18B20TaskTCB,
(CPU_CHAR* )"DS18B20 task",
(OS_TASK_PTR )DS18B20_task,
(void* )0,
(OS_PRIO )DS18B20_TASK_PRIO,
(CPU_STK* )&DS18B20_TASK_STK[0],
(CPU_STK_SIZE)DS18B20_STK_SIZE/10,
(CPU_STK_SIZE)DS18B20_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
//STemWin Demo任务
OSTaskCreate((OS_TCB* )&FRAMEWINTaskTCB,
(CPU_CHAR* )"FRAMEWIN task",
(OS_TASK_PTR )FRAMEWIN_task,
(void* )0,
(OS_PRIO )FRAMEWIN_TASK_PRIO,
(CPU_STK* )&FRAMEWIN_TASK_STK[0],
(CPU_STK_SIZE)FRAMEWIN_STK_SIZE/10,
(CPU_STK_SIZE)FRAMEWIN_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err); //挂起开始任务
OS_CRITICAL_EXIT(); //退出临界区
}
//FRAMEWIN任务
void FRAMEWIN_task(void *p_arg)
{
//更换皮肤
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
MENU_SetDefaultSkin(MENU_SKIN_FLEX);
MULTIPAGE_SetDefaultSkin(MULTIPAGE_SKIN_FLEX);
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
SPINBOX_SetDefaultSkin(SPINBOX_SKIN_FLEX);
CreateFRAMEWIN();
while(1)
{
GUI_Delay(100);
}
}
//TOUCH任务
void touch_task(void *p_arg)
{
OS_ERR err;
while(1)
{
GUI_TOUCH_Exec();
OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);//延时5ms
}
}
//LED0任务
void led0_task(void *p_arg)
{
OS_ERR err;
while(1)
{
LED0 = !LED0;
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//延时500ms
}
}
//DS18B20任务
void DS18B20_task(void *p_arg)
{
u8 t=0;
short temperature;
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
uart_init(115200); //初始化USART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
SDRAM_Init(); //初始化SDRAM
LCD_Init(); //初始化LCD
PCF8574_Init(); //初始化PCF8574
POINT_COLOR=RED;
PCF8574_ReadBit(BEEP_IO); //由于DS18B20和PCF8574的中断引脚共用一个IO,
//所以在初始化DS18B20之前要先读取一次PCF8574的任意一个IO,
//使其释放掉中断引脚所占用的IO(PB12引脚),否则初始化DS18B20会出问题
while(DS18B20_Init()) //DS18B20初始化
{
LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
delay_ms(200);
LCD_Fill(30,130,239,130+16,BLACK);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(30,150,200,16,16,"Temp: . C");
while(1)
{
if(t%10==0)//每100ms读取一次
{
PCF8574_ReadBit(BEEP_IO); //读取一次PCF8574的任意一个IO,使其释放掉PB12引脚,否则读取DS18B20可能会出问题
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
LCD_ShowChar(30+40,150,'-',16,0); //显示负号
temperature=-temperature; //转为正数
}else LCD_ShowChar(30+40,150,' ',16,0); //去掉负号
LCD_ShowNum(30+40+8,150,temperature/10,2,16); //显示正数部分
LCD_ShowNum(30+40+32,150,temperature%10,1,16); //显示小数部分
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
LED0=!LED0;
}
}
}
|
-
-
|