要设计的显示任务需要完成的功能如下:
       (1)、仪表上电自检后,“四个”数码管每隔500ms依次显示“1111”,“2222”,“3333”,“版本号”。
       (2)、自检完成(2秒钟)后,四个数码管开始显示测量数据
       (3)、用户按面板上的《编程》键后,四个数码管显示“待设置的参数值”,同时当前正编程的数码管位置开始闪烁
       (4)、当编程状态时,用户按下面板上的《确认》键
              (a).如果参数在合法的范围内,则保存当前参数值,然后自动将下一个待设置的参数值显示在数码管上;
              (b).否则,当设置的参数值超出范围,则数码管显示“Err”,同时数码管持续1秒钟内都显示“Err”,1秒钟后,四个数码管重新将初始的参
                  数值显示在数码管上。


以下是最终程序框架:


一、规划消息队列传输协议
          定义一个消息队列MSQ[10](10只是我打个比方的,要根据实际状态去设计),这个MSQ[10]既要传递AD采样值,也要传递按键值。那么我们规定:
   MSQ[0]=1  ----表示有按键按下
   MSQ[0]=2  ----表示有AD采样过来
--------------------------------------------------------------
  在MSQ[0]=1时,
             MSQ[1]=1:表示【编程键】,
             MSQ[1]=2:表示【确认键】,
             MSQ[1]=3:表示【上键】,
             MSQ[1]=4:表示【下键】,
             MSQ[1]=5:表示【移位键】
在MSQ[0] = 2时,
            MSQ[1] = 测量数据高字节
            MSQ[2] = 测量数据低字节

--------------------------------------------------------------
二、规划任务
       规划3个任务:
            1、AD采集任务         ---> 周期性任务,每隔200毫秒执行一次,采样完成,给数码管显示任务发送消息队列
            2、按键任务              ---> 周期性任务,每隔50毫秒执行一次,如果采集到按键按下,给数码管显示任务发送消息队列
            3、数码管显示任务   ---->等待消息队列任务
三、具体任务代码
        1、第一个任务---AD采样任务
            TASKAD
            {
                 while(1)
                 {
                      采集AD值;
                      if (采集到采样值)
                      {
                            MSQ[0]=2  //因为我们规定MSQ[0]=2 表示有新AD采样
                            MSQ[1]=AD采样值的高字节 //这个值具体参照你自己设定的协议来
                            MSQ[2]=AD采样值的低字节
                             MSQPOST……//发送消息队列
                       }
                      延时节拍(200毫秒)
                }
           }


         第二个任务---扫键任务
        TASKKEY
        {
              while(1)
              {
                   扫描按键;
                   if(有按键按下)
                  {
                        //要把按键值打包到MSQ里面去,如
                        MSQ[0]=1  //因为我们规定MSQ[0]=1 表示有按键按下
                        MSQ[1]=按键代码 //这个值具体参照你自己设定的协议来
                        MSQPOST……//发送消息队列
                  }
                 延时节拍50毫秒;
              }
        }

  第三个任务----数码管显示任务
      TASKDISP
      {
                uint8_t status = 0;  //0=上电默认为测量状态   1= 编程模式
                uint8_t no;//参数号
               uint8_t bit;//数码管位号
  
                显示1111,延时节拍500毫秒
                显示2222,延时节拍500毫秒
                显示3333,延时节拍500毫秒
                显示4444,延时节拍500毫秒   
                显示版本号,延时节拍2秒

                while(1)
               {
                     限时等待接收消息队列消息
                     if (收到消息队列消息数据)
                     {                           
                          if(MSQ[0]==1) //按键按下消息
                          {
                                     switch(MSQ[1])//解析各个按键,然后根据各个按键进行操作
                                    {
                                          case 1:编程模式
                                                if (status ==0)
                                                {                                         
                                                   status = 1;//进入编程模式
                                                   no = 1;//参数号=1
                                                   bit=4;//最右边1个数码管编程
                                                   发出最右边1个数码管开始闪烁的命令
                                                   取出第1个参数号对应的数值,将该数值显示到数码管
                                                 }
                                                 else
                                                    status=0;//退出编程模式,返回测量状态
                                                break;
                                         
                                         case 2:【确认键】
                                                if (status ==1)
                                                {
                                                   检查参数值是否合法;
                                                   if (合法)
                                                   {
                                                       存参数
                                                       数码管显示OK;
                                                       延时节拍1秒
                                                       no++;//参数号+1        
                                                      bit=4;//最右边1个数码管编程
                                                      取出no参数号对应的数值,将该数值显示到数码管
                                                 }
                                                 else
                                                 {
                                                      数码管显示ERROR;
                                                      延时节拍1秒
      取出第no个参数号对应的数值,将该数值显示到数码管      
                                                 }
                                                 break;

                                          case 3:    【上键】  
                                                if (status ==1)
                                                {
                                                   bit位对应的数码管上的数字+1
                                                   if (bit位对应的数码管上的数字 >9)
                                                       bit位对应的数码管上的数字=0
             将该数值显示到数码管
                                                }
                                                 break;   

                                          case 4:    【下键】  
                                                if (status ==1)
                                                {
                                                   bit位对应的数码管上的数字-1
                                                   if (bit位对应的数码管上的数字 < 0)
                                                       bit位对应的数码管上的数字=9
   将该数值显示到数码管
                                                 }
                                                 break;
                                           case 5:【移位键】     
                                                if (status ==1)
                                                {
                                                   bit-1;   //左移一位数码管
                                                   if (bit <= 0)
                                                       bit=4
                                                   发出前一个数码管开始闪烁命令
                                                }
                                                break;

                                           default:
                                                break;
                                      }
                              }
                              else if(MSQ[0]==2) //ad采样消息
                              {
                                  读取AD采样数据
                                  if (status ==0)//在测量状态
                                     显示AD采样数据到数码管
                               }                                
                                               
                      }//if (收到消息队列消息数据)
确实RTOS编程模式和前后台编程模式差别太大啦!要想顺利的从前后台编程模式转到RTOS模式编程需要大量的实践呀!