📄 t10a2_display.c
字号:
if (Waiting_Step < 10)
{
Waiting_Step++;
}
else
{
Waiting_Step = 0;
}
}
switch (Waiting_Step)
{
case 0:
WriteMod(64,16,Star001);
break;
case 1:
WriteMod(110,16,Star001);
WriteMod(64,16,Star002);
break;
case 2:
WriteMod(110,16,Star002);
WriteMod(64,16,Star003);
WriteMod(32,8,Star002);
break;
case 3:
WriteMod(110,16,Star002);
WriteMod(64,16,Star004);
WriteMod(32,8,Star003);
break;
case 4:
WriteMod(110,16,Star003);
WriteMod(64,16,Star005);
WriteMod(80,8,Star001);
break;
case 5:
//WriteMod(110,16,Star004);
WriteMod(64,16,Star006);
WriteMod(80,8,Star002);
WriteMod(8,12,Star001);
break;
case 6:
WriteMod(110,16,Star005);
//WriteMod(64,16,Star007);
//WriteMod(16,24,Star001);
WriteMod(80,8,Star003);
WriteMod(8,12,Star002);
break;
case 7:
WriteMod(110,16,Star006);
//WriteMod(100,16,Star001);
WriteMod(16,24,Star001);
WriteMod(8,12,Star003);
break;
default:
Waiting_Step = 0;
break;
}
if (SccrollY_PT < 126)
{
SccrollY_PT++;
}
else
{
SccrollY_PT = -64;
}
WriteMod(SccrollY_PT,8,Avlight_Tab);
}
/******************************************************************************/
// Function: 开机画面
// Input: none
// Output: none
/******************************************************************************/
unsigned char Initial_Display()
{
static unsigned char delay=0,starseq=0,acttimer,arr=0,lettdelay,lettarr;
unsigned char tmp;
unsigned char x,y;
while(!(time_flag&BIT(FLAG_5MS)));
time_flag&=~BIT(FLAG_5MS);
//Lighten_VFD();
if(arr==0)
{
for(tmp=0;tmp<80;tmp++)
{
Spectrum_Temporary1[tmp]=0;
}
acttimer=1;
lettdelay=50;
lettarr=0;
}
acttimer--;
if(acttimer!=0)return 0;
acttimer=20;
arr++;
x=0;
y=0;
if(delay==0)
{
x=StarLib[starseq][0];
y=x>>5;
x=x&0x1f;
if(x&16)
{
x=-(x&15);
}
if(y&4)
{
y=-(y&3);
}
delay=StarLib[starseq][1];
starseq++;
if(starseq>=(60/2))starseq=0;
}
delay--;
Lock_VFD(1);
StarSetOut(x,y);
lettdelay--;
if(lettdelay==0)
{
lettarr++;
lettdelay=D90a_Appear(lettarr);
}
else
{
D90a_Appear(lettarr);
}
Lock_VFD(0);
if(arr==100)
{
arr=0;
return 1;
}
else
{
return 0;
}
}
void StarSetOut(signed char speedx,signed char speedy)
{
signed char x,y;
unsigned char l,tmp;
unsigned char __flash *p2star;
CLEAR_VFD();
if(speedx | speedy)
{
l=0;
while(Spectrum_Temporary1[l]!=0)
{
l+=5;
if(l>=(16*5))
{
l=0;
break;
}
}
Spectrum_Temporary1[l++]=speedx;
Spectrum_Temporary1[l++]=speedy;
Spectrum_Temporary1[l++]=64;
Spectrum_Temporary1[l++]=20;
Spectrum_Temporary1[l]=0;
}
for(l=0;l<16*5;)
{
speedx=Spectrum_Temporary1[l];
speedy=Spectrum_Temporary1[l+1];
if(!(speedx || speedy))
{
l+=5;
continue;
}
if(speedx>0)
{
Spectrum_Temporary1[l]++;
}
else
{
if(speedx<0)
{
Spectrum_Temporary1[l]--;
}
}
l++;
if(speedy>0)
{
Spectrum_Temporary1[l]++;
}
else
{
if(speedy<0)Spectrum_Temporary1[l]--;
}
l++;
x=Spectrum_Temporary1[l];
x+=speedx;
if(x < 0)
{
Spectrum_Temporary1[l-2]=0;
Spectrum_Temporary1[l-1]=0;
l+=3;
continue;
}
Spectrum_Temporary1[l++]=x;
y=Spectrum_Temporary1[l];
y+=speedy;
if(y < 0 || y > 32)
{
Spectrum_Temporary1[l-3]=0;
Spectrum_Temporary1[l-2]=0;
l+=2;
continue;
}
Spectrum_Temporary1[l++]=y;
tmp=Spectrum_Temporary1[l];
if(tmp<9)tmp++;
Spectrum_Temporary1[l++]=tmp;
switch(tmp)
{
case 0:
continue;
case 1:
VFD_Point(x+4,y+4,1);
continue;
case 2:
p2star=Star001;
break;
case 3:
p2star=Star002;
break;
case 4:
p2star=Star003;
break;
case 5:
p2star=Star004;
break;
case 6:
p2star=Star005;
break;
case 7:
p2star=Star006;
break;
case 8:
p2star=Star007;
break;
case 9:
p2star=Star008;
break;
}
WriteMod(x,y,p2star);
}
}
unsigned char D90a_Appear(unsigned char step)
{
unsigned char VFD_Scan_Count=1;
switch(step)
{
case 0:
break;
case 1:
WriteMod(127-21,14,SLANT_T);
break;
case 2:
WriteMod(127-48,14,SLANT_T);
break;
case 3:
WriteMod(127-75,14,SLANT_T);
break;
case 4:
WriteMod(127-90,14,SLANT_T);
break;
case 5:
WriteMod(127-103,14,SLANT_T);
break;
case 6:
WriteMod(127-103,14,SLANT_T);
WriteMod(127-10,14,SLANT_H);
break;
case 7:
WriteMod(127-37,14,SLANT_H);
WriteMod(127-103,14,SLANT_T);
break;
case 8:
WriteMod(127-64,14,SLANT_H);
WriteMod(127-103,14,SLANT_T);
break;
case 9:
WriteMod(127-92,14,SLANT_H);
WriteMod(127-103,14,SLANT_T);
VFD_Scan_Count = VFD_Scan_Count*2;
break;
case 10:
WriteMod(127-92,14,SLANT_H);
WriteMod(127-103,14,SLANT_T);
WriteMod(127-24,14,SLANT_G);
break;
case 11:
WriteMod(127-51,14,SLANT_G);
WriteMod(127-92,14,SLANT_H);
WriteMod(127-103,14,SLANT_T);
break;
case 12:
WriteMod(127-92,14,SLANT_GH);
WriteMod(127-103,14,SLANT_T);
VFD_Scan_Count = VFD_Scan_Count*2;
break;
case 13:
WriteMod(127-92,14,SLANT_GH);
WriteMod(127-103,14,SLANT_T);
WriteMod(127-15,9,SLANT_I);
break;
case 14:
WriteMod(127-42,9,SLANT_I);
WriteMod(127-92,14,SLANT_GH);
WriteMod(127-103,14,SLANT_T);
break;
case 15:
WriteMod(127-92,9,SLANT_IGH);
WriteMod(127-103,14,SLANT_T);
VFD_Scan_Count = VFD_Scan_Count*5;
break;
case 16:
WriteMod(127-92,9,SLANT_IGH);
WriteMod(127-103,14,SLANT_T);
WriteMod(127-9,9,SLANT_L);
break;
case 17:
WriteMod(127-36,9,SLANT_L);
WriteMod(127-92,9,SLANT_IGH);
WriteMod(127-103,14,SLANT_T);
break;
case 18:
WriteMod(127-92,9,SLANT_LIGH);
WriteMod(127-103,14,SLANT_T);
VFD_Scan_Count = VFD_Scan_Count*2;
break;
case 19:
WriteMod(127-92,9,SLANT_LIGH);
WriteMod(127-103,14,SLANT_T);
WriteMod(127-2,14,SLANT_V);
break;
case 20:
WriteMod(127-21,14,SLANT_V);
WriteMod(127-92,9,SLANT_LIGH);
WriteMod(127-103,14,SLANT_T);
break;
case 21:
WriteMod(127-92,9,SLANT_VLIGH);
WriteMod(127-103,14,SLANT_T);
VFD_Scan_Count = VFD_Scan_Count*2;
break;
case 22:
WriteMod(127-14,9,SLANT_A);
WriteMod(127-92,9,SLANT_VLIGH);
WriteMod(127-103,14,SLANT_T);
break;
case 23:
WriteMod(127-41,9,SLANT_A);
WriteMod(127-92,9,SLANT_VLIGH);
WriteMod(127-103,14,SLANT_T);
VFD_Scan_Count = VFD_Scan_Count*16; //保持显示AVLIGHT的时间
break;
case 24:
WriteMod(127-82,12,APPEAR_D90_9);
VFD_Scan_Count = VFD_Scan_Count*100; //保持显示D90A的时间
break;
default:
VFD_Scan_Count = VFD_Scan_Count*100;
break;
}
return VFD_Scan_Count;
}
void CLEAR_VFD(void)
{
unsigned char *point;
point=*Display_Buffer;
do
{
*point=0;
}while(++point<(*Display_Buffer+512));
}
void ini_CLEAR_VFD(void)
{
unsigned char *point;
point=*Display_Memory;
do
{
*point=0;
}while(++point<(*Display_Memory+512));
}
void Initial_VFD(void)
{
unsigned char s;
SccrollX_PT = -16;
SccrollY_PT = -64;
VFD_Scan_Timer = 0;
VFD_Scan_Count = 0;
SETB_VFD_BKG;
SPCR=0;
CLR_VFD_SID;
for(s=0;s<64;s++)
{
asm("nop");
CLR_VFD_CLKG;
CLR_VFD_CLKD;
asm("nop");
SETB_VFD_CLKG;
SETB_VFD_CLKD;
}
VFD_Display_Mode = Initial_DisMode;
//SETB_VFD_CLKG;
//SETB_VFD_CLKD;
//CLR_VFD_LATCH;
//SETB_VFD_BKD;
ini_CLEAR_VFD();
CLEAR_VFD();
}
/*
void Lighten_VFD()
{
unsigned char DISPLAYSTEP,BYTESTEP;
unsigned char SPICache;
unsigned char *DISPLAYPOINT;
ETIMSK = 0x00; //extended timer interrupt sources
SPICache = Display_Buffer[0][0];
DISPLAYPOINT = Display_Buffer[0];
for(DISPLAYSTEP=0;DISPLAYSTEP<64;DISPLAYSTEP++)
{
CLR_BIT(SPCR,6);
if(DISPLAYSTEP==0 || DISPLAYSTEP==1)
{
SETB_VFD_SID;
}
else
{
CLR_VFD_SID;
}
SETB_VFD_BKG;
NOP();
SETB_VFD_LATCH;
CLR_VFD_CLKG;
NOP();
SETB_VFD_CLKG;
CLR_VFD_LATCH;
CPL_VFD_BKD;
Delay_Xus(20);
CLR_VFD_BKG;
CLR_VFD_SID;
SET_BIT(SPCR,6);
for(BYTESTEP=0;BYTESTEP<8;BYTESTEP++)
{
SPDR = SPICache;
DISPLAYPOINT++;
SPICache = *DISPLAYPOINT;
while(!TEST_BIT(SPSR,7));
}
}
SETB_VFD_BKG;
ETIMSK = 0x04; //extended timer interrupt sources
}
*/
void Temperature_Detect(void)
{
//Temperature_Value;
ADCSRA=0x83;
ADMUX=64+32+AD_TEMP;
SET_BIT(ADCSRA,1);
ADC_ON;
while(TEST_BIT(ADCSRA,6));
Temperature_Value=ADCH;
}
void inline DisplayBuffer_Write(unsigned char *place,unsigned char y,unsigned char mode)
{
switch(mode)
{
case 0:
*place^=y;//取反
break;
case 1:
*place|=y;//置位
break;
case 2:
*place&=~y;//清零
break;
default:
break;
}
}
struct
{
unsigned char frqField[7];
unsigned char latest;
unsigned char timeField;
}FreqData;
union Word2Byte
{
unsigned int word;
signed int sword;
unsigned char byte[2];
signed char sbyte[2];
};
void Refresh_FreqData(unsigned char mode/*,void (*display)(void)*/)
{
static unsigned char step=0,fustep,fdstep,limite=255,lstcond;
unsigned char tmp;
union Word2Byte itmp;
unsigned int total;
#define limit 220
if(mode&FreqSenseMode_CleanVFD)
{
CLEAR_VFD();
}
if(mode&FreqSenseMode_ForceInitial)
{
CLEAR_VFD();
step=0;
}
if(mode&FreqSenseMode_SenseUp)
{
itmp.byte[0]=OCR1AL;
itmp.byte[1]=OCR1AH;
if(itmp.word!=1)itmp.word--;
OCR1AL=itmp.byte[0];
OCR1AH=itmp.byte[1];
}
if(mode&FreqSenseMode_SenseDown)
{
itmp.byte[0]=OCR1AL;
itmp.byte[1]=OCR1AH;
if(itmp.word!=0x018f)itmp.word++;
OCR1AL=itmp.byte[0];
OCR1AH=itmp.byte[1];
}
tmp=PORT_AD_SEL;
switch(step&15)
{
case 0:
DDR_ADC=DDR_ADC & ~(1<<AD_FRQ | 1<<AD_TIME);
DDR_AD_SEL=DDR_AD_SEL | (1<<AD_SEL_A | 1<<AD_SEL_B | 1<<AD_SEL_C);
tmp&=~(1<<AD_SEL_A | 1<<AD_SEL_B | 1<<AD_SEL_C);
SET_BIT(DDRB,5);
ChangeSpectDisp();
ADMUX=64+32;
ADCSRA=0x83;
ADCSRB=0;
TIMSK=TIMSK & (~0x3c);
ETIMSK=ETIMSK & (~1);
TCCR1A=0xc2;
TCCR1C=0;
ICR1=250;
OCR1A=120;
TCNT1H=0;
TCNT1L=0;
TCCR1B=0x19;
FreqData.frqField[0]=0;
FreqData.frqField[1]=0;
FreqData.frqField[2]=0;
FreqData.frqField[3]=0;
FreqData.frqField[4]=0;
FreqData.frqField[5]=0;
FreqData.frqField[6]=0;
break;
case 1:
tmp &= ~(1<<AD_SEL_A | 1<<AD_SEL_B);
tmp |= 1<<AD_SEL_C;
break;
case 2:
tmp &= ~(1<<AD_SEL_A | 1<<AD_SEL_C);
tmp |= 1<<AD_SEL_B;
break;
case 3:
tmp &= ~(1<<AD_SEL_A);
tmp |= (1<<AD_SEL_C | 1<<AD_SEL_B);
break;
case 4:
tmp &= ~(1<<AD_SEL_C | 1<<AD_SEL_B);
tmp |= 1<<AD_SEL_A;
break;
case 5:
tmp &= ~(1<<AD_SEL_B);
tmp |= (1<<AD_SEL_C | 1<<AD_SEL_A);
break;
case 6:
tmp &= ~(1<<AD_SEL_C);
tmp |= (1<<AD_SEL_B | 1<<AD_SEL_A);
break;
case 7:
tmp=tmp | (1<<AD_SEL_A | 1<<AD_SEL_B | 1<<AD_SEL_C);
break;
case 8:
SET_BIT(ADCSRA,1);
tmp=tmp & ~(1<<AD_SEL_A | 1<<AD_SEL_B | 1<<AD_SEL_C);
step=16;
break;
}
PORT_AD_SEL=tmp;
ADMUX=64+32+AD_TIME;
ADCSRA=0x83;
ADC_ON;
Delay_Xus(40);
while(TEST_BIT(ADCSRA,6));
FreqData.timeField=ADCH;
if((step-1)&16)
{
ADMUX=64+32+AD_FRQ;
ADC_ON;
//Delay_Xus(40);
tmp=(step&15)-1;
FreqData.latest=tmp;
while(TEST_BIT(ADCSRA,6));
FreqData.frqField[tmp]=ADCH;
}
if(step==0x17)
{
if(Current_Spect!=TimeDisp)
{
total=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -