FreeRTOS下编程,仪表键盘设置和实时数据显示应该如何规划任务

ba_wang_mao 2020-01-08 03:53:29
我要设计的仪表需要完成如下工作:

仪表上有4个数码管,一个【编程键】,一个【确认键】,一个【上键】:用于编程模式时,数字增加。
一个【下键】:用于编程模式时,数字减小。 一个【移位键】:用于移动待编程的数码管。


(1)、仪表上电自检后,“四个”数码管每隔500ms依次显示“1111”,“2222”,“3333”,“版本号”。
(2)、自检完成后,进入测量状态,4个数码管开始显示测量数据。
(3)、测量模式时,按下《编程》键,进入编程模式。
四个数码管显示“待设置的参数值”,同时最右边第1个数码管开始闪烁,指示当前准备编程最右边1个数码管上的数字。
(4)、编程模式时,按下【上键】,当前数码管位置的数字加1。
(5)、编程模式时,按下【下键】,当前数码管位置的数字减1。
(6)、编程模式时,按下【移位键】,移动到前一个数码管并开始闪烁,指示当前准备编程最右边倒数第2个数码管上的数字.
(7)、编程状态时,按下《确认》键
(a).如果参数在合法的范围内,则保存当前参数值,然后自动将下一个待设置的参数值显示在数码管上;
(b).否则,当设置的参数值超出范围,则数码管显示“Err”,同时数码管持续1秒钟内都显示“Err”,1秒钟后,四个数码管重新将初始的参数值显示在数码管上。
(8)、编程模式时,按下【编程键】,退出编程模式,返回测量状态。
(9)、测量状态时,4个数码管显示测量数据。
...全文
378 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_43554366 2020-12-10
  • 打赏
  • 举报
回复
优先级该怎么分配呢
ba_wang_mao 2020-05-02
  • 打赏
  • 举报
回复
这个问题我已经解决了,在STM32F103VC单片机下编程实现。
ba_wang_mao 2020-01-09
  • 打赏
  • 举报
回复
第三个任务----数码管显示任务
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 (收到消息队列消息数据)

ba_wang_mao 2020-01-08
  • 打赏
  • 举报
回复
一、规划消息队列传输协议
定义一个消息队列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] = 测量数据低字节

--------------------------------------------------------------
[b]二、规划任务

规划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= 编程模式 2=设置ok 3= 设置错误
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个参数号对应的数值,将该数值显示到数码管
}
else
status=0;//退出编程模式,返回测量状态
break;

case 2:【确认键】
if (status ==1)
{
检查参数值是否合法;
if (合法)
{
存参数;
no++;//参数号+1
bit=4;//最右边1个数码管编程
取出no参数号对应的数值,将该数值显示到数码管
}
else
{
status=3;//编程设置参数错误
}
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 (收到消息队列消息数据)
else
{
if (status == 3)
{
数码管显示错误ERROR
延时1秒
}
}


27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