📄 ledkey.c
字号:
/*用rtos编写键盘操作控制LED流水灯*/
//采用52作为CPU,选择操作系统为rtx tiny
//如果采用51为CPU,须修改conf_tny.a51
//2003.2.24通过硬件测试
#include "reg51.h"
#include "intrins.h"
#include <rtx51tny.h> /* RTX51 tiny functions & defines */
#define uchar unsigned char
#define uint unsigned int
#define Init 0 //初始化
#define Led 1 //LED闪烁定为任务2
#define Key 2 //键盘操作定义为任务3
bit StartLedFlash; //开始/停止LED流动
bit LeftRight; //控制流动向左或向右
void job0 (void ) _task_ Init {
os_create_task (Led); /* start task Disp */
os_create_task (Key);
os_delete_task (0);
}
void LedFlash(void) _task_ Led{
static uchar FlashLed=0xfe;
while(1)
{ if(StartLedFlash)
{
P1=FlashLed;
if(LeftRight)
FlashLed=_crol_(FlashLed,1);
else
FlashLed=_cror_(FlashLed,1);
}
os_wait(K_IVL,100,0); //等待1秒
}
}
void KeyValue(uchar KeyV)
{ if((KeyV|0xfb)!=0xff) //11111011 P3.2位被按下
{ StartLedFlash=1;
}
else if((KeyV|0xf7)!=0xff)
{ StartLedFlash=0;
}
else if((KeyV|0xef)!=0xff)
{ LeftRight=1;
}
else if((KeyV|0xdf)!=0xff)
{ LeftRight=0;
}
}
void KeyProcess(void) _task_ Key{
uchar tmp;
while(1)
{ P3|=0x3c; //中间4位置高电平
tmp=P3;
tmp|=0xc3; //两边4位置高电平
if(tmp!=0xff)
KeyValue(tmp);
os_wait(K_IVL,2,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -