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

📄 test.c

📁 借鉴了前人经验修改的ucos for pic18f4580工程文件
💻 C
字号:
#include    "includes.h"
#include    <timers.h>
OS_STK  TestTaskStk[100L];
OS_STK  PUTIOTaskStk[100L];
OS_STK  SemTaskStk[100L];
OS_EVENT *SecFlag;
OS_EVENT *Flag;

INT8U 	key,kpush,flag=0;
INT16U 	key_l,cnt=0;
INT8U  	dis[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
INT8U	bitCode[4]={0xef,0xfe,0xfd,0xf7};

void PUTIOTask(void *pdata);
void TestTask(void *pdata);
void SemTask(void *pdata);
void HardWareInit(void);

/*--------------------------------------------------------------------
函数名:delay
函数功能:软件延时子程序
输入参数:无
输出参数:无
---------------------------------------------------------------------*/			
void delay (INT16U tm)
{
	while(--tm);
}

/*--------------------------------------------------------------------
函数名:display
函数功能:数码显示子程序
输入参数:无
输出参数:无
---------------------------------------------------------------------*/		
void display(INT16U adreg)
{
	INT8U num[4],i,j;	
	if(adreg<1000){num[3]=10;num[0]=adreg%10;num[1]=adreg/10%10;num[2]=adreg/100%10;}
	else {num[0]=adreg%10;num[1]=adreg/10%10;num[2]=adreg/100%10;num[3]=adreg/1000%10;}
	for(i=0;i<4;i++)
	{
	PORTC=PORTC|0x1b;
  	PORTC=PORTC&bitCode[i];   				//位选
 	j=num[i];

  	PORTD=dis[j];  					//段选
  	delay(300);     						//调用延时
	if(i==3)
	PORTD=0x00;								//关显示,避免驻留现象 
	}
}

void HardWareInit(void)
{
	LATA=0;
	PORTA=0;
	LATB=0;
	PORTB=0;
	LATC=0;
	PORTC=0;
	LATD=0;
	PORTD=0;
	LATE=0;
	PORTE=0;
	ADCON1=0x0f;
	CMCON=0x07;
	TRISA=0x27;
	TRISE=0x00;
	PORTA=0;
	TRISB=0xff;
	TRISC=0x00;
	PORTC=0x00;
	TRISD=0x00;
	PORTD=0x00;

	key=0;
	kpush=0;
	key_l=0;
}
void PUTIOTask(void *pdata)
{
   INT8U err;
    for(;;)
    {
       	OSSemPend(SecFlag, 0, &err);
		switch(flag)
		{
			case	0x01:display(1111);break;	
			case	0x02:display(2222);break;
			case	0x03:display(3333);break;
			default:	break;
		}		
	//	display(2222);
       	OSTimeDly(1);
     }
}
void SemTask(void *pdata)
{
   INT8U TimCntr = 0;
    for(;;)
    {
       OSTimeDly(1);
       TimCntr++;
       if(TimCntr == 1)
         {
           OSSemPost(SecFlag);
           TimCntr = 0;
          } 
     }
}
void TestTask(void *pdata)
{
    pdata = pdata;
    OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_1);//使能t0中断
    WriteTimer0(-25000);

    // Initialize statistics task
    OSStatInit();

    // Start up other tasks
    OSTaskCreate(PUTIOTask, (void *)0, &PUTIOTaskStk[0], 6);
    OSTaskCreate(SemTask, (void *)0, &SemTaskStk[0], 9);
    HardWareInit();
    for(;;)
    {
		if((PORTA&0X7)==0X7)
		{						
			if((key_l>1)&&(key_l<30)){key=kpush;key_l=0;}//
			else if(key_l>50){key=kpush|0x80;key_l=0;}
			else{key=0;key_l=0;}
		}
		else
		{
			kpush=PORTA&0X7;
			key_l++;
		}
		switch(key)
		{
			case	0x06:flag=0x01;break;	
			case	0x05:flag=0x02;break;
			case	0x03:flag=0x03;break;
			default:	break;
		}
		
        OSTimeDly(1);
    }
}

void main (void)
{
    INTCONbits.GIEH = 0;
    OSInit();
    OSTaskCreate(TestTask, (void *)0, &TestTaskStk[0], 4);
    SecFlag = OSSemCreate(0);
    OSStart();
}

⌨️ 快捷键说明

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