📄 rtx51.c
字号:
//作者网站www.dpjjx.com
//改为"RTX-51 Tiny"
#include <reg52.h>
#include <rtx51tny.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <absacc.h>
#define COM8155 XBYTE[0xbf00]
#define PA8155 XBYTE[0xbf01]
#define PB8155 XBYTE[0xbf02]
#define PC8155 XBYTE[0xbf03]
#define INIT 0 /* 任务号0 init */
#define KEY_SCAN 1 /* 任务号1 key_scan */
#define XIANSHI 2 /* 任务号2 xianshi */
#define KEY_DISPOSE 3 /* 任务号3 key_dispose */
unsigned char temperature;
unsigned char table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x84};
unsigned char key_value;
sbit light1 =P1^0;
sbit light2 =P1^1;
void init_system();
/*********************************************************************/
/* 任务0 系统初始化 */
/*********************************************************************/
void init (void) _task_ INIT
{
init_system(); /* 系统初始化 */
os_create_task(init);
os_create_task(XIANSHI); /*启动显示任务 */
os_create_task(KEY_SCAN); /* 启动键扫描任务 */
os_create_task(KEY_DISPOSE); /* 启动键处理任务 */
os_delete_task(INIT); /* 删除不再执行的任务 */
}
/***********************************************************************/
/* 任务1 键扫描 */
/***********************************************************************/
void key_scan (void) _task_ KEY_SCAN
{
unsigned char keytemp;
for(;;)
{
keytemp = P1&0xf0;
if(keytemp != 0xf0)
{//key down
key_value = keytemp;
os_send_signal(KEY_DISPOSE);//送信号给键处理任务
os_wait(K_TMO, 5, 0);//等待20ms
}
os_wait(K_TMO, 5, 0);//等待20ms
}
}
/************************************************************************/
/* 任务2 显示,取出温度数据并显示 */
/************************************************************************/
void xianshi(void) _task_ XIANSHI
{
unsigned char led0;
unsigned char led1;
unsigned char temp;
COM8155 = 0x0f; /*送8155命令字d*/
while(1)
{
temp = temperature;
led1 = temp/10;
led0 = temp%10;
PC8155 = 1; /* 送位选码 选择第一个数码管*/
PA8155 = table[led0]; /*送段码 显示个位*/
os_wait(K_TMO, 1, 0);
PC8155 = 2; /* 送位选码 选择第二个数码管*/
PA8155 = table[led1]; /*送段码 显示十位*/
os_wait(K_TMO, 1, 0);
}
}
/************************************************************************/
/* 任务3 键处理,根据键扫描的键值执行对应功能,此处只简化为根据按键
对设定的温度值加进行加减 */
/************************************************************************/
void key_dispose(void)_task_ KEY_DISPOSE
{
light1 = 1;
light2 = 1;
while(1)
{
os_wait(K_SIG, 0, 0); /*等待来自键盘扫描任务的消息*/
key_value=~key_value;
switch(key_value)
{
case 0x1f:
if(temperature < 99)
temperature++;
light1 = ~light1;
break;
case 0x2f:
if(temperature > 0)
temperature--;
light1 = ~light1;
break;
case 0x4f:
if(temperature < 90)
temperature += 10;
light2 = ~light2;
break;
case 0x8f:
if(temperature > 10)
temperature -= 10;
light2= ~light2;
break;
default:
continue;
break;
}
os_send_signal(XIANSHI);//送信号给显示任务
}
}
/******************************************************************************/
/* 任务0 系统初始化,主要是定时器0的设置,赋初始温度值 */
/******************************************************************************/
void init_system()
{
TMOD=0x01;
TH0=0xec;
TL0=0x77;
EA=1;
ET0=1;
TR0=1;
temperature = 30;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -