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

📄 main.c

📁 运行于51单片机的音乐彩灯源代码
💻 C
字号:
/*********************************************************************************************************
**                                             Small RTOS(51)
**                                   The Real-Time Kernel(For Keil c51)
**
**                                  (c) Copyright 2002-2003, chenmingji
**                                           All Rights Reserved
**
**                                                  V1.12.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: ext2.c
**创   建   人: 陈明计
**最后修改日期: 2002年12月30日
**描        述: ext2源代码。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版  本: V0.50
** 日 期: 2002年2月22日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版  本: V1.11.0
** 日 期: 2003年12月2日
** 描 述: 删除TaskF代码
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版  本: V1.12.0
** 日 期: 2003年12月30日
** 描 述: 无变化
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 陈子牙
** 日 期: 2005年5月10日
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
    
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include "..\h\config.h"

#define  ID_LEDRShow    0 
#define  ID_MusicPlay  1
#define  ID_LEDWtsk    2
#define  ID_MusicSpeak 4

#define  ID_OSS_W_LED    0
#define  ID_OSS_R_LED    1
#define  ID_OSS_M        2


#define  LED_MAX  20
#define  aLED_MAX 2
char const aLED0[LED_MAX]={0x81,0x42,0x24,0x18,0x24,0x42,0x81,0xc3,0xe7,0xff,0x00,0x00,0xff,0x18,0x3c,0x7e,0xff,0x00,0x00,0x00};
char const aLED1[LED_MAX]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x81,0x00,0x18,0x00};
char const  * aLED[aLED_MAX];

/************************************************************************************************
函数名:主函数
功能:  启动多任务
作者:  陈子牙
************************************************************************************************/

                            void main(void)
{   
    
    TMOD = (TMOD & 0xF0) | 0x01;
    TL0 = 0x00;
    TH0 = 0x4c;
    TR0 = 1;
    ET0 = 1;
    TF0 = 0;
    OSStart();
}

//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////
             void   LEDRShow(void)
{char SemRec=0;
 char ID_led=0;
 char h_led=0;
 bit bOK=0;  //为0时允许灯亮  
  aLED[0]=aLED0;
  aLED[1]=aLED1;
  while(1)
		{//SPEAK=1;
         if(bOK==0)
		 {
		     if((++h_led)==LED_MAX)
		     h_led=0;
		     LED_SHOW=~aLED[ID_led][h_led];
		 }
		 OSWait(K_TMO,2);
		 SemRec=OSSemAccept(ID_OSS_R_LED);
		 if(SemRec==OS_SEM_OK)
		 {
		    ID_led++;  
		 	if(ID_led==aLED_MAX)
			{
			  LED_SHOW=0xff;
			  bOK=1;
			}
			if(ID_led==aLED_MAX+1)
			{
			   ID_led=0;
			   bOK=0;
			}
		  }
		}

}
//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////
            void    KEYGet(void)
{char key=0;
//OSWait(K_TMO,10);
  OSSemCreate(ID_OSS_W_LED,0);
  OSSemCreate(ID_OSS_R_LED,0);
  OSSemCreate(ID_OSS_M,0);
  //fnKEYInit();
  while(1)
	   {//SPEAK=1;
	   	OSWait(K_TMO,2);
	   	key=fnGetKey();
	   	if(key==KEY_W)
	   	{
		   OSSendSignal(ID_LEDWtsk); 
		}
	   	if(key==KEY_R)
	   	{
		    OSSemPost(ID_OSS_R_LED);  
		}
	   	if(key==KEY_M)
	   	{
		    OSSendSignal(ID_MusicPlay);
		}
	   }


}

//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////
 extern  char ID_speak;
extern char const aMusic1[];
extern char const aMusic2[];
extern char const *aMusic[MUSIC_MAX];
extern bit MUSIC_OK;//为1时,不允许播放音乐
           void   MusicPlay(void)
{
 aMusic[0]=aMusic1;
 aMusic[1]=aMusic2;
   while(1)
        {// SPEAK=1;
		   OSWait(K_SIG,0);
		   if((++ID_speak)==MUSIC_MAX)
		   {
		     MUSIC_OK=1;
			 //ID_speak=0;
		   }
		   if(ID_speak==MUSIC_MAX+1)
		   {
		   	 ID_speak=0;
			 MUSIC_OK=0;
		   }

		   OSSendSignal(ID_MusicSpeak);
			
		}


}

         void    MusicSpeak(void)
{
  while(1)
  {	SPEAK=1;
   OSWait(K_SIG,0);
   timer1init();
   Speak();
   time1stop();
  }

}
//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////

        void  LEDWtsk(void)
{bit i=1;
    while(1)
	{ //SPEAK=1;
	  LED_W=i=~i; 
	  OSWait(K_SIG,0);  
	
	
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -