📄 video_ctrler.c
字号:
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/signal.h>
#include <avr/eeprom.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "StdDefines.h"
#include "order_md.h"
#include "char_table.h"
#include "Main.h"
#define WatchdogReset() asm("wdr") /* Macro substitution to kick the dog */
#define Wait() while(!(SPSR & (1<<SPIF)))
void clr_dsp_map(void);
void delay1(unsigned char i);
void test2(unsigned char i);
/* Static functions and variables */
void displaylarge(void);
void read1_dsp_data(void);
unsigned char linect; /* State of Delay function */
unsigned char print_line; /* State of Delay function */
unsigned char maindelay,disply_1=0; /* State of mainDelay function */
short ltemp,it; /* State of Delay function */
short ntemp; /* State of Delay function */
unsigned char timer_ct0=0,timer_ct1=0,flag_sign=0,errorflash=0,error_done=0;
extern
/*$FUNCTION$*******************************************************************/
void test_time0(void);
void read1_dsp_data(void)
{
unsigned char ii=0,ttemp=0,code_count=0,char_code=0,row_count=0;
unsigned char collum_count=0;
if(disp_buff[0]!=0xaa)
return;
clr_dsp_map();
collum_count=disp_buff[3];//起始列
ttemp=34-disp_buff[3];//剩余列
code_count=disp_buff[4];//显示字符个数
if(ttemp<code_count)
{code_count=ttemp;}//应该显示的字符个数
for(row_count=0;row_count<16;row_count++)
{WatchdogReset();
ii=0;
for(ttemp=0;ttemp<code_count;ttemp++)
{
char_code=disp_buff[ttemp+5];//
if(char_code>75)
{
char_code=(char_code-76)*2+76;
disp_tebmp[row_count][collum_count+(ii++)]=pgm_read_byte(&char_table[char_code][row_count*2]);
disp_tebmp[row_count][collum_count+(ii++)]=pgm_read_byte(&char_table[char_code][row_count*2+1]);
}
else
{
disp_tebmp[row_count][collum_count+(ii++)]=pgm_read_byte(&char_table[char_code][row_count]);
}
if(ii>=34)
break;
}
}
}
void clr_dsp_map(void)
{unsigned char i,j;
for(i=0;i<16;i++)
{
for(j=0;j<35;j++)
{disp_tebmp[i][j]=0xff;}
}
}
extern int main(void)
{
unsigned char temp1;
init_cpu();
led_flag0=0;
led_flag1=0;
led_flag2=0;
led_flag3=0;
read1_dsp_data();
WatchdogReset();
set_sleep_mode(SLEEP_MODE_IDLE);
sei();
do
{
sleep_mode();
WatchdogReset();
}while(1);
return(1);
} /* main */
void initial_eprom(void)
{
unsigned int i;
unsigned char judge[3],temp;
for(i=0;i<3;i++)
{
eeprom_busy_wait();
judge[i] = eeprom_read_byte(&etable_oritial[i]); /* 读 */
eeprom_busy_wait();
}
temp=0;
for(i=0;i<3;i++)
{
if(judge[i]==0xaa)
temp=0xaa;
else
{
temp=0xbb;
break;
}
}
eprom_buf=etable_char;
if(temp==0xbb)
{
for(i=0;i<364;i++)
{
eeprom_busy_wait();
eeprom_write_byte(eprom_buf++, 0x00);
}
for(i=0;i<3;i++)
{eeprom_busy_wait();
eeprom_write_byte(&judge[i], 0xaa);
}
}
eprom_buf=etable_char;
bufftemp=disp_buff;
for(i=0;i<364;i++)
{
eeprom_busy_wait();
*bufftemp = eeprom_read_byte(eprom_buf++);
}
eeprom_busy_wait();
}
void displaylarge(void)
{
unsigned char temp=0,line=0;
if((char_line!=0)&((disp_buff[1])==(char_line-1)))
{
line=linect-line_buff;
SPDR=disp_tebmp[line][0];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][1];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][1];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][2];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][3];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][4];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][5];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][6];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][7];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][8];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][9];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][10];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][11];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][12];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][13];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][14];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][15];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][16];
waitius2();
SPDR=0xff;
waitius2();
SPDR=disp_tebmp[line][17];
waitius2();
SPDR=0xff;
waitius2();
SPDR=0xff;
}
}
void display(void)
{
unsigned char temp=0,line=0;
if((char_line!=0)&&((disp_buff[2])==(char_line-1))&&(error_done==0))
{
line=linect-line_buff;
SPDR=disp_tebmp[line][0];
waitius2();
SPDR=disp_tebmp[line][1];
waitius2();
SPDR=disp_tebmp[line][2];
waitius2();
SPDR=disp_tebmp[line][3];
waitius2();
SPDR=disp_tebmp[line][4];
waitius2();
SPDR=disp_tebmp[line][5];
waitius2();
SPDR=disp_tebmp[line][6];
waitius2();
SPDR=disp_tebmp[line][7];
waitius2();
SPDR=disp_tebmp[line][8];
waitius2();
SPDR=disp_tebmp[line][9];
waitius2();
SPDR=disp_tebmp[line][10];
waitius2();
SPDR=disp_tebmp[line][11];
waitius2();
SPDR=disp_tebmp[line][12];
waitius2();
SPDR=disp_tebmp[line][13];
waitius2();
SPDR=disp_tebmp[line][14];
waitius2();
SPDR=disp_tebmp[line][15];
waitius2();
SPDR=disp_tebmp[line][16];
waitius2();
SPDR=disp_tebmp[line][17];
waitius2();
SPDR=disp_tebmp[line][18];
waitius2();
SPDR=disp_tebmp[line][19];
waitius2();
SPDR=disp_tebmp[line][20];
waitius2();
SPDR=disp_tebmp[line][21];
waitius2();
SPDR=disp_tebmp[line][22];
waitius2();
SPDR=disp_tebmp[line][23];
waitius2();
SPDR=disp_tebmp[line][24];
waitius2();
SPDR=disp_tebmp[line][25];
waitius2();
SPDR=disp_tebmp[line][26];
waitius2();
SPDR=disp_tebmp[line][27];
waitius2();
SPDR=disp_tebmp[line][28];
waitius2();
SPDR=disp_tebmp[line][29];
waitius2();
SPDR=disp_tebmp[line][30];
waitius2();
SPDR=disp_tebmp[line][31];
waitius2();
SPDR=disp_tebmp[line][32];
waitius2();
SPDR=disp_tebmp[line][33];
waitius2();
SPDR=0xff;
waitius2();
}
else if(char_line==(disp_buff[2]+2))
{
if(disply_1>30)
{
disply_1=0;
if(disp_buff[0]==0xaa)
{
if(ad_op_begin!=0x01)
{
ad_op_begin=0x01;
add_operations();
ad_op_begin=0x00;
}
}
}
}
else
{
line=linect;
if(disply_1>1)
{if(line<0xf)
{
if(line>0x0b)
{delay1(10);
temp=videobuff;
test2(temp);}
}
if(line==35)
send_int_tocom();
}
}
}
SIGNAL(SIG_OVERFLOW0)
{
TCNT0 = 185;
TIMSK0 &= ~(1<<TOIE0); /* Disable the timer0 interrupt */
}
SIGNAL(SIG_INTERRUPT0)
{
unsigned char i,j,line;
sei();
linect++;
line=linect;
char_line=0;
if((line > 34) && (line <= 50))
{char_line=0x01;
asm volatile (
"nop\n\t"
);}
else if((line > 50) && (line <= 66))
{char_line=0x02;
asm volatile (
"nop\n\t"
"nop\n\t"
);}
else if((line > 66) && (line <= 82))
{char_line=0x03;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
);}
else if((line > 82) && (line <= 98))
{char_line=0x04;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);}
else if((line >98) && (line <= 114))////????????????
{char_line=0x05;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
);}
else if((line >114) && (line <= 130))
{char_line=0x06;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);}
else if((line >130) && (line <=146))//???????????/
{char_line=0x07;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
else if((line >146) && (line <=162))//恢复
{char_line=0x08;
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"
"nop\n\t"
"nop\n\t"
);
}
else if((line >162) && (line <=178))//////12++++++++++++++
{char_line=0x09;
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"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
else if((line >178) && (line <= 194))///???????
{char_line=0x0a;
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"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
else if((line >194) && (line <= 210))
{char_line=0x0b;
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"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
else if((line >210) && (line <= 226))
{char_line=0x0c;
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"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
else if((line >226) && (line <= 242))
{char_line=0x0d;
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"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);
}
else if(line >242)
{
linect=243;
// char_line=0x0;
char_line=0x0e;
line=line-1;
}
line_buff=(char_line-1)*16+35;
j=15-char_line;
if(char_line!=0)
{
for(i=0;i<j;i++)
{
}
}
if(com_flag==0)
{
display();
}
if((timer_ct0>25)&&(errorflash==0))
{
timer_ct0=0;
if(flag_sign==0)
{flag_sign=0xff;}
else
{flag_sign=0x0;}
flash_dsp_data(flag_sign);
}
if(timer_ct1>40)
{ timer_ct1=0;
if(errorflash!=0)
{
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)
{
sei();
linect = 0;
char_line=0;
disply_1++;
if(com_flag==0x3)
com_flag=0;
timer_ct0++;
timer_ct1++;
led_fflash++;
if(led_fflash>0x20)
{
led_fflash=0;
LED_0();}
}
SIGNAL(SIG_OVERFLOW1)
{
TCNT1H=0XDF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -