📄 test.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 + -