?? gressy.c
字號:
//#define GRESSY 0
//#define TORCH1 1
//#define TORCH2 2
//#define TYPE GRESSY
#include <reg52.h>
#include <GRESSY.h>
void main(void)
{
bit oldLAST=0;
bit oldNEXT=0;
unsigned int addr=0;
unsigned char addrh=0,addrl=0;
//LED TEST
// start=1;
PLAY=1;
EA=0;
Top1=0;DelayA();Top1=1;
Top2=0;DelayA();Top2=1;
Top3=0;DelayA();Top3=1;
Top4=0;DelayA();Top4=1;
Top5=0;DelayA();Top5=1;
Top6=0;DelayA();Top6=1;
Bot1=0;DelayA();Bot1=1;
Bot2=0;DelayA();Bot2=1;
Bot3=0;DelayA();Bot3=1;
Bot4=0;DelayA();Bot4=1;
Bot5=0;DelayA();Bot5=1;
BELL=OKLED=0;DelayA();BELL=OKLED=1;
isrecord=0;
// isplay=0;
Initial();
// InitialINT();
// LedTest();
// Initial();
// start=0;
oldLAST=LAST;
oldNEXT=NEXT;
// playno=1;
PowerUp();Delay(50);PowerUp();Delay(100);
sd=0;BELL=1;
PL=0;CLK=0;
isrecord=0;
ledchange=1;
while(1)
{
if(PLAY|REC)
{
if(PLAY)
{
// RECERROR=1;RECLED=1;
// RECSEL=1;
// isrecord=0;
// if(!isplay)
// {
// if(playno<1||playno>MAXNO) playno=1;
// isplay=1;
// ledchange=1;
// }
//SET ADDRESS AND PLAY
if((!INT)||ledchange)
{
if(ledchange)
{
Stop();
Delay(200);
if(playno<1||playno>MAXNO) playno=1;
addr=(playno-1)*PERDURATION;
addrl=addr%256;
addrh=addr>>8;
// SMG=~(LED[playno]);
ledchange=0;
}
SetPlay(addrl,addrh);
Play();
}
MUTEOUT=(md?0:1);
//CHANNEL CHANGE
if(!LAST||!NEXT)
{
if(oldLAST&&LAST)
{
if(playno<=1||playno>MAXNO) playno=MAXNO;else playno--;
sd=SHOWTIME;
ledchange=1;
}
if(oldNEXT&&NEXT)
{
if(playno<1||playno>=MAXNO) playno=1;else playno++;
sd=SHOWTIME;
ledchange=1;
}
}
}
else
{
// isplay=0;RECSEL=0;
// if(!isrecord)
// {
// ledchange=1;
// isrecord=1;
// if(playno<1||playno>MAXNO) playno=1;
// }
RECLED=0; //ON
if(ledchange)
{
Stop();
Delay(200);
if(playno<1||playno>MAXNO) playno=1;
addr=(playno-1)*PERDURATION;
addrl=addr%256;
addrh=addr>>8;
// SMG=~(LED[playno]);
ledchange=0;
}
if(LAST)
{
if(NEXT)
{
while(LAST||NEXT);
Delay(1000);
}
else
{
/* PowerUp();
Delay(5);
PowerUp();
Delay(10);
*/
RECERROR=1; //OFF
SetRec(addrl,addrh);
// Delay(1);
Rec();
isrecord=1;
td=MAXRECTIME;
while(STSP&&td&&REC){if(!OUTOFRANGE) ed=20;}
while((!STSP)&&td&&REC){if(!OUTOFRANGE) ed=20;}
Stop();
RECERROR=1; //off
Bot3=1;
isrecord=0;
// StopPwrdn();
// Delay(1);
while(STSP);
}
}
ledchange=0;
if(oldNEXT&&NEXT)
{
if(playno<1) playno=1;
if(playno>=MAXNO)
{
playno=1;
RECLED=1;
BELL=1; //off
OKLED=1; //off
Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
PLAY=1;
Delay(200);
Bot3=1;
}
else
{
playno++;
}
ledchange=1;
sd=SHOWTIME;
}
}
oldLAST=!LAST;
oldNEXT=!NEXT;
}
else
{
// StopPwrdn();
Stop();
Delay(200);
// SMG=~0;
// isplay=0;
isrecord=0;ledchange=0;
RECERROR=1;
}
}
}
void Initial(void)
{
P0=P1=P2=P3=0xff;
// RECLED=1;
INPORT=0XFF;
TMOD=0X11;
TR0=1;
EX0=0;
ET0=1;
EA=1;
TL0=CYCLE % 256;
TH0=CYCLE/256;
}
void SendByte(char ssd)
{
char i;
unsigned char shd;
for(shd=1,i=0;i<8;i++,shd<<=1)
{
SCLK=0;
MOSI=shd&ssd?1:0;
SCLK=0;
SCLK=0;
SCLK=0;
SCLK=0;
SCLK=0;
SCLK=0;
SCLK=0;
SCLK=1;
SCLK=1;
SCLK=1;
SCLK=1;
SCLK=1;
SCLK=1;
SCLK=1;
}
MOSI=0;
SCLK=0;
}
void PowerOff (void) interrupt INT0INT
{
// StopPwrdn();
EA=0;
ET0=0;
P0=P1=P2=P3=0;
PCON|=0x2;
}
void Timems (void) interrupt TIMER0INT
{
#define IO1 1
#define S1 2
#define MOT 4
#define T3 8
#define T2 0X10
#define T1 0X20
#define IO2 0X40
#define H1 0X80
#define IO106 0X100
#define IO104 0X200
#define IO105 0X400
#define IO103 0X1000
#define IO101 0X2000
#define IO102 0X4000
#define RECTIMETEST 500
static unsigned char ft=FLASHTIME;
static bit fd,TestBit=0;
static char InP1=0,InP2=0;
static int RecTimeTest=RECTIMETEST;
char InP,InP3;
static char OKNUM=0;
static unsigned char TestDelay;
static bit CloseTestBit;
char i;
static bit IsStart=1;
bit OnceOk;
#define ClearDisplay OnceOk
#define Start (!RECERROR)
TL0=CYCLE % 256;
TH0=CYCLE/256;
//KEY TEST
InP=INPORT^P1;
InP3=InP&InP2; //count 3
InP2=InP&InP1&(~InP3);
InP1=InP&(~InP3);
InP^=INPORT; //InP=PP1
InP&=InP3;
INPORT&=~InP3;
INPORT|=InP;
if(PLAY)
{
//IO TEST
PL=0;PL=0;PL=1;
//Input=0;
for(i=0;i<16;i++)
{
Input<<=1;
if(!DATA) Input++;
CLK=1;CLK=1;CLK=0;
}
PL=0;
//Once OK DETECT
switch(P1&0XC)
{
case 8: //TORCH
case 12:
Input&=(H1|T1|T2|T3|MOT|S1|IO1|IO101|IO102|IO103);
OnceOk=(Input==(H1|T1|T2|T3|MOT|S1|IO1|IO101|IO102|IO103));
if(Input&0xff) CloseTestBit=1;
if(!Input) CloseTestBit=0;
if(!OK&&TestBit) //TestBit==1 mean Testing
{
Top1=(H1&Input);
Top2=(IO101&Input);
Top3=(IO1&Input);
Top4=(MOT&Input);
Top5=(S1&Input);
Top6=(T3&Input);
Bot1=(1);
Bot2=(1);
Bot3=(T1&Input)&&(T2&Input);
Bot4=(IO103&Input);
Bot5=(IO102&Input);
}
else
{
if(!sd) Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
}
break;
case 0: //GRESSY
Input&=(H1|IO2|T1|T2|T3|S1|IO1|IO101|IO102|IO103|IO104|IO105|IO106);
OnceOk=(Input==(H1|IO2|T1|T2|T3|S1|IO1|IO101|IO102|IO103|IO104|IO105|IO106));
if(Input&0xff) CloseTestBit=1;
if(!Input) CloseTestBit=0;
if(!OK&&TestBit) //TestBit==1 mean Testing
{
Top1=(H1&Input);
Top2=(IO2&Input);
Top3=(IO101&Input);
Top4=(IO1&Input);
Top5=(S1&Input);
Top6=(T3&Input);
Bot1=(IO104&Input);
Bot2=(IO105&Input)&&(IO106&Input);
Bot3=(T1&Input)&&(T2&Input);
Bot4=(IO103&Input);
Bot5=(IO102&Input);
}
else
{
if(!sd) Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
}
break;
case 4: //GRESSY PART
Input&=(H1|IO2|T1|T2|T3|IO1|IO101|IO102|IO103|IO105|IO106);
OnceOk=(Input==(H1|IO2|T1|T2|T3|IO1|IO101|IO102|IO103|IO105|IO106));
if(Input&0xff) CloseTestBit=1;
if(!Input) CloseTestBit=0;
if(!OK&&TestBit) //TestBit==1 mean Testing
{
Top1=(H1&Input);
Top2=(IO2&Input);
Top3=(IO101&Input);
Top4=(IO1&Input);
Top5=(1); //(S1&Input);
Top6=(T3&Input);
Bot1=(1); //(IO104&Input);
Bot2=(IO105&Input)&&(IO106&Input);
Bot3=(T1&Input)&&(T2&Input);
Bot4=(IO103&Input);
Bot5=(IO102&Input);
}
else
{
if(!sd) Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
}
break;
}
//NG DELAY
if(!IsStart&&Start)
{
OKLED=1;OnceOk=0;
}
IsStart=Start;
if(Start) TestBit=CloseTestBit=1;
if(TestBit==CloseTestBit)
{
TestDelay=TESTDELAYTIME;
}
else
{
if(TestDelay) //&&!OK)
{
TestDelay--;
}
else
{
TestBit=CloseTestBit;
}
}
//OK detect
if(!OK)
{
if(OnceOk)
{
//Once OK
BELL=1; //BELL NOT RING
OKNUM++;
if(OKNUM>=5) //20 times OK
{
OKNUM=0;
OKLED=0; //OK LED LIGHT
}
}
else
{
//NG
OKNUM=0;
if(TestBit) BELL=0; //BELL RING
}
}
//REC DETECT (LAST AND NEXT TOUCH FOR 5 SECONDS)
// ClearDisplay=0;
if(!(P1&3))
{
if(RecTimeTest) RecTimeTest--;
if(!RecTimeTest)
{
PLAY=0;
playno=1;
ledchange=1;
// ClearDisplay=1;
// BELL=1; //off
// OKLED=1;
// Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot3=Bot4=Bot5=1;
}
}
else
{
RecTimeTest=RECTIMETEST;
}
// PLAY AND MUTE DELAY
md=(MUTEIN?(md?md-1:md):20); //20=0.2S
//MUSIC SELECT DISPLAY DELAY
if(sd) sd--;
}
else
{
//RECORD ERROR DISPLAY DELAY
if(isrecord)
{
if(ed)
{
ed--;
RECERROR=0; //light
Bot3=0; //light
}
else
{
RECERROR=1; //off
Bot3=1; //off
}
}
}
if(!TestBit||sd||REC) //||ClearDisplay)
{
//Clear DISPLAY Reset OK and NG and display
if(!TestBit||REC)
{
BELL=1; //off
OKLED=1;//mean OK=0
}
Top1=Top2=Top3=Top4=Top5=Top6=Bot1=Bot2=Bot4=Bot5=1;
if(sd||REC)
{
switch(playno)
{
case 1:Top1=fd;break;
case 2:Top2=fd;break;
case 3:Top3=fd;break;
case 4:Top4=fd;break;
case 5:Top5=fd;break;
case 6:Top6=fd;break;
case 7:Bot4=fd;break;
case 8:Bot5=fd;break;
}
if(isrecord) OKLED=fd; //light:mean recording
if(ft)
{
ft--;
}
else
{
// ft=REC?FLASHTIME:FLASHTIME/2;
ft=FLASHTIME;
fd=~fd;
}
}
/* switch(playno)
{
case 1:Top1=fd;if(REC) Top2=Top3=Top4=Top5=Top6=Bot4=Bot5=1;break;
case 2:Top2=fd;if(REC) Top1=Top3=Top4=Top5=Top6=Bot4=Bot5=1;break;
case 3:Top3=fd;if(REC) Top1=Top2=Top4=Top5=Top6=Bot4=Bot5=1;break;
case 4:Top4=fd;if(REC) Top1=Top2=Top3=Top5=Top6=Bot4=Bot5=1;break;
case 5:Top5=fd;if(REC) Top1=Top2=Top3=Top4=Top6=Bot4=Bot5=1;break;
case 6:Top6=fd;if(REC) Top1=Top2=Top3=Top4=Top5=Bot4=Bot5=1;break;
case 7:Bot4=fd;if(REC) Top1=Top2=Top3=Top4=Top5=Top6=Bot5=1;break;
case 8:Bot5=fd;if(REC) Top1=Top2=Top3=Top4=Top5=Top6=Bot4=1;break;
}*/
}
//NORAL DELAY
if(td) td--;
}
void Delay(int a)
{
td=a/10;
while(td);
}
void DelayA()
{
unsigned int i=50000;
while(i--);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -