久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3224|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

uCos-III移植到STM32輸出ds18b20溫度的源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:259898 發(fā)表于 2019-1-13 15:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我用stm32移植到ucos輸出18b20

單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "timer.h"
  7. #include "pwm.h"
  8. #include "includes.h"
  9. #include "ds18b20.h"   

  10. //UCOSIII中以下優(yōu)先級(jí)用戶程序不能使用,ALIENTEK
  11. //將這些優(yōu)先級(jí)分配給了UCOSIII的5個(gè)系統(tǒng)內(nèi)部任務(wù)
  12. //優(yōu)先級(jí)0:中斷服務(wù)服務(wù)管理任務(wù) OS_IntQTask()
  13. //優(yōu)先級(jí)1:時(shí)鐘節(jié)拍任務(wù) OS_TickTask()
  14. //優(yōu)先級(jí)2:定時(shí)任務(wù) OS_TmrTask()
  15. //優(yōu)先級(jí)OS_CFG_PRIO_MAX-2:統(tǒng)計(jì)任務(wù) OS_StatTask()
  16. //優(yōu)先級(jí)OS_CFG_PRIO_MAX-1:空閑任務(wù) OS_IdleTask()


  17. //任務(wù)優(yōu)先級(jí)
  18. #define START_TASK_PRIO                3
  19. //任務(wù)堆棧大小        
  20. #define START_STK_SIZE                 128
  21. //任務(wù)控制塊
  22. OS_TCB StartTaskTCB;
  23. //任務(wù)堆棧        
  24. CPU_STK START_TASK_STK[START_STK_SIZE];
  25. //任務(wù)函數(shù)
  26. void start_task(void *p_arg);

  27. //任務(wù)優(yōu)先級(jí)
  28. #define TASK1_TASK_PRIO                4
  29. //任務(wù)堆棧大小        
  30. #define TASK1_STK_SIZE                 128
  31. //任務(wù)控制塊
  32. OS_TCB Task1_TaskTCB;
  33. //任務(wù)堆棧        
  34. CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE];
  35. void task1_task(void *p_arg);

  36. //任務(wù)優(yōu)先級(jí)
  37. #define TASK2_TASK_PRIO                5
  38. //任務(wù)堆棧大小        
  39. #define TASK2_STK_SIZE                 128
  40. //任務(wù)控制塊
  41. OS_TCB Task2_TaskTCB;
  42. //任務(wù)堆棧        
  43. CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE];
  44. //任務(wù)函數(shù)
  45. void task2_task(void *p_arg);
  46.         short temperature;
  47.         u8 t=0;               
  48. //LCD刷屏?xí)r使用的顏色
  49. int lcd_discolor[14]={        WHITE, BLACK, BLUE,  BRED,      
  50.                                                 GRED,  GBLUE, RED,   MAGENTA,               
  51.                                                 GREEN, CYAN,  YELLOW,BROWN,                        
  52.                                                 BRRED, GRAY };


  53. //主函數(shù)
  54. int main(void)
  55. {
  56.         OS_ERR err;
  57.         CPU_SR_ALLOC();
  58.         
  59.         delay_init();  //時(shí)鐘初始化
  60.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷分組配置
  61.         uart_init(115200);   //串口初始化
  62.         LED_Init();         //LED初始化        
  63.         LCD_Init();                        //LCD初始化        
  64.         //TIM1_PWM_Init(299,719);//頻率3ms
  65.         //TIM3_Int_Init(20000,7199);//2S中斷一次,10hz,2000ms
  66.         
  67.         POINT_COLOR = RED;
  68.         LCD_ShowString(60,50,200,16,16,"Mini STM32");        
  69.         LCD_ShowString(60,70,200,16,16,"DS18B20 TEST");        
  70.         LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
  71.         LCD_ShowString(60,110,200,16,16,"2014/3/12");                  
  72.         
  73.         OSInit(&err);                    //初始化UCOSIII
  74.         OS_CRITICAL_ENTER();        //進(jìn)入臨界區(qū)                        
  75.         //創(chuàng)建開始任務(wù)
  76.         OSTaskCreate((OS_TCB         * )&StartTaskTCB,                //任務(wù)控制塊
  77.                                  (CPU_CHAR        * )"start task",                 //任務(wù)名字
  78.                  (OS_TASK_PTR )start_task,                         //任務(wù)函數(shù)
  79.                  (void                * )0,                                        //傳遞給任務(wù)函數(shù)的參數(shù)
  80.                  (OS_PRIO          )START_TASK_PRIO,     //任務(wù)優(yōu)先級(jí)
  81.                  (CPU_STK   * )&START_TASK_STK[0],        //任務(wù)堆;刂
  82.                  (CPU_STK_SIZE)START_STK_SIZE/10,        //任務(wù)堆棧深度限位
  83.                  (CPU_STK_SIZE)START_STK_SIZE,                //任務(wù)堆棧大小
  84.                  (OS_MSG_QTY  )0,                                        //任務(wù)內(nèi)部消息隊(duì)列能夠接收的最大消息數(shù)目,為0時(shí)禁止接收消息
  85.                  (OS_TICK          )0,                                        //當(dāng)使能時(shí)間片輪轉(zhuǎn)時(shí)的時(shí)間片長(zhǎng)度,為0時(shí)為默認(rèn)長(zhǎng)度,
  86.                  (void           * )0,                                        //用戶補(bǔ)充的存儲(chǔ)區(qū)
  87.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務(wù)選項(xiàng)
  88.                  (OS_ERR         * )&err);                                //存放該函數(shù)錯(cuò)誤時(shí)的返回值
  89.         OS_CRITICAL_EXIT();        //退出臨界區(qū)         
  90.         OSStart(&err);      //開啟UCOSIII
  91. }


  92. //開始任務(wù)任務(wù)函數(shù)
  93. void start_task(void *p_arg)
  94. {
  95.         OS_ERR err;
  96.         CPU_SR_ALLOC();
  97.         p_arg = p_arg;

  98.         CPU_Init();
  99. #if OS_CFG_STAT_TASK_EN > 0u
  100.    OSStatTaskCPUUsageInit(&err);          //統(tǒng)計(jì)任務(wù)               
  101. #endif
  102.         
  103. #ifdef CPU_CFG_INT_DIS_MEAS_EN                //如果使能了測(cè)量中斷關(guān)閉時(shí)間
  104.     CPU_IntDisMeasMaxCurReset();        
  105. #endif
  106.         
  107. #if        OS_CFG_SCHED_ROUND_ROBIN_EN  //當(dāng)使用時(shí)間片輪轉(zhuǎn)的時(shí)候
  108.          //使能時(shí)間片輪轉(zhuǎn)調(diào)度功能,時(shí)間片長(zhǎng)度為1個(gè)系統(tǒng)時(shí)鐘節(jié)拍,既1*5=5ms
  109.         OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
  110. #endif        
  111.         
  112.         OS_CRITICAL_ENTER();        //進(jìn)入臨界區(qū)
  113.         //創(chuàng)建TASK1任務(wù)
  114.         OSTaskCreate((OS_TCB         * )&Task1_TaskTCB,               
  115.                                  (CPU_CHAR        * )"Task1 task",                 
  116.                  (OS_TASK_PTR )task1_task,                        
  117.                  (void                * )0,                                       
  118.                  (OS_PRIO          )TASK1_TASK_PRIO,     
  119.                  (CPU_STK   * )&TASK1_TASK_STK[0],        
  120.                  (CPU_STK_SIZE)TASK1_STK_SIZE/10,        
  121.                  (CPU_STK_SIZE)TASK1_STK_SIZE,               
  122.                  (OS_MSG_QTY  )0,                                       
  123.                  (OS_TICK          )0,                                       
  124.                  (void           * )0,                                       
  125.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  126.                  (OS_ERR         * )&err);                                
  127.                                  
  128.         //創(chuàng)建TASK2任務(wù)
  129.         OSTaskCreate((OS_TCB         * )&Task2_TaskTCB,               
  130.                                  (CPU_CHAR        * )"task2 task",                 
  131.                  (OS_TASK_PTR )task2_task,                        
  132.                  (void                * )0,                                       
  133.                  (OS_PRIO          )TASK2_TASK_PRIO,            
  134.                  (CPU_STK   * )&TASK2_TASK_STK[0],        
  135.                  (CPU_STK_SIZE)TASK2_STK_SIZE/10,        
  136.                  (CPU_STK_SIZE)TASK2_STK_SIZE,               
  137.                  (OS_MSG_QTY  )0,                                       
  138.                  (OS_TICK          )0,                                       
  139.                  (void           * )0,                                
  140.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  141.                  (OS_ERR         * )&err);                        
  142.         OS_CRITICAL_EXIT();        //退出臨界區(qū)
  143.         OSTaskDel((OS_TCB*)0,&err);        //刪除start_task任務(wù)自身
  144. }

  145. //task1任務(wù)函數(shù)
  146. void task1_task(void *p_arg)
  147. {
  148.         //u8 task1_num=0;
  149. //        u8 t=0;        
  150. //        OS_ERR err;
  151.         CPU_SR_ALLOC();
  152.         p_arg = p_arg;
  153.         //short temperature;   
  154. //        POINT_COLOR = BLACK;
  155.         OS_CRITICAL_ENTER();
  156. //        LCD_DrawRectangle(5,110,115,314);         //畫一個(gè)矩形        
  157. //        LCD_DrawLine(5,130,115,130);                //畫線
  158. //        POINT_COLOR = BLUE;
  159. //        LCD_ShowString(6,111,110,16,16,"Task1 Run:000");
  160.         OS_CRITICAL_EXIT();
  161.                 while(DS18B20_Init())        //DS18B20初始化        
  162.         {
  163.                 LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
  164.                 delay_ms(200);
  165.                 LCD_Fill(60,130,239,130+16,WHITE);
  166.                  delay_ms(200);
  167.         }                 
  168.         LCD_ShowString(60,130,200,16,16,"DS18B20 OK");
  169.         POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
  170.          LCD_ShowString(60,150,200,16,16,"Temp:   . C");         
  171.         while(1)
  172.         {                   printf("任務(wù)5已經(jīng)執(zhí)行次\r\n");            
  173.                  if(t%10==0)//每100ms讀取一次
  174.                 {                                                                          
  175.                         temperature=DS18B20_Get_Temp();        
  176.                         if(temperature<0)
  177.                         {
  178.                                 LCD_ShowChar(60+40,150,'-',16,0);                        //顯示負(fù)號(hào)
  179.                                 temperature=-temperature;                                        //轉(zhuǎn)為正數(shù)
  180.                         }else LCD_ShowChar(60+40,150,' ',16,0);                        //去掉負(fù)號(hào)
  181.                         LCD_ShowNum(60+40+8,150,temperature/10,2,16);        //顯示正數(shù)部分            
  182.                            LCD_ShowNum(60+40+32,150,temperature%10,1,16);        //顯示小數(shù)部分                    
  183.                 }                                   
  184.                  delay_ms(10);
  185.                 t++;
  186.                 if(t==20)
  187.                 {
  188.                         t=0;
  189.                         LED0=!LED0;
  190.                 }
  191.         }

  192. }

  193. //task2任務(wù)函數(shù)
  194. void task2_task(void *p_arg)
  195. {
  196.         u8 task2_num=0;
  197.         OS_ERR err;
  198.         CPU_SR_ALLOC();
  199.         p_arg = p_arg;
  200.         
  201.         //POINT_COLOR = BLACK;
  202.         OS_CRITICAL_ENTER();
  203. //        LCD_DrawRectangle(125,110,234,314); //畫一個(gè)矩形        
  204. //        LCD_DrawLine(125,130,234,130);                //畫線
  205. //        POINT_COLOR = BLUE;
  206. //        LCD_ShowString(126,111,110,16,16,"Task2 Run:000");
  207.         OS_CRITICAL_EXIT();
  208.         while(1)
  209.         {
  210.                 task2_num++;        //任務(wù)2執(zhí)行次數(shù)加1 注意task1_num2加到255的時(shí)候會(huì)清零。
  211.         //        LED1=~LED1;
  212.                 printf("任務(wù)2已經(jīng)執(zhí)行:%d次\r\n",task2_num);
  213. //                LCD_ShowxNum(206,111,task2_num,3,16,0x80);  //顯示任務(wù)執(zhí)行次數(shù)
  214. //                LCD_Fill(126,131,233,313,lcd_discolor[13-task2_num%14]); //填充區(qū)域
  215.         OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)1s
  216.         }
  217. }
