标题:
RTX51-tny之按键点LED灯
[打印本页]
作者:
jubaolun
时间:
2018-6-13 10:22
标题:
RTX51-tny之按键点LED灯
由于公共电脑不方便发实物演示图。
程序如下:
//功能:RTX51_TNY开关点灯
/*******************************************************
task1 : LED0每 1s改变一次状态
task2 :LED1每0.7s改变一次状态
task3 :LED2每0.4s改变一次状态
task4 :LED3每0.2s改变一次状态
*******************************************************/
#include <rtx51tny.h>
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//typedef unsigned char uchar;
//typedef unsigned int uint;
sbit LED0 = P0^0;
sbit LED1 = P0^1;
sbit LED2 = P0^2;
sbit LED3 = P0^3;
sbit KEY0 = P1^0;
sbit KEY1=P1^1;
void job0(void) _task_ 0
{
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1; //关闭四个LED
os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
os_delete_task(0); //删除自己(task0),使task0退出任务链表
}
void job1(void) _task_ 1 //按键开启任务
{
while(1)
{
if(KEY1==0)
{ //判断按键是否按下
while(!KEY1);
os_create_task (4); //按键开启LED3,
os_create_task (3);
os_create_task (5);
os_create_task (6);
}
}
}
void job2(void) _task_ 2 //按键关闭任务
{
while(1)
{
if(KEY0==0)
{ //判断按键是否按下
while(!KEY0);//等待取反
LED0 = 1;LED1 = 1;LED2 = 1;LED3 = 1;
os_delete_task(4); //按键关闭任务3。4。5。6。
os_delete_task(3);
os_delete_task(5);
os_delete_task(6);
}
}
}
//以下是各任务
void job3(void) _task_ 3
{
while(1){
LED0 = !LED0;
os_wait(K_TMO, 100, 0); //等待100个时钟滴答(ticks),即1s
//配置文件ConfTny.A51中INT_CLOCK EQU 10000; default is 10000 cycles
//意思是时钟滴答为10000个机器周期,即10000*1uS=10ms
}
}
void job4(void) _task_ 4
{
while(1){
LED1 = !LED1;
os_wait(K_TMO, 70, 0); //等待(延时)0.7s
}
}
void job5(void) _task_ 5
{
while(1){
LED2 = !LED2;
os_wait(K_TMO, 40, 0); //等待(延时)0.4s
}
}
void job6(void) _task_ 6
{
while(1){
LED3 = !LED3;
os_wait(K_TMO, 20, 0); //等待(延时)0.2s
}
}
望大家共同探讨。谢谢!
作者:
583703056A
时间:
2018-10-9 13:28
这个不需要主函数吗!
作者:
小呀嘛小菜鸟
时间:
2018-10-13 15:23
请问怎么能让灯一直闪烁
作者:
底层用户
时间:
2022-3-26 18:20
583703056A 发表于 2018-10-9 13:28
这个不需要主函数吗!
_task_ 0 至 _task_ 6都是主函数
作者:
卑微小赵
时间:
2022-7-26 15:23
RTX51 Tiny是时间轮片 所有任务优先级都是一样的 不支持抢占
有没有 RTX51 FULL 的
作者:
QiaoZhiZhong
时间:
2022-9-25 17:36
非常感谢您的无私奉献!我用了您的例子,稍作改动,就在我的STC8A8K64S4A12单片机上实现了;这是我第一次在单片机上接触RTOS。以后还请不吝指教
作者:
QiaoZhiZhong
时间:
2022-9-25 17:43
小呀嘛小菜鸟 发表于 2018-10-13 15:23
请问怎么能让灯一直闪烁
按照楼主的程序,只要按下KEY1,程序就一直运行,4只LED交替点亮;我已实现了
作者:
一帆有风
时间:
2024-11-16 18:18
while(!KEY0);// 请问各位大神碰到这个循环会不会死等还是会先跳出这个任务执行下一个任务
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1