📄 video_flap.c
字号:
if(error_done==0)
{error_done=0xff;}
else
{error_done=0x0;}
}
}
}
void waitius2(void)
{
unsigned i;
i=SPSR;
i=SPSR;
i=SPSR;
i=SPSR;
i=SPSR;
i=SPSR;
}
/*
void waitius2(void)
{
unsigned char i;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}*/
SIGNAL(SIG_INTERRUPT1)
{
linect = 0;
char_line=0;
if(com_flag==0x3)
com_flag=0;
disply_1++;
timer_ct0++;
timer_ct1++;
}
SIGNAL(SIG_OVERFLOW1)
{
TCNT1H=0XDF;
TCNT1L=0X00;
timer1++;
}
SIGNAL(SIG_USART_RECV)
{
unsigned char temp;
temp=UDR0;
if(com_flag==0x2)
{
comm_rdata[lens_comp++]=temp;
timer1=0x0;
if(lens_comp==(comm_rdata[1]))
{//
order_done();
com_flag=0x3;
}
}
else
{
if(com_flag==0x1)
{
timer1=0x0;
comm_rdata[0]=0x5a;
comm_rdata[1]=temp;
lens_com=temp;
lens_comp=2;
com_flag=0x2;
}
else
{
if(temp==0x5a)
{com_flag=0x1;
timer1=0x0;
}
}
}
}
SIGNAL(SIG_USART_TRANS)
{
unsigned char temp;
temp=UCSR0A;
}
void init_cpu(void)
{
/* PORT D - unused right now */
PORTD = 0xFF; /* Initial state is both LEDs off */
DDRD = 0xf2; /* Data direction register for port D */
PORTB = 0xff;
DDRB = 0xFF; /* Initial state is both LEDs off */
// uart initial
UBRR0H=00;
UBRR0L=0xbf;
UCSR0C=0X86;
UCSR0B=0XD8;
UCSR0A=0X02;
MCUCR = 0; /* Select AIN1 as neg. input */
// ACSR = (1<<ACBG) | (1<<ACIE); /* Select Bandgap for pos. input */
CLKPR = 0x80; /* Timer0 clock prescale of 8 */
CLKPR = 0x00;
TCCR0A = 0x00;//定时器0不分频,
TCCR0B = 0x01;
TCNT0 = 135;
// TIFR0 |= 1<<TOV0; /* Clear any potential interrupt */
// TIMSK0 |= 1<<TOIE0;
TIMSK0 &= ~(1<<TOIE0);
TCCR1A=0x00;//定时器1八分频
TCCR1B=0x02;
TCNT1H=0X00;
TCNT1L=0XFF;
// TIFR1 |= 1<<TOV1; /* Clear any potential interrupt */
// TIMSK1 |= 1<<TOIE1;
// TIMSK1 &= ~(1<<TOIE1);
ADMUX=0x00;
DIDR0=0x03;
DIDR1=0x00;
ADCSRA=0x07;
ADCSRB=0x00;
ADCSRA=ADCSRA|(1<<(ADEN));
SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA);
SPSR = 1;
// TIMSK0 = 1<<TOIE0;
EICRA = (1<<ISC01) + (1<<ISC11); /* Set interrupt on falling edge */
EIMSK = (1<<INT0) + (1<<INT1); /* Enable interrupt for interrupt0 */
/* Enable the watchdog timer */
cli();
WatchdogReset();
WDTCSR = (1<<WDCE) | (1<<WDE); /* Wake-up the watchdog register*/
WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
WatchdogReset();
// TIMSK1 &= ~(1<<TOIE1);
// initial_eprom();
}
void send_char(char *s,char lendgth)
{
char temp2;
cli();
for(temp2=0;temp2<lendgth;temp2++)
{
while( !( UCSR0A & (1<<UDRE0)));
UDR0=*s++;
}
sei();
}
void rsp_com(unsigned char btye)
{
unsigned char i,t;
rsp_data[0]=0x5a;
rsp_data[1]=comm_rdata[3];
t=comm_rdata[7]+4;
for(i=0;i<t;i++)
{rsp_data[i+2]=comm_rdata[i+4];
}
t=t+2;
rsp_data[i+2]=btye;
send_char(disp_buff,30);
}
void del_ms(int ii)
{unsigned int temp;
for(temp=0;temp<ii;temp++)
{}
}
void waitius(void)
{
unsigned i;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
void add_operations(void)
{
unsigned char ii=0,row_count=0;
unsigned char collum_count=0;
//unsigned long temp;
unsigned long temp1;
cli();
ADCSRA=ADCSRA&0x7f;
ADMUX=0x00;
ADCSRA=ADCSRA|((1<<ADEN)|(1<<ADSC));
while(!(ADCSRA&(1<<ADIF)));
add_rdata[0]=ADCL;
add_rdata[1]=ADCH;
ADCSRA=ADCSRA|1<<ADIF;
ADCSRA=ADCSRA&0x7f;
ADMUX=0x01;
ADCSRA=ADCSRA|((1<<ADEN)|(1<<ADSC));
while(!(ADCSRA&(1<<ADIF)));
add_rdata[4]=ADCL;
add_rdata[5]=ADCH;
ADCSRA=ADCSRA|1<<ADIF;
ADCSRA=ADCSRA&0x7f;
sei();
temp1=add_rdata[1]*256+add_rdata[0];
/* if(temp1>0x200)
{errorflash=1;}
else
{errorflash=0;}*/
temp1=((temp1*500)/1024)*3.0+Adjust_voltage;
add_rdata[0]=temp1/1000;
add_rdata[1]=(temp1%1000)/100;
add_rdata[2]=(temp1%100)/10;
add_rdata[3]=temp1%10;
temp1=add_rdata[5]*256+add_rdata[4];
if(temp1<Low_voltage)
{errorflash=1;
flash_dsp_data(0xff);
}
else
{errorflash=0;
error_done=0x0;
}
temp1=((temp1*500)/1024)*3.0+Adjust_voltage;
// temp1=add_rdata[5];
// temp1=((temp1*256+add_rdata[4])*500)/1024;
add_rdata[4]=temp1/1000;
add_rdata[5]=(temp1%1000)/100;
add_rdata[6]=(temp1%100)/10;
add_rdata[7]=temp1%10;
if(disp_buff[0]!=0xaa)
return;
collum_count=disp_buff[3];//起始列
temp1=collum_count;
for(ii=0;ii<(34-collum_count);ii++)
{
if(disp_buff[ii+4]>=0x4c)
{temp1++;}
if(disp_buff[ii+4]==0x40)
{
if(disp_buff[ii+5]==0x43)
{
collum_count=temp1+1;
for(row_count=0;row_count<16;row_count++)
{
WatchdogReset();
if(add_rdata[4]!=0)
{disp_tebmp[row_count][collum_count+0]=pgm_read_byte(&char_table [add_rdata[4]][row_count]);}
else
{disp_tebmp[row_count][collum_count+0]=0xff;}
disp_tebmp[row_count][collum_count+1]=pgm_read_byte(&char_table[add_rdata[5]][row_count]);
disp_tebmp[row_count][collum_count+3]=pgm_read_byte(&char_table[add_rdata[6]][row_count]);
disp_tebmp[row_count][collum_count+4]=pgm_read_byte(&char_table[add_rdata[7]][row_count]);
}
break;
}
}
temp1++;
}
}
void LED_0(void)
{
if(led_flag0==0)
{
PORTD =PORTD|(1<<PD0);
led_flag0=0xff;
}
else
{
PORTD = PORTD&0xef;
led_flag0=0x0;
}
}
void LED_1(void)
{
if(led_flag1==0)
{
PORTD =PORTD|(1<<PD0);
led_flag1=0xff;
}
else
{
PORTD = PORTD&0xfe;
led_flag1=0x0;
}
}
void LED_2(void)
{
if(led_flag2==0)
{
PORTD =PORTD|(1<<PD1);
led_flag2=0xff;
}
else
{
PORTD = PORTD&0xfd;
led_flag2=0x0;
}
}
void LED_3(void)
{
if(led_flag3==0)
{
PORTD =PORTD|(1<<PD2);
led_flag3=0xff;
}
else
{
PORTD = PORTD&0xfb;
led_flag3=0x0;
}
}
unsigned char SET_disp_nchar(void)
{
unsigned i;
if(comm_rdata[5]>13)
{return 0x00;}
if(comm_rdata[6]>=34)
{return 0x00;}
if(comm_rdata[7]>=34)
{return 0x00;}
counter=comm_rdata[7]+4;
disp_buff[0]=0xaa;
for(i=0;i<counter;i++)
{
disp_buff[i+1]=comm_rdata[i+4];
}
read1_dsp_data();
return 0xff;
}
void order_done(void)
{
unsigned char temp,i,leng_ord;
leng_ord=comm_rdata[1]-1;
temp=0;
for(i=0;i<leng_ord;i++)
{
temp=temp+comm_rdata[i];
}
if(temp!=comm_rdata[i])
return;
switch (comm_rdata[3])
{
case REST_PSW://复位
break;
case DATE_PSW://日期显示
break;
case TIME_PSW://时间显示
break;
case FIXED_PSW://固定字符显示
break;
case SET_ROW_PSW://设行显示模式
break;
case SET_DT_PSW://设置日期和时间
break;
case N_CHAR_PSW://显示N个字符
if(SET_disp_nchar()==0)
{
WatchdogReset();
rsp_com(0xbb);
}
else
{ WatchdogReset();
rsp_com(0xaa);
}
break;
case ALL_LAP_PSW://全屏叠加起始位置读取
break;
case RD_ALL_LAP_PSW ://全屏纵向放大设置
break;
case ROOM_V_PSW://全屏纵向放大状态读取
break;
case RD_ROOM_V_PSW:
break;
case RV_DEVICE_PSW://显示设备地址
break;
case DAT_STATIC_PSW://ID码读取命令
break;
case RD_DAT_STATIC_PSW://日期静态设置
break;
case TIM_STATIC_PSW://读日期静态设置参数
break;
case RD_TIM_STATIC_PSW://时间静态设置
break;
case SET_FIX_PSW://读时间静态设置参数
break;
case RD_SET_FIX_PSW://固定显示字符静态设置
break;
default:
break;
}
}
void test_com(void)
{
unsigned char temp;
temp=tst_rdata[it++];
if(com_flag==0x2)
{
comm_rdata[lens_comp++]=temp;
if(lens_comp==(comm_rdata[1]+1))
{com_flag=0x3;}
}
else
{
if(com_flag==0x1)
{
comm_rdata[0]=0x5a;
comm_rdata[1]=temp;
lens_com=temp;
lens_comp=2;
com_flag=0x2;
}
else
{
if(temp==0x5a)
{com_flag=0x1;}
}
}
}
void ufix_dsp_data(void)
{
unsigned char ii=0,row_count=0,tt;
unsigned char collum_count=0;
if(disp_buff[0]!=0xaa)
return;
collum_count=disp_buff[3];//起始列
tt=collum_count;
for(ii=0;ii<(34-collum_count);ii++)
{
if(disp_buff[ii+4]>=0x4c)
{tt++;}
if(disp_buff[ii+4]==0x40)
{
if(disp_buff[ii+5]==0x43)
{
collum_count=tt+1;
for(row_count=0;row_count<16;row_count++)
{
WatchdogReset();
if(add_rdata[4]!=0)
{disp_tebmp[row_count][collum_count+0]=pgm_read_byte(&char_table [add_rdata[4]][row_count]);}
else
{disp_tebmp[row_count][collum_count+0]=0xff;}
disp_tebmp[row_count][collum_count+1]=pgm_read_byte(&char_table[add_rdata[5]][row_count]);
disp_tebmp[row_count][collum_count+3]=pgm_read_byte(&char_table[add_rdata[6]][row_count]);
disp_tebmp[row_count][collum_count+4]=pgm_read_byte(&char_table[add_rdata[7]][row_count]);
}
break;
}
}
tt++;
}
}
void flash_dsp_data(unsigned char j_byte)
{
unsigned char ii=0,row_count=0,tt;
unsigned char collum_count=0;
collum_count=disp_buff[3];//起始列
if(j_byte!=0)
{tt=0x68;}
else
{tt=0x69;}
tt=(tt-76)*2+76;
for(row_count=0;row_count<16;row_count++)
{
WatchdogReset();
disp_tebmp[row_count][collum_count+0]=pgm_read_byte(&char_table[tt][row_count*2]);
disp_tebmp[row_count][collum_count+1]=pgm_read_byte(&char_table[tt][row_count*2+1]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -