找回密码
 立即注册

QQ登录

只需一步,快速开始

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

RT系统+STM32+红外控制+1.44寸显示屏 源程序

[复制链接]
跳转到指定楼层
楼主
​ 本次实验是为了了解RT-thread的工作流程以及简单的实验RT来进行一个学习

实验材料:STM32c8t6+1.44寸TFT显示屏+红外传感器+分光棱镜
实验结果:可以进行红外定时选择,实验成功分为三个线程做任务


线程一:开机时间显示
  1. //APP1
  2. static void led1_thread_entry(void* parameter)
  3. {
  4.   rt_uint8_t hour=0,munite=0,second=0;
  5.         rt_uint8_t dispBuff[100];
  6.          //Show_Picture();
  7.         Demo_Menu();
  8.         while (1)
  9.         {
  10.          if(second<59) {
  11.                  second++;
  12.         //                         if(time == 10){
  13.         //                           OLED_Clear();
  14.         //                                 time = 0;
  15.         //                                 os_app_resume(APP_03);  //简单定时10*500ms=5s后恢复运行APP_02 ,挂起自己。
  16.         //                           os_app_pend(APP_01);  
  17.         //                                }
  18.          }
  19.          else
  20.          {
  21.                  second=0;
  22.                  munite++;
  23.                  if(munite==60)
  24.                  {
  25.                          second=0;
  26.                          munite=0;
  27.                          hour++;
  28.                          if(hour==24)
  29.                          {
  30.                                  second=0;
  31.                                  munite=0;
  32.                                  hour=0;
  33.                          }
  34.                  }
  35.         }

  36.         sprintf(dispBuff,"-%02d:%02d:%02d-",hour,munite,second);        
  37.   Draw_Font24B(4,30,RED,dispBuff);        
  38. //        Draw_Font16B(4,40,YELLOW,dispBuff);//8*16 “ABC”
  39.         rt_thread_delay(1000);   /* 延时500个tick */        

  40.         }
  41. }
复制代码


线程二:红外遥控判断
  1. //APP2
  2. static void APP2_thread_entry(void* parameter)
  3. {        
  4.   rt_err_t uwRet = RT_EOK;        
  5.         rt_uint8_t key=0;
  6.         rt_uint8_t dispBuff[100];
  7.         rt_uint8_t t=0;        
  8.         rt_uint8_t *str=0;
  9.         while(1)
  10.         {

  11.           key=Remote_Scan();
  12.                         
  13.                 if(key)
  14.                 {        
  15.                 switch(key)
  16.                         {
  17.                                 case 162:
  18.                                                 //1
  19.                                                 str= "*计时器 10 min*";
  20.                                                 munite = 10;
  21.                                                 hour=0;               
  22.                                                 second=0;
  23.             break;
  24.         
  25.         case 98:
  26.                                                 //2                                       
  27.                                           str= "*计时器 20 min*";
  28.             munite = 20;
  29.                                                 hour=0;        
  30.                                                 second=0;
  31.             break;
  32.         
  33.         case 226://3
  34.                                          str= "*计时器 30 min*";
  35.                                          munite = 30;
  36.                                         hour=0;        
  37.                                                 second=0;
  38.             break;
  39.         
  40.         case 34://4
  41.                                          str= "*计时器 40 min*";
  42.                                                 munite = 40;
  43.                                           hour=0;        
  44.                                     second=0;
  45.             break;
  46.         
  47.         case 2://5
  48.                                          str= "*计时器 50 min*";
  49.            munite = 50;
  50.                                          hour=0;
  51.                                          second=0;                        
  52.             break;
  53.         
  54.         case 194://6
  55.                                          str= "*计时器 60 min*";
  56.            munite = 60;
  57.                                         hour=0;
  58.                                         second=0;
  59.             break;
  60.         
  61.         case 224://7
  62.                                          str= "*计时器 90 min*";
  63.                                          hour = 1;
  64.            munite = 30;
  65.                                          second=0;
  66.             break;
  67.         
  68.         case 168://8
  69.                                          str= "*  计时器 2 h *";
  70.            hour = 1;
  71.                                         munite = 60;
  72.                                         second=0;
  73.             break;
  74.         
  75.         case 144://9
  76.                                          str= "*  计时器 3 h *";
  77.            hour = 2;
  78.                                                 munite = 60;
  79.                                                 second=0;
  80.             break;
  81.         
  82.         case 152:
  83.                                          str= "detected code 0";
  84.             
  85.             break;
  86.         
  87.         case 104:
  88.                                          str= "detected code *";
  89.          
  90.             break;
  91.         
  92.         case 176:
  93.                                          str= "detected code #";
  94.            
  95.             break;
  96.                
  97.         case 24:
  98.                                          str= "detected code ↑";
  99.          
  100.             break;
  101.                
  102.         case 16:
  103.                                          str= "detected code ←";
  104.             
  105.             break;
  106.         
  107.         case 74:
  108.                                           str= "detected code ↓";
  109.          
  110.             break;
  111.         
  112.         case 90:
  113.                                           str= "detected code →";
  114.             break;
  115.         
  116.         case 56:
  117.             str= "detected code OK ";
  118.             break;
  119.         
  120.         default:
  121.                                           str= "EMOURE";
  122.          
  123.             break;

  124.                         }

  125. //                        uwRet = rt_thread_resume(APP3_thread);/* 恢复APP3线程! */
  126. //                        if(RT_EOK == uwRet)
  127. //                        {
  128. //                                rt_kprintf("恢复APP3线程成功!\n");
  129. //                        }
  130. //                        else
  131. //                        {
  132. //                                rt_kprintf("恢复APP3线程失败!失败代码:0x%lx\n",uwRet);
  133. //                        }
  134.                         Draw_Font16B(4,100,BRRED,str);        //显示SYMBOL
  135.                 }

  136.         }

  137. }
复制代码

线程三:计时器

  1. //APP3
  2. static void APP3_thread_entry(void* parameter)
  3. {
  4.         
  5.         rt_uint8_t dispBuff[100];
  6.   while (1)
  7.     {
  8.            if(second>0) {
  9.                          second--;
  10.                  }
  11.                  else
  12.                  {
  13.                          second=59;
  14.                          munite--;
  15.                          //time++;
  16.                          if(munite==0)
  17.                          {
  18.                                  munite=60;
  19.                            second=59;
  20.                                  
  21.                                  hour--;
  22.                                  if(hour==0)
  23.                                  {
  24.                                          munite=0;
  25.                              second=0;
  26. //                                         uwRet = rt_thread_suspend(APP3_thread);/* 挂起APP3线程 */
  27. //                                        if(RT_EOK == uwRet)
  28. //                                        {
  29. //                                                rt_kprintf("挂起APP3线程成功!\n");
  30. //                                        }
  31. //                                        else
  32. //                                        {
  33. //                                                rt_kprintf("挂起APP3线程失败!失败代码:0x%lx\n",uwRet);
  34. //                                        }
  35.                                  }
  36.                                 
  37.                         
  38.                          }
  39.     }

  40.                 sprintf(dispBuff," time:%02d:%02d:%02d",hour,munite,second);               
  41.                 Draw_Font16B(4,80,YELLOW,dispBuff);//8*16 “ABC”
  42.           rt_thread_delay(980);   /* 延时500个tick */        

  43.     }
  44. }
复制代码

代码下载1:01.RT红外定时器.zip-OS文档类资源-CSDN下载
​代码下载2: 代码.7z (619.56 KB, 下载次数: 16)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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