/****************************************Copyright (c)*******************<br />* 功能:LED数码管显示0-F字符<br />* 说明:将跳线器JP3、JP4、JP7短接。<br />****************************************************************************/<br />#include "config.h"<br />#include "stdlib.h"<br /><br />#define TaskStkLengh 64 //定义用户任务堆栈长度<br />#define LED (1<<24)<br /> <br />OS_STK TaskStk [TaskStkLengh]; //定义用户任务0的堆栈<br />OS_STK TaskStk1 [TaskStkLengh]; //定义用户任务1的堆栈<br />OS_STK TaskStk2 [TaskStkLengh]; //定义用户任务0的堆栈<br />OS_STK TaskStk3 [TaskStkLengh];<br />OS_STK TaskStk4 [TaskStkLengh]; //定义用户任务0的堆栈<br />OS_STK TaskStk5 [TaskStkLengh];<br /><br />void Task0(void *pdata); //Task0 任务0<br />void Task1(void *pdata); <br />//void Task2(void *pdata); <br />void Task3(void *pdata); <br />void Task4(void *pdata); <br />void Task5(void *pdata); <br /><br />OS_EVENT *MyBox;<br />OS_EVENT *MyQueue;<br />void *MyDatQueue[16];<br />INT8U *Data;<br />//INT8U Time=0;<br />/* 此表为0--F的字模 */<br />INT8U DISP_TAB[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, <br /> 0x88,0x83,0xC6,0xA1,0x86,0x8E };<br /><br />/****************************************************************************<br />* 名称:DelayNS()<br />* 功能:长软件延时<br />****************************************************************************/<br />void DelayNS(uint32 dly)<br />{ uint32 i;<br /><br /> for(; dly>0; dly--) <br /> for(i=0; i<50000; i++);<br />}<br /><br /><br />/****************************************************************************<br />* 名称:HC595_SendDat()<br />* 功能:向74HC595发送一字节数据<br />* 入口参数:*dat 要发送的数据<br />* 出口参数:无<br />* 说明:发送数据时,高位先发送。<br />****************************************************************************/<br />void HC595_SendDat(INT8U dat)<br />{ <br /> IO0CLR = SPI_CS; // SPI_CS = 0<br /> S0PDR= dat;<br /> while((S0PSR&0x80)==0); <br /> IO0SET = SPI_CS; // SPI_CS = 1,输出显示数据<br />}<br /><br /><br /> /* 主函数 */<br /> int main (void)<br />{<br /> OSInit (); <br /> OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 0); <br /> OSStart ();<br /> return 0; <br />}<br /><br /> /*任务Task0*/<br /> void Task0 (void *pdata)<br />{ <br /> pdata = pdata;<br /> Data=DISP_TAB;<br /> OSTaskCreate (Task1,(void *)0, &TaskStk1[TaskStkLengh - 1], 1);<br /> //OSTaskCreate (Task2,(void *)0, &TaskStk2[TaskStkLengh - 1], 2);<br /> OSTaskCreate (Task3,(void *)0, &TaskStk3[TaskStkLengh - 1], 3);<br /> OSTaskCreate (Task4,(void *)0, &TaskStk4[TaskStkLengh - 1], 4);<br /> OSTaskCreate (Task5,(void *)0, &TaskStk5[TaskStkLengh - 1], 5);<br /> //MyBox=OSMboxCreate((void *)0);<br /> //MyQueue=OSQCreate(&MyDatQueue[0],16);<br /> TargetInit (); <br /> PINSEL0&=~LED;<br /> IO0DIR|=LED;<br /> for(;;)<br /> { <br /> /*for(Time=0;Time<16;Time++)<br /> {<br /> *Data=DISP_TAB[Time];<br /> OSMboxPost(MyBox,Data);<br /> //Time++;<br /> //OSQPost(MyQueue,Data);<br /> //OSTimeDly(5);<br /> //HC595_SendDat(DISP_TAB[Time]);<br /> IO0SET|=LED;<br /><br /> OSTimeDlyHMSM(0,0,10,0);<br /> }*/<br /> HC595_SendDat(DISP_TAB[10]);<br /> OSTimeDly(OS_TICKS_PER_SEC);<br /> }<br />}<br /> <br /> /*任务Task1*/<br /> void Task1 (void *pdata)<br />{<br /> // INT8U *Disp;<br /> //INT8U err;<br /> pdata=pdata;<br /> for(;;)<br /> {<br /> /* Disp=OSMboxPend(MyBox,0,&err);<br /> IO0CLR|=LED;<br /> // Disp=OSQPend(MyQueue,2,&err);<br /> //OSMboxDel(MyBox,OS_DEL_NO_PEND,&err);//没有信号量时删除邮箱 <br /> HC595_SendDat(Disp); // 输出LED显示数据 <br /> // if(Time>=10) OSTaskSuspend(OS_PRIO_SELF); <br /> DelayNS(40); // 延时<br /> <br /> //OSTimeDlyHMSM(0,0,1,0);<br /> OSTimeDlyResume(0);*/<br /> HC595_SendDat(DISP_TAB[1]);<br /> OSTimeDly(OS_TICKS_PER_SEC);<br /> }<br />}<br /><br /><br /><br /><br /><br /><br /><br />void Task3 (void *pdata)<br />{<br /> pdata=pdata;<br /> for(;;)<br /> {<br /> HC595_SendDat(DISP_TAB[3]);<br /> OSTimeDly(OS_TICKS_PER_SEC);<br /> }<br />}<br /><br /><br />void Task4 (void *pdata)<br />{<br /> pdata=pdata;<br /> for(;;)<br /> {<br /> HC595_SendDat(DISP_TAB[4]);<br /> OSTimeDly(OS_TICKS_PER_SEC);<br /> }<br />}<br /><br /><br />void Task5 (void *pdata)<br />{<br /> pdata=pdata;<br /> for(;;)<br /> {<br /> HC595_SendDat(DISP_TAB[5]);<br /> OSTimeDly(OS_TICKS_PER_SEC);<br /> }<br />}<br /> |
|