|
程序经过实物验证过的。
程序如下:
- /*////////////////////////////////////////////////////
- 系统: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
863 Bytes, 下载次数: 28, 下载积分: 黑币 -5
评分
-
查看全部评分
|