⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtx51.c

📁 在RTX51 TINY操作系统下的键盘显示源程序。显示采用数码管。
💻 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 + -