📄 acus.c
字号:
{ os_wait(K_TMO,2,0);
if(!kb_hit())
{
NewsStr[0]++; //消息加1
KeyOk=0;}
}
}
/*********************************************************
*名称:signalon(void)
*功能:检查系统时钟是否在启动和结束之间
*入口参数:无
*出口参数:位变量,为0则时间到,为1时间未到
*********************************************************/
/*bit signalon(){
if(memcmp(&start,&end,sizeof(struct time))<0)
{if((memcmp(&start,&ctime,sizeof(struct time))<=0)&&
(memcmp(&ctime,&end,sizeof(struct time))<0))
return (1);
}
else{
if(memcmp(&end,&ctime,sizeof(struct time))>0 &&
memcmp(&ctime,&start,sizeof(struct time))>=0 )
return (1);
}
return(0);
}
/*********************************************************
*名称:init(void)
*功能:初始化
*入口参数:无
*出口参数:无
*********************************************************/
void init(void) _task_ INIT
{
CPU_init();
os_create_task(CLOCK);
os_create_task(LIGHTS);
os_create_task(KEYREAD);
os_create_task(TIMESET);///////////////////////
os_delete_task(INIT) ;
}
/*********************************************************
*名称:Clock()
*功能:定时任务
*入口参数:no
*出口参数:无
*********************************************************/
void clock (void) _task_ CLOCK {
uchar Time,ALAMETIME;
while (1) { /* clock is an endless loop */
if (++ctime.msec == 4)
{
ctime.msec = 0;
if(ALAMECON)
{if(ALAMETIME/2)ALAME=~ALAME;
if(ALAMETIME++>10)
{ALAME=0;ALAMETIME=0;ALAMECON=0;}
}
else ALAMETIME=0;
watchdog();
if (++ctime.sec == 60)
{ /* calculate the second */
ctime.sec = 0;
Time=TimeLimit;
if(TimeLimit<=1)
Time=0;
EEPROMwrite(TIMEADDR, Time-1);/*每分钟记录一次当前剩余时间 */
if (++ctime.min == 60)
{ /* calculate the minute */
ctime.min = 0;
if (++ctime.hour == 24)
{ /* calculate the hour */
ctime.hour = 0;
}
}
}
}
watchdog();
os_wait (K_IVL,100, 0); /* wait interval: 1 second */
}
}
/*********************************************************
*名称:TempControl()
*功能:显示任务
*入口参数:no
*出口参数:无
*********************************************************/
void Lights(void) _task_ LIGHTS
{ while (1) { /* endless loop */
Disp(dispbuff); /* increment counter 1 */
watchdog();
P03=~P03;
os_wait (K_TMO, 3, 0); /* wait for timeout: 10 ticks */
}
}
/*********************************************************
*名称:KeyRead()
*功能:键盘控制任务
*入口参数:no
*出口参数:无
*********************************************************/
void KeyRead(void) _task_ KEYREAD
{uchar keytemp ;
while (1)
{
if(P13)
{ os_create_task(TEMPSET); //创建温度设置任务
os_delete_task (TEMPCON);
templed=CLOSE; } //停止升温
else
{
if(TaskStart==1)
os_create_task (TEMPCON);//如果已经开始治疗就创建温度控制任务
os_delete_task (TEMPSET);//删除温度设置任务
}
ScanKey();
keytemp=DealNews( ) ;
switch( keytemp)
{
case 0xff: /*时间控制*/
{
os_send_signal (TIMESET);
TimeCounter=0;
keytemp=0;
break;}
case 0xfd: /*时间控制*/
{
os_send_signal (TIMESET);
TimeCounter=0;
keytemp=0;
break;}
case 0xfe: /*温度控制*/
{ TimeCounter=0;
keytemp=0;
break;}
default:
{ break;}
}
os_wait (K_TMO, 10, 0);
}
}
/*********************************************************
*名称:TempControl()
*功能:温度控制任务
*入口参数:no
*出口参数:无
*********************************************************/
TempControl() _task_ TEMPCON
{ uchar deca ,first;
while (1) {
TemperatuerResult();//读18b20温度值
deca=Temperature/10;
first=Temperature%10;
if(P13==0) //如果P13为0显示温度控制
{WriteDisp(2,deca);
WriteDisp(3,first);}
if(TempLimit<Temperature)
{ templed=CLOSE;
watchdog();}
else if(TaskStart)
{templed=OPEN ;
watchdog();}
os_wait (K_TMO, 100, 0);
}
}
/*********************************************************
*名称:TempSetup()
*功能:温度设置任务
*入口参数:no
*出口参数:无
*********************************************************/
TempSetup() _task_ TEMPSET
{ uchar deca,first,ad1=30,ad2=30;
while (1) { //ad1= MeilanFilter(CHANNEL1);
ad1=AD_start(CHANNEL1);
TempLimit=ad1;
if(TempLimit>=70)TempLimit=70;
if(TempLimit<2)TempLimit=0;
deca=TempLimit/10;
first=TempLimit%10;
if(P13)//如果P13为1显示温度设置
{WriteDisp(2,deca);
WriteDisp(3,first);
templed=CLOSE;}
watchdog();
os_wait (K_TMO, 50, 0);
}
}
/*********************************************************
*名称:PWMControl()
*功能:脉冲控制任务
*入口参数:no
*出口参数:无
*********************************************************/
void PWMControl(void) _task_ PWMCON
{ static uint idata freq,i;
static uchar idata PWMStop;
while(1)
{ PWMChang++;
if(pwmkey)
{ if(PWMChang>=6)
{ // HLTRN=~HLTRN;
HLTRN=0;
PWMChang=0;
i+=1;
i&=0x07;
freq=PWM128HZ>>i;
PWM_start(freq,4);
PWMStop=0;
}
}
else { HLTRN=0;
if(PWMChang>=2)
{
PWM_start(PWM1024HZ,2);
PWMChang=0;
}
else
PWM_start(PWM2048HZ-12,2);
}
os_wait(K_TMO,30,0);} //8秒变化一次
}
/*********************************************************
*名称:TempSetup()
*功能:时间设置任务
*入口参数:no
*出口参数:无
*********************************************************/
TimeSetup() _task_ TIMESET
{ uchar deca,first;
while (1) {
os_wait (K_SIG, 40, 0);
TimeLimit+=10;
if(TimeLimit>60)
TimeLimit=0;
end.hour=TimeLimit/60+ctime.hour; //记录结束时间
end.min= TimeLimit%60+ctime.min;
end.sec= 0;
ctime.sec=0;
deca =TimeLimit/10;
first=TimeLimit%10;
WriteDisp(0,deca);
WriteDisp(1,first);
TimeCounter=0;
if(TIMECONRUN==0)
os_create_task (TIMECON);
watchdog();
}
}
/*********************************************************
*名称:TimeCon()
*功能:温度控制任务
*入口参数:no
*出口参数:无
*********************************************************/
TimeCon() _task_ TIMECON
{uchar deca,first;
while(1)
{TimeCounter++;
TimeCounter&=0x1f;
if(TimeCounter>10&&TaskStart==0) //如果3秒后没有按键或调整电压则开始治疗任务
{
if(P13==0)
os_create_task (TEMPCON); //创建温度控制任务
os_create_task (PWMCON); //创建脉冲控制任务
EEPROMwrite(TIMEADDR, TimeLimit);
EEPROMwrite(TEMPADDR, TempLimit);//保存工作状态
start.hour=ctime.hour; //记录开始时间
start.min=ctime.min;
start.sec=ctime.sec;
timeled=OPEN;
templed=OPEN;
ALAMECON=CLOSE;
TaskStart=1;
TimeCounter=0;
TIMECONRUN=1;
}
if(TaskStart==1)
{ TimeLimit=(end.hour-ctime.hour)*60;
TimeLimit+=end.min-ctime.min ;
if(TimeLimit>60)TimeLimit=60;
deca =TimeLimit/10;
first=TimeLimit%10;
WriteDisp(0,deca);
WriteDisp(1,first);
watchdog();
if(TimeLimit==0) //如果任务开始检查时间是否
{TimeCounter=0;
TaskStart=0;
TimeLimit=0;
HLTEN=1;
HLTRN=1; //禁止PWM输出
ALAMECON=OPEN;
timeled=CLOSE;
templed=CLOSE;
TIMECONRUN=0;
os_delete_task (TEMPCON);
os_delete_task (PWMCON);
os_delete_task (TIMECON);
}
}
os_wait (K_TMO, 100, 0);
}
}
/*********************************************************
*名称:Blinking()
*功能:闪烁任务
*入口参数:no
*出口参数:无
*********************************************************/
/*Blinking() _task_ BLINKING
{ uchar i;
uchar tempdisp[4];
timeled=0;
templed=0;
for(i=0;i<=4;i++)
{tempdisp[i]=dispbuff[i];}
while(1) {
if(TempCounter==1)
{ os_wait(K_TMO,30,0);
templed=0;
WriteDisp(0,0xff);
WriteDisp(1,0xff);
os_wait(K_TMO,100,0);
templed=1;
WriteDisp(0,tempdisp[0]);
WriteDisp(1,tempdisp[1]);
os_wait(K_TMO,100,0);
}
if(TempCounter==2)
{timeled=0;
WriteDisp(2,0xff);
WriteDisp(3,0xff);
os_wait(K_TMO,100,0);
timeled=1;
WriteDisp(2,tempdisp[2]);
WriteDisp(3,tempdisp[3]);
os_wait(K_TMO,100,0);
}
if(TempCounter==0)
{WriteDisp(0,0x00);
WriteDisp(1,0x00);
WriteDisp(2,0x00);
WriteDisp(3,0x00);
os_delete_task (BLINKING);}
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -