找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2020|回复: 0
打印 上一主题 下一主题
收起左侧

EMWIN灯控实验源程序

[复制链接]
跳转到指定楼层
楼主
ID:517846 发表于 2019-10-27 20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
简单灯控实验

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "ILI93xx.h"
  6. #include "usart.h"         
  7. #include "24cxx.h"
  8. #include "flash.h"
  9. #include "touch.h"
  10. #include "timer.h"
  11. #include "malloc.h"
  12. #include "GUI.h"
  13. #include "ff.h"
  14. #include "MMC_SD.h"
  15. #include "fontupd.h"
  16. #include "exfuns.h"
  17. #include "includes.h"
  18. #include "Button_USE.h"
  19. #include "WM.h"
  20. #include "DIALOG.h"

  21. //任务优先级
  22. #define START_TASK_PRIO                                3
  23. //任务堆栈大小       
  24. #define START_STK_SIZE                                 128
  25. //任务控制块
  26. OS_TCB StartTaskTCB;
  27. //任务堆栈       
  28. CPU_STK START_TASK_STK[START_STK_SIZE];
  29. //任务函数
  30. void start_task(void *p_arg);

  31. //TOUCH任务
  32. //设置任务优先级
  33. #define TOUCH_TASK_PRIO                                4
  34. //任务堆栈大小
  35. #define TOUCH_STK_SIZE                                128
  36. //任务控制块
  37. OS_TCB TouchTaskTCB;
  38. //任务堆栈
  39. CPU_STK TOUCH_TASK_STK[TOUCH_STK_SIZE];
  40. //touch任务
  41. void touch_task(void *p_arg);

  42. //LED0任务
  43. //设置任务优先级
  44. #define LED0_TASK_PRIO                                 5
  45. //任务堆栈大小
  46. #define LED0_STK_SIZE                                128
  47. //任务控制块
  48. OS_TCB Led0TaskTCB;
  49. //任务堆栈
  50. CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
  51. //led0任务
  52. void led0_task(void *p_arg);

  53. //EMWINDEMO任务
  54. //设置任务优先级
  55. #define EMWINDEMO_TASK_PRIO                        6
  56. //任务堆栈大小
  57. #define EMWINDEMO_STK_SIZE                        512
  58. //任务控制块
  59. OS_TCB EmwindemoTaskTCB;
  60. //任务堆栈
  61. CPU_STK EMWINDEMO_TASK_STK[EMWINDEMO_STK_SIZE];
  62. //emwindemo_task任务
  63. void emwindemo_task(void *p_arg);


  64. int main(void)
  65. {         
  66.         OS_ERR err;
  67.         CPU_SR_ALLOC();
  68.        
  69.         delay_init();                    //延时函数初始化          
  70.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  71.         uart_init(115200);                 //串口初始化为115200
  72.         LED_Init();                            //LED端口初始化
  73.         TFTLCD_Init();                        //LCD初始化       
  74.         KEY_Init();                                 //按键初始化
  75.         mem_init();                                //初始化内部内存池

  76.         TP_Init();                                //触摸屏初始化
  77.        
  78.         OSInit(&err);                        //初始化UCOSIII
  79.         OS_CRITICAL_ENTER();        //进入临界区
  80.         //创建开始任务
  81.         OSTaskCreate((OS_TCB         * )&StartTaskTCB,                //任务控制块
  82.                                  (CPU_CHAR        * )"start task",                 //任务名字
  83.                  (OS_TASK_PTR )start_task,                         //任务函数
  84.                  (void                * )0,                                        //传递给任务函数的参数
  85.                  (OS_PRIO          )START_TASK_PRIO,     //任务优先级
  86.                  (CPU_STK   * )&START_TASK_STK[0],        //任务堆栈基地址
  87.                  (CPU_STK_SIZE)START_STK_SIZE/10,        //任务堆栈深度限位
  88.                  (CPU_STK_SIZE)START_STK_SIZE,                //任务堆栈大小
  89.                  (OS_MSG_QTY  )0,                                        //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
  90.                  (OS_TICK          )0,                                        //当使能时间片轮转时的时间片长度,为0时为默认长度,
  91.                  (void           * )0,                                        //用户补充的存储区
  92.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
  93.                  (OS_ERR         * )&err);                                //存放该函数错误时的返回值
  94.         OS_CRITICAL_EXIT();        //退出临界区         
  95.         OSStart(&err);  //开启UCOSIII
  96.         while(1);
  97. }

  98. //开始任务函数
  99. void start_task(void *p_arg)
  100. {
  101.         OS_ERR err;
  102.         CPU_SR_ALLOC();
  103.         p_arg = p_arg;

  104.         CPU_Init();
  105. #if OS_CFG_STAT_TASK_EN > 0u
  106.    OSStatTaskCPUUsageInit(&err);          //统计任务               
  107. #endif
  108.        
  109. #ifdef CPU_CFG_INT_DIS_MEAS_EN                //如果使能了测量中断关闭时间
  110.     CPU_IntDisMeasMaxCurReset();       
  111. #endif

  112. #if        OS_CFG_SCHED_ROUND_ROBIN_EN  //当使用时间片轮转的时候
  113.          //使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms
  114.         OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
  115. #endif               
  116.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//开启CRC时钟
  117.         GUI_Init();                          //STemWin初始化
  118.        
  119.         OS_CRITICAL_ENTER();        //进入临界区
  120.         //STemWin Demo任务       
  121.         OSTaskCreate((OS_TCB*     )&EmwindemoTaskTCB,               
  122.                                  (CPU_CHAR*   )"Emwindemo task",                
  123.                  (OS_TASK_PTR )emwindemo_task,                        
  124.                  (void*       )0,                                       
  125.                  (OS_PRIO          )EMWINDEMO_TASK_PRIO,     
  126.                  (CPU_STK*    )&EMWINDEMO_TASK_STK[0],       
  127.                  (CPU_STK_SIZE)EMWINDEMO_STK_SIZE/10,       
  128.                  (CPU_STK_SIZE)EMWINDEMO_STK_SIZE,               
  129.                  (OS_MSG_QTY  )0,                                       
  130.                  (OS_TICK          )0,                                         
  131.                  (void*       )0,                                       
  132.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  133.                  (OS_ERR*     )&err);
  134.         //触摸屏任务
  135.         OSTaskCreate((OS_TCB*     )&TouchTaskTCB,               
  136.                                  (CPU_CHAR*   )"Touch task",                
  137.                  (OS_TASK_PTR )touch_task,                        
  138.                  (void*       )0,                                       
  139.                  (OS_PRIO          )TOUCH_TASK_PRIO,     
  140.                  (CPU_STK*    )&TOUCH_TASK_STK[0],       
  141.                  (CPU_STK_SIZE)TOUCH_STK_SIZE/10,       
  142.                  (CPU_STK_SIZE)TOUCH_STK_SIZE,               
  143.                  (OS_MSG_QTY  )0,                                       
  144.                  (OS_TICK          )0,                                         
  145.                  (void*       )0,                                       
  146.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  147.                  (OS_ERR*     )&err);                         
  148.         //LED0任务
  149.         OSTaskCreate((OS_TCB*     )&Led0TaskTCB,               
  150.                                  (CPU_CHAR*   )"Led0 task",                
  151.                  (OS_TASK_PTR )led0_task,                        
  152.                  (void*       )0,                                       
  153.                  (OS_PRIO          )LED0_TASK_PRIO,     
  154.                  (CPU_STK*    )&LED0_TASK_STK[0],       
  155.                  (CPU_STK_SIZE)LED0_STK_SIZE/10,       
  156.                  (CPU_STK_SIZE)LED0_STK_SIZE,               
  157.                  (OS_MSG_QTY  )0,                                       
  158.                  (OS_TICK          )0,                                         
  159.                  (void*       )0,                                       
  160.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  161.                  (OS_ERR*     )&err);

  162.         OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);                //挂起开始任务                         
  163.         OS_CRITICAL_EXIT();        //退出临界区
  164. }


  165. //EMWINDEMO任务
  166. void emwindemo_task(void *pdata)
  167. {
  168.         GUI_CURSOR_Show();
  169.         //更换皮肤
  170.         BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  171.         CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  172.         DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  173.         FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  174.         HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  175.         MENU_SetDefaultSkin(MENU_SKIN_FLEX);
  176.         MULTIPAGE_SetDefaultSkin(MULTIPAGE_SKIN_FLEX);
  177.         PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  178.         RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  179.         SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  180.         SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  181.         SPINBOX_SetDefaultSkin(SPINBOX_SKIN_FLEX);
  182.         while(1)
  183.         {
  184.                 Main_task();
  185.         }
  186. }

  187. //TOUCH任务
  188. void touch_task(void *p_arg)
  189. {
  190.         OS_ERR err;
  191.         while(1)
  192.         {
  193.                 GUI_TOUCH_Exec();       
  194.                 OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);//延时5ms
  195.         }
  196. }

  197. //LED0任务
  198. void led0_task(void *p_arg)
  199. {
  200.         OS_ERR err;
  201.         while(1)
  202.         {
  203.                 LED0 = !LED0;
  204.                 OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//延时500ms
  205.         }
  206. }
复制代码

所有资料51hei提供下载:
EMWIN灯控实验.7z (1.71 MB, 下载次数: 21)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表