📄 driver.c
字号:
#include "def.h"
extern void savemsg( unsigned char msgtype, unsigned char msgcode);
extern void write728x(unsigned char reg_add, unsigned char write_data);
extern void readBC7281(void);
extern void SetFre(unsigned int frequest);
extern void rerunSA866(void);
extern void zrerunSA866(void);
extern struct STRSHOW show;
extern struct STRSA sa866ae;
void dealkeymsg( unsigned char nowmsg);
struct STRWORK work;
//----------------------------------------------------------
interrupt [TIMERA0_VECTOR] void Timer_A(void)//1khz
{
static int keykeeptime;
static int keylast,keypress;
static unsigned char keystate;
static unsigned char acnt;
static unsigned char klow,ltime,lowstate;
static unsigned char failkey,passkey,failkeytime,passkeytime;
acnt++;
if(acnt==4)//4ms
{
acnt=0;
keypress=P2IN;
passkey=keypress;
failkey=keypress;
if(((~passkey)&0x04)==0x04)
{
if(passkeytime<10)passkeytime++;
}
else
{
if(passkeytime>0)passkeytime--;
}
if((passkeytime>=5)&&(work.passkey==OFF)){work.passkey=ON;}
if((passkeytime<5)&&(work.passkey==ON)){work.passkey=OFF;}
//----------------------------------------
if(((~failkey)&0x08)==0x08)
{
if(failkeytime<10)failkeytime++;
}
else
{
if(failkeytime>0)failkeytime--;
}
if((failkeytime>=2)&&(work.failkey==OFF))
{
setSETTR;
setOUT4;
TACCR1=100;
work.pwmcount=100;
if(work.workstatic!=PASSRUN)work.workstatic=FAIL;
work.failkey=ON;
}
// if((passkeytime>=4)&&(work.failkey==OFF)) {work.failkey=ON;}
// if((passkeytime<4)&&(work.failkey==ON)) {work.failkey=OFF;}
//------------------------------------------
klow=P1IN;
klow&=0x40;
if(klow==0x40)
{
ltime=0;
}
else
{
ltime++;
if((ltime==3)&&(lowstate==0)){savemsg(BCKEYP,BCKEYP);show.lowstate=1;}
}
// keypress=P2IN;
keypress&=0x03;
if(keypress==0x03)
{
keystate=0;keykeeptime=0;
}
else
{
if( keypress == keylast )
{
keykeeptime++;
if((keykeeptime==5)&&(keystate==0))
{
savemsg(KEPPRESS,keypress);keystate=1;}
}
else
{
keykeeptime=0; keylast=keypress;
}
}
}
ADC12CTL0 |= 0x01; //50hz
}
interrupt [TIMERB0_VECTOR] void Timer_B(void)//50hz
{
static unsigned char number,minu;
switch(work.workstatic)
{
case STOP:
{
if(work.onkey==ON)
{
if(work.passkey==ON)
{
work.workstatic=PASSRUN;
work.onkey=OFF;
setOUT3;
}
else
{
work.workstatic=UPVOLT;
work.onkey=OFF;
}
}
break;
}
case PASSRUN:
{
if(work.offkey==ON)
{
work.workstatic=STOP;
work.offkey=OFF;
clrOUT3;
}
break;
}
case UPVOLT:
{
work.pwmcount++;
work.pwmcount++;
TACCR1=work.pwmcount;
if(work.pwmcount>7000)
{
work.workstatic=INISA;
}
break;
}
case INISA:
{
savemsg(INISAAE,INISAAE);
work.workstatic=RUN;
break;
}
case RUN:
{
if(work.offkey==ON)
{
savemsg(REDOWN,REDOWN);
work.workstatic=SASTOP;
work.offkey=OFF;
work.stoptime=5000;
}
break;
}
case SASTOP:
{
work.stoptime--;
if(work.stoptime<2)
{
work.stoptime=0;
work.workstatic=DOWNVOLT;
}
break;
}
case DOWNVOLT:
{
work.pwmcount=work.pwmcount-10;
TACCR1=work.pwmcount;
if(work.pwmcount<100)
{
work.workstatic=STOP;
}
break;
}
default :break;
}
//___________________________________
number++;
if(show.initimer>0)
{
show.initimer--;
if(show.initimer==0){write728x(0x12,0x80);write728x(0x12,0x80);write728x(0x12,0x80);}
}
if(number>40)
{
savemsg(RESHOW,RESHOW);
number=0;
}
//----------------------------
minu++;
if(minu>3000)
{
savemsg(MSECON,MSECON);
minu=0;
}
}
void dealkeymsg( unsigned char nowmsg)
{
switch(nowmsg)
{
case RUNKEY:
{
if(work.workstatic==STOP)work.onkey=ON;
break;
}
case STOPKEY:
{
if((work.workstatic==RUN)||(work.workstatic==PASSRUN))work.offkey=ON;
break;
}
case SELTKEY:
{
if(show.page==0)
{show.page=1;}
else
{
show.page=0;
if(work.workstatic==RUN){SetFre(sa866ae.freset);}
}
break;
}
case UPKEY:
{
if(show.page==1)
{
if(sa866ae.freset<550)
{sa866ae.freset=sa866ae.freset+10;}
}
break;
}
case DOWNKEY:
{
if(show.page==1)
{
if(sa866ae.freset>10)
{sa866ae.freset=sa866ae.freset-10;}
}
break;
}
//------------------------------------------------------
case KEY1:
{
if(work.workstatic==STOP)
{
work.onkey=ON;
}
break;
}
case KEY2:
{
if((work.workstatic==RUN)||(work.workstatic==PASSRUN))work.offkey=ON;
break;
}
default: break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -