L_Init(); for(;;) { IOCLR=adstart; //输入高低的脉冲电平 delay(100); IOSET=adstart; delay(100); IOCLR=adstart; delay(100); L_Init();
while((IOPIN&adend)==0); IOSET=1<<11; //11位为AD的OE使能端 // OSTimeDlyHMSM(0,0,0,50); i=IOPIN; i=i>>15; //AD的输出OUT8到OUT1分别由15到22位控制 OSTaskSuspend(OS_PRIO_SELF); } }
/**************************************************************************************************** ** 函数名称:Task2
** 功能描述: μCOS-II的第3个任务,LED显示
********************************************************************************************************/ void Task2(void *p_arg) { INT32U gw,sw,bw;
p_arg = p_arg; L_Init();
//动态循环显示数码管
while((IOPIN&key)!=0) //假如按键再次按下,则推出显示循环 {
gw = i; /* 取个位数据 */ sw = i0/10; /* 取十位数据 */ bw = i/100; /* 取百位数据 */
IOSET=(1<<10)|led_code[gw]; //显示个位
11
delay(10);
IOCLR=0x00000fff; //消影 //IOSET=1<<10; //IOCLR=1<<10;
IOSET=(1<<9)|led_code[sw]; //显示十位
delay(10);
IOCLR=0x00000fff; //消影 //IOSET=1<<9; //IOCLR=1<<9;
IOSET=(1<<8)|led_code[bw]; //显示百位
delay(10);
IOCLR=0x00000fff; //消影 //IOSET=1<<8; //IOCLR=1<<8; OSTaskResume(2); }
//IOCLR=0x00000fff; //delay(2000);
//OSTaskResume(1); //恢复任务1AD采样 //OSTaskResume(2); //恢复任务2LED显示
// OSTaskResume(2); //恢复优先级为2的任务,即任务1 //OSTaskResume(3); //恢复优先级为3的任务,即任务2 }
12
五、仿真效果。(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)
注:此设计可以在POT电阻改变时,LED实时显示,无须停止运行再重新运行仿真.
13