復(fù)制代碼

所有資料51hei提供下載:
UCOSIII輸出DS18B20.7z (409.92 KB, 下載次數(shù): 54)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一级片免费看 | 欧美综合精品 | 亚洲欧美日韩精品久久亚洲区 | 九九伦理电影 | 久久这里只有 | 米奇7777狠狠狠狠视频 | 国产福利视频在线观看 | 日韩在线欧美 | 中文字幕男人的天堂 | 全免一级毛片 | 日本在线播放一区二区 | 啪啪免费网站 | 国产久| 国产精品毛片久久久久久久 | 欧美日韩综合精品 | 欧美国产一区二区 | 国产精品久久久久久久免费大片 | 欧美日韩精品亚洲 | 亚洲精品一区二区三区四区高清 | 国产免费观看久久黄av片涩av | 午夜精品久久久久久不卡欧美一级 | 色综合99 | 欧美日一区二区 | 精久久| 欧美日韩一区二区在线 | 中文字幕精品一区久久久久 | 国产精品久久久久久久久久了 | 国产成人艳妇aa视频在线 | 国产精品亚洲一区二区三区在线 | 亚洲精品美女视频 | 成人h免费观看视频 | 亚洲精品二区 | 一区二区免费视频 | 日韩二区 | 亚洲精品成人av久久 | 91看片网 | 中文字幕在线免费观看 | 欧美一级欧美三级在线观看 | 97在线观视频免费观看 | 欧洲精品视频一区 | 国产精品美女一区二区 |