找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3958|回复: 1
打印 上一主题 下一主题
收起左侧

RTX51_TNY之按键控制LED流水灯左右依次点亮,用信号传递方式。

[复制链接]
跳转到指定楼层
楼主
ID:105206 发表于 2018-6-13 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序经过实物验证过的。
程序如下:
  1. /*////////////////////////////////////////////////////
  2. 系统:RTX51-TNY
  3. 功能:按键控制LED流水灯左右依次点亮。用信号传递方式。
  4. 日期:2018/06/13

  5. /////////////////////////////////////////////////////////*/
  6. #include <rtx51tny.h>  
  7. #include <reg52.h>  

  8. #define u8 unsigned char
  9. #define u16 unsigned int
  10. // LED依次亮灭控制数组  

  11. u8 LED_L[] = {0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00};
  12. u8 LED_R[] = {0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00};

  13. u8 retry = 0;  

  14. sbit KEY1=P1^0;
  15. sbit KEY2=P1^1;



  16. void task_start(void) _task_ 0  
  17. {  
  18.   
  19.     // 创建4个任务  
  20.         os_create_task(1);
  21.     os_create_task(2);  
  22.     os_create_task(3);   
  23.     os_create_task(4);   
  24.     // 创建任务后,删除自己     
  25.      os_delete_task(0);
  26. }



  27. void job1(void) _task_ 1 //按键开启任务
  28. {         
  29.         while(1)
  30.         {  
  31.         if(KEY1==0)
  32.                 {           //判断按键是否按下  
  33.                         
  34.                         while(!KEY1);
  35.                         os_send_signal (3);        
  36.                         os_create_task(3);
  37.         }
  38.         
  39.     }  
  40.         
  41. }

  42. void job2(void) _task_ 2 //按键关闭任务
  43. {         
  44.         while(1)
  45.         {  
  46.       
  47.                 if(KEY2==0)
  48.                 {           //判断按键是否按下  
  49.                         
  50.                         while(!KEY2);
  51.                         P0=0XFF;                        
  52.                         os_delete_task (3);                        
  53.         }                  
  54.     }  
  55.         
  56. }

  57. //以下是左右流水任务

  58. void LightOnLed(void) _task_ 3  
  59. {  
  60.     while(1){         
  61.         // 等待一个信号  
  62.         os_wait (K_SIG, 0, 0);  
  63.         // 依次点亮 LED  
  64.         for(retry=0; retry!=8; ++retry)
  65.                 {  
  66.             P0 = LED_L[retry];  
  67.             os_wait (K_TMO, 8, 0);  
  68.         }
  69.                 P0=0xff;
  70.         // 给任务3发送一个信号  
  71.         os_send_signal (4);  
  72.     }  
  73. }  
  74.   
  75. void LightOffLed(void) _task_ 4  
  76. {  
  77.     while(1){  
  78.         // 等待一个信号  
  79.         os_wait (K_SIG, 0, 0);  
  80.         // 依次熄灭 LED  
  81.         for(retry=0; retry!=8; ++retry)
  82.                 {  
  83.             P0 = LED_R[retry];  
  84.             os_wait (K_TMO, 8, 0);  
  85.         }
  86.         P0=0xff;               
  87.         // 给任务2发送一个信号  
  88.         os_send_signal (3);      
  89.     }  
  90. }  
复制代码


main.rar

863 Bytes, 下载次数: 27, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:409287 发表于 2018-10-14 03:32 来自手机 | 只看该作者
连按两次key1,灯就会乱。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表