标题:
RTX51_TNY之按键控制LED流水灯左右依次点亮,用信号传递方式。
[打印本页]
作者:
jubaolun
时间:
2018-6-13 11:28
标题:
RTX51_TNY之按键控制LED流水灯左右依次点亮,用信号传递方式。
程序经过实物验证过的。
程序如下:
/*////////////////////////////////////////////////////
系统:RTX51-TNY
功能:按键控制LED流水灯左右依次点亮。用信号传递方式。
日期:2018/06/13
/////////////////////////////////////////////////////////*/
#include <rtx51tny.h>
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
// LED依次亮灭控制数组
u8 LED_L[] = {0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00};
u8 LED_R[] = {0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00};
u8 retry = 0;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
void task_start(void) _task_ 0
{
// 创建4个任务
os_create_task(1);
os_create_task(2);
os_create_task(3);
os_create_task(4);
// 创建任务后,删除自己
os_delete_task(0);
}
void job1(void) _task_ 1 //按键开启任务
{
while(1)
{
if(KEY1==0)
{ //判断按键是否按下
while(!KEY1);
os_send_signal (3);
os_create_task(3);
}
}
}
void job2(void) _task_ 2 //按键关闭任务
{
while(1)
{
if(KEY2==0)
{ //判断按键是否按下
while(!KEY2);
P0=0XFF;
os_delete_task (3);
}
}
}
//以下是左右流水任务
void LightOnLed(void) _task_ 3
{
while(1){
// 等待一个信号
os_wait (K_SIG, 0, 0);
// 依次点亮 LED
for(retry=0; retry!=8; ++retry)
{
P0 = LED_L[retry];
os_wait (K_TMO, 8, 0);
}
P0=0xff;
// 给任务3发送一个信号
os_send_signal (4);
}
}
void LightOffLed(void) _task_ 4
{
while(1){
// 等待一个信号
os_wait (K_SIG, 0, 0);
// 依次熄灭 LED
for(retry=0; retry!=8; ++retry)
{
P0 = LED_R[retry];
os_wait (K_TMO, 8, 0);
}
P0=0xff;
// 给任务2发送一个信号
os_send_signal (3);
}
}
复制代码
main.rar
2018-6-13 11:28 上传
点击文件名下载附件
下载积分: 黑币 -5
863 Bytes, 下载次数: 28, 下载积分: 黑币 -5
作者:
小房
时间:
2018-10-14 03:32
连按两次key1,灯就会乱。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1