📄 function.c
字号:
/*#define C全 0x00
#define C数 0x01
#define C字 0x02
#define C电 0x03
#define C力 0x04
#define C载 0x05
#define C波 0x06
#define C机 0x07
#define C发 0x08
#define C送 0x09
#define C接 0x0a
#define C收 0x0b
#define C频 0x0c
#define C率 0x0d
*/
/*const Byte hzstr[]={
0x80, 0x80, 0x40, 0x20, 0x50, 0x48, 0x44, 0xC3, 0x44, 0x48, 0x50, 0x20, 0x40, 0xC0, 0x40, 0x00, 0x00, 0x40, 0x40, 0x40, 0x44, 0x44, 0x44, 0x7F, 0x44, 0x44, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00,
0x10, 0x92, 0x54, 0x30, 0xFF, 0x50, 0x94, 0x32, 0xD8, 0x17, 0x10, 0x10, 0xF0, 0x18, 0x10, 0x00, 0x02, 0x82, 0x4E, 0x33, 0x22, 0x52, 0x8E, 0x40, 0x23, 0x14, 0x08, 0x16, 0x61, 0xC0, 0x40, 0x00,
0x00, 0x10, 0x0C, 0x24, 0x24, 0x24, 0x25, 0x26, 0xA4, 0x74, 0x24, 0x04, 0x14, 0x0C, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x7F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x00,
0x00, 0xF0, 0x90, 0x90, 0x90, 0x90, 0xFF, 0x90, 0x90, 0x90, 0x90, 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x04, 0x04, 0x04, 0x04, 0x7F, 0x84, 0x84, 0x84, 0x84, 0x8F, 0x80, 0xF0, 0x00, 0x00,
0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF8, 0x10, 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x10, 0x0C, 0x03, 0x00, 0x20, 0x40, 0x80, 0x40, 0x3F, 0x00, 0x00, 0x00,
0xA0, 0xA4, 0xA4, 0xE4, 0xBF, 0xA4, 0xA4, 0xA4, 0x20, 0xFF, 0x20, 0x22, 0x2C, 0x20, 0x20, 0x00, 0x20, 0x24, 0x27, 0x24, 0xFE, 0x14, 0x94, 0x50, 0x20, 0x13, 0x1C, 0x24, 0x43, 0x80, 0xE0, 0x00,
0x20, 0x42, 0xC4, 0x0C, 0x80, 0xF8, 0x88, 0x88, 0x88, 0xFF, 0x88, 0x88, 0xA8, 0x1C, 0x08, 0x00, 0x00, 0x04, 0xFC, 0x43, 0x30, 0x8F, 0x80, 0x43, 0x2C, 0x10, 0x28, 0x26, 0x41, 0xC0, 0x40, 0x00,
0x10, 0x10, 0xD0, 0xFF, 0x90, 0x10, 0x00, 0xFC, 0x04, 0x04, 0x04, 0xFE, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0xFF, 0x80, 0x41, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x70, 0x00,
0x00, 0x00, 0x18, 0x16, 0x10, 0x90, 0xF0, 0x9F, 0x90, 0x90, 0x92, 0x94, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x10, 0x88, 0x86, 0x41, 0x46, 0x28, 0x10, 0x18, 0x26, 0x41, 0xC0, 0x40, 0x40, 0x00,
0x40, 0x42, 0x44, 0xCC, 0x00, 0x88, 0x89, 0x8A, 0x8C, 0xF8, 0x8C, 0x8A, 0x89, 0xC8, 0x80, 0x00, 0x00, 0x40, 0x20, 0x1F, 0x20, 0x40, 0xA0, 0x90, 0x8C, 0x83, 0x88, 0x90, 0xB0, 0x80, 0x80, 0x00,
0x10, 0x10, 0x10, 0xFF, 0x90, 0x54, 0x44, 0x54, 0xE5, 0x46, 0x64, 0x54, 0x46, 0x44, 0x00, 0x00, 0x02, 0x42, 0x81, 0x7F, 0x02, 0x02, 0x82, 0x8A, 0x57, 0x22, 0x32, 0x4E, 0xC2, 0x03, 0x02, 0x00,
0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x80, 0x60, 0xDF, 0x10, 0x10, 0x10, 0xF0, 0x18, 0x10, 0x00, 0x00, 0x0F, 0x04, 0x02, 0xFF, 0x80, 0x80, 0x40, 0x21, 0x16, 0x08, 0x16, 0x61, 0xC0, 0x40, 0x00,
0x40, 0x7C, 0x40, 0xFF, 0x48, 0x48, 0x42, 0xF2, 0x12, 0x1A, 0xD6, 0x12, 0x12, 0xF3, 0x02, 0x00, 0x08, 0x87, 0x40, 0x27, 0x18, 0x06, 0x80, 0x8F, 0x40, 0x20, 0x1F, 0x20, 0x40, 0xCF, 0x00, 0x00,
0x00, 0x14, 0xA4, 0x44, 0x04, 0x24, 0xB5, 0x6E, 0x24, 0x94, 0x04, 0x44, 0xA6, 0x14, 0x00, 0x00, 0x08, 0x09, 0x08, 0x08, 0x09, 0x0B, 0x09, 0xFF, 0x09, 0x09, 0x0B, 0x08, 0x08, 0x0D, 0x08, 0x00};*/
// 0 #00H 1 #01H 2 #02H 3 #03H 4 #04H 5 #05H 6 #06H 7 #07H
// 8 #08H 9 #09H - #0AH : #0BH K #0CH H #0DH z #0EH / #0FH
// #10H
const Byte numstr[]={
0x00, 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x20, 0x10, 0x0F,
0x00, 0x20, 0x30, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x20, 0x00,
0x00, 0x30, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00, 0x00, 0x18, 0x20, 0x20, 0x21, 0x21, 0x1E, 0x00,
0x00, 0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00, 0x06, 0x05, 0x04, 0x04, 0x04, 0x3F, 0x04,
0x00, 0xF8, 0x48, 0x48, 0x48, 0x48, 0x88, 0x00, 0x00, 0x18, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00,
0x00, 0xE0, 0x10, 0x88, 0x88, 0x88, 0x30, 0x00, 0x00, 0x0F, 0x11, 0x20, 0x20, 0x20, 0x1F, 0x00,
0x00, 0x08, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0E, 0x01, 0x00, 0x00,
0x00, 0x60, 0x90, 0x08, 0x08, 0x08, 0x90, 0x60, 0x00, 0x0C, 0x12, 0x21, 0x21, 0x21, 0x12, 0x0C,
0x00, 0xF0, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x19, 0x22, 0x22, 0x22, 0x11, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x3F, 0x01, 0x00, 0x03, 0x04, 0x18, 0x20,
0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3F, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x00,
0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x18, 0x04, 0x00, 0x40, 0x30, 0x0C, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const Byte slen[]={48,32,16,36,6,24};
const Byte hlen[]={24,16,8,12,6,12};
const Word in[]={44,48,52,56,60,64,68,72,76,80,84,88,92,96};
void setscr(Byte wdat)
{
Byte i;
Byte dat;
Byte j;
for(i=0;i<8;i++)
{
dat=0xb8+i;
write_scr(0,0,dat);
write_scr(1,0,dat);
write_scr(0,0,0x40);
write_scr(1,0,0x40);
for(j=0;j<64;j++)
{
write_scr(0,1,wdat);
write_scr(1,1,wdat);
}
}
write_scr(0,0,0xc0);
write_scr(1,0,0xc0);
_delay_ms(1);
}
void write_scr(Byte lr,Byte cd,Byte dat)
{
if(lr==0)
{
Set_CSA();// CSA=1;
Clr_CSB();// CSB=0;
}
else
{
Set_CSB();// CSB=1;
Clr_CSA();// CSA=0;
}
if(cd==0)
{
Clr_DI();
}
else
{
Set_DI();
}
Clr_ENABLE();
Clr_RW();
PORTD=dat;
PORTD=dat;
Set_ENABLE();
Set_ENABLE();
Clr_ENABLE();
Clr_ENABLE();
Set_RW();
Set_DI();
if(lr==0)
{
Clr_CSA();
}
else
Clr_CSB();
}
void initscr()
{
write_scr(0,0,0x3f); //3F-开显示,3E-关显示
write_scr(1,0,0x3f);
write_scr(0,0,0xc0); //设起始行为0
write_scr(1,0,0xc0);
setscr(0x00);
}
// type 0-2424点阵字符 1-1616点阵字符 2-816点阵数字 3-1224点阵数字 4-68点阵数字 5-1216点阵数字
// page 行号
// colume 列号
// ch
const Byte hzstr[]={
0x80, 0x80, 0x40, 0x20, 0x50, 0x48, 0x44, 0xC3, 0x44, 0x48, 0x50, 0x20, 0x40, 0xC0, 0x40, 0x00, 0x00, 0x40, 0x40, 0x40, 0x44, 0x44, 0x44, 0x7F, 0x44, 0x44, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00,
0x10, 0x92, 0x54, 0x30, 0xFF, 0x50, 0x94, 0x32, 0xD8, 0x17, 0x10, 0x10, 0xF0, 0x18, 0x10, 0x00, 0x02, 0x82, 0x4E, 0x33, 0x22, 0x52, 0x8E, 0x40, 0x23, 0x14, 0x08, 0x16, 0x61, 0xC0, 0x40, 0x00,
0x00, 0x10, 0x0C, 0x24, 0x24, 0x24, 0x25, 0x26, 0xA4, 0x74, 0x24, 0x04, 0x14, 0x0C, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x7F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x00,
0x00, 0xF0, 0x90, 0x90, 0x90, 0x90, 0xFF, 0x90, 0x90, 0x90, 0x90, 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x04, 0x04, 0x04, 0x04, 0x7F, 0x84, 0x84, 0x84, 0x84, 0x8F, 0x80, 0xF0, 0x00, 0x00,
0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF8, 0x10, 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x10, 0x0C, 0x03, 0x00, 0x20, 0x40, 0x80, 0x40, 0x3F, 0x00, 0x00, 0x00,
0xA0, 0xA4, 0xA4, 0xE4, 0xBF, 0xA4, 0xA4, 0xA4, 0x20, 0xFF, 0x20, 0x22, 0x2C, 0x20, 0x20, 0x00, 0x20, 0x24, 0x27, 0x24, 0xFE, 0x14, 0x94, 0x50, 0x20, 0x13, 0x1C, 0x24, 0x43, 0x80, 0xE0, 0x00,
0x20, 0x42, 0xC4, 0x0C, 0x80, 0xF8, 0x88, 0x88, 0x88, 0xFF, 0x88, 0x88, 0xA8, 0x1C, 0x08, 0x00, 0x00, 0x04, 0xFC, 0x43, 0x30, 0x8F, 0x80, 0x43, 0x2C, 0x10, 0x28, 0x26, 0x41, 0xC0, 0x40, 0x00,
0x10, 0x10, 0xD0, 0xFF, 0x90, 0x10, 0x00, 0xFC, 0x04, 0x04, 0x04, 0xFE, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0xFF, 0x80, 0x41, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x70, 0x00,
0x00, 0x00, 0x18, 0x16, 0x10, 0x90, 0xF0, 0x9F, 0x90, 0x90, 0x92, 0x94, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x10, 0x88, 0x86, 0x41, 0x46, 0x28, 0x10, 0x18, 0x26, 0x41, 0xC0, 0x40, 0x40, 0x00,
0x40, 0x42, 0x44, 0xCC, 0x00, 0x88, 0x89, 0x8A, 0x8C, 0xF8, 0x8C, 0x8A, 0x89, 0xC8, 0x80, 0x00, 0x00, 0x40, 0x20, 0x1F, 0x20, 0x40, 0xA0, 0x90, 0x8C, 0x83, 0x88, 0x90, 0xB0, 0x80, 0x80, 0x00,
0x10, 0x10, 0x10, 0xFF, 0x90, 0x54, 0x44, 0x54, 0xE5, 0x46, 0x64, 0x54, 0x46, 0x44, 0x00, 0x00, 0x02, 0x42, 0x81, 0x7F, 0x02, 0x02, 0x82, 0x8A, 0x57, 0x22, 0x32, 0x4E, 0xC2, 0x03, 0x02, 0x00,
0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x80, 0x60, 0xDF, 0x10, 0x10, 0x10, 0xF0, 0x18, 0x10, 0x00, 0x00, 0x0F, 0x04, 0x02, 0xFF, 0x80, 0x80, 0x40, 0x21, 0x16, 0x08, 0x16, 0x61, 0xC0, 0x40, 0x00,
0x40, 0x7C, 0x40, 0xFF, 0x48, 0x48, 0x42, 0xF2, 0x12, 0x1A, 0xD6, 0x12, 0x12, 0xF3, 0x02, 0x00, 0x08, 0x87, 0x40, 0x27, 0x18, 0x06, 0x80, 0x8F, 0x40, 0x20, 0x1F, 0x20, 0x40, 0xCF, 0x00, 0x00,
0x00, 0x14, 0xA4, 0x44, 0x04, 0x24, 0xB5, 0x6E, 0x24, 0x94, 0x04, 0x44, 0xA6, 0x14, 0x00, 0x00, 0x08, 0x09, 0x08, 0x08, 0x09, 0x0B, 0x09, 0xFF, 0x09, 0x09, 0x0B, 0x08, 0x08, 0x0D, 0x08, 0x00};
void showstr(Byte type,Byte page,Byte column,Byte ch)
{
Byte i,j,w;
for(i=0;i<slen[type];i++)
{
w=((column+i%hlen[type])&0x3f)+64;
j=((column+i%hlen[type])>>6);
write_scr(j,0,(page&0x7)+i/hlen[type]+0xb8);
write_scr(j,0,w);
switch(type)
{
case 1:
w=hzstr[ch*32+i];
break;
case 2:
w=numstr[ch*16+i];
break;
}
if((page&0xf8)>0)
w=~w;
write_scr(j,1,w);
}
}
void shownum(Byte row,Byte col,Byte len,Byte value)
{
if(len==3)
{
if(value/100==0)
showstr(2,row,col,0x10);
else
showstr(2,row,col,value/100);
showstr(2,row,col+8,(value/10)%10);
showstr(2,row,col+16,value%10);
}
else if(len==2)
{
showstr(2,row,col,value/10);
showstr(2,row,col+8,value%10);
}
else if(len==1)
showstr(2,row,col,value%10);
}
void show()
{
signed int cposi;
Byte i,j,k,w;
for(j=0;j<8;j++)
{
for(i=0;i<16;i++)
{
for(k=0;k<2;k++)
{
cposi=posi+j*16+i;
if(cposi<0)
continue;
if(cposi>127)
return;
cposi>>=6;
w=((posi+j*16+i)&0x3f)+64;
write_scr(cposi,0,k+0xb8);
write_scr(cposi,0,w);
w=hzstr[j*32+i+k*16];
write_scr(cposi,1,w);
}
}
}
}
/***********************************************************************/
void init()//初始化
{
DDRB =(1<<DDB2)|(1<<DDB1)|(1<<DDB0)|(1<<DDB3)|(1<<DDB4)|(1<<DDB5);
PORTB=(1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5);
DDRC =(1<<DDC0)|(1<<DDC3)|(1<<DDC4)|(1<<DDC5)|(1<<DDC6);
PORTC=(1<<PC1)|(1<<PC2);//(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6);
DDRD =0xff;
PORTD=0XFF;
sei();//置位全局中断
//TCNT2=156; //初始值
//TCCR2=0x01; //选择分频
//TIMSK=0x40; //允许T/C2中断 b7-OCIE2 b6-TOIE2 b5-TICIE1 b4-OCIE1A b3-OCIE1B b2-TOIE1 - b0-TOIE0
initscr();
}
void Initial_value()//初始值
{
flg=0;
fl=0;
a=3;
a1=44;
b=3;
b1=48;
c=6;
c1=48;
d=6;
d1=48;
}
void roll()//滚动显示
{
Word us;
for(posi=127;posi>-128;posi--)
{
if(fl)
{
switch(flg)
{
case 1: Static_state();//静态显示
break;
case 2: a=19;//反显1,在44处反显
Static_state();
break;
case 3: a=3;
b=19;
Static_state();//反显2
break;
case 4: b=3;
c=14;
Static_state();
break;
case 5: c=6;
d=14;
Static_state();//反显4,在52处反显
break;
case 6: d=6;
Static_state();
flg=0;
break;
//default ://break;
}
fl=0;
}
switch(flg)
{
case 2: Butt();
if(flg2==1)
{
a1=in[flg1];
Static_state();
if(flg1>=14)
{
flg1=0;
}
flg2=0;
}
break;
case 3: Butt();
if(flg2==1)
{
b1=in[flg1];
Static_state();
if(flg1>=14)
{
flg1=0;
}
flg2=0;
}
break;
case 4: flg1=0;
Butt();
if(flg2==1)
{
c1=in[flg1];
Static_state();
if(flg1>=14)
{
flg1=0;
}
flg2=0;
}
break;
case 5: Butt();
if(flg2==1)
{
d1=in[flg1];
Static_state();
if(flg1>=14)
{
flg1=0;
}
flg2=0;
}
break;
case 6:
break;
}
/*if(flg==2)
{
Butt();
a1=in[flg1];
Static_state();
if(flg1>=14)
{
flg1=0;
}
}*/
show();
_delay_ms(200);
_delay_ms(200);
if(posi>0)
us=posi*2;
else
us=-posi*2;
_delay_us(us);
_delay_us(us);
_delay_us(us);
if(posi==0)
{
_delay_ms(200);
_delay_ms(200);
_delay_ms(200);
_delay_ms(200);
_delay_ms(200);
}
Button();
}
}
void Static_state()//静态显示
{
showstr(1,3,0,8);
showstr(1,3,16,9);//发送
shownum(a,40,3,a1);
showstr(2,3,64,0x0a);
shownum(b,72,3,b1);//6处+8就在48处反显
showstr(2,3,96,0x0c);
showstr(2,3,104,0x0d);
showstr(2,3,112,0x0e);//44-48KHz
showstr(1,6,0,0x0a);
showstr(1,6,16,0x0b);//接收
shownum(c,48,2,c1);
shownum(d,80,2,d1);
showstr(2,6,64,0x0a);
showstr(2,6,96,0x0c);
showstr(2,6,104,0x0d);
showstr(2,6,112,0x0e);//48-52KHz*/
}
void value1()//反显1,在44处反显
{
shownum(3,40,3,44);
showstr(2,3,64,0x0a);
shownum(3,72,3,48);//6处+8就在48处反显
showstr(2,3,96,0x0c);
showstr(2,3,104,0x0d);
showstr(2,3,112,0x0e);//44-48KHz
}
void value2()//反显2,在48处反显
{
shownum(3,40,3,44);
showstr(2,3,64,0x0a);
shownum(3,72,3,48);//6处+8就在48处反显
showstr(2,3,96,0x0c);
showstr(2,3,104,0x0d);
showstr(2,3,112,0x0e);//44-48KHz
}
void value3()//反显3,在48处反显
{
shownum(6+8,48,2,48);
shownum(6,80,2,52);
showstr(2,6,64,0x0a);
showstr(2,6,96,0x0c);
showstr(2,6,104,0x0d);
showstr(2,6,112,0x0e);//48-52KHz*/
}
void value4()//反显4,在52处反显
{
shownum(6,48,2,48);
shownum(6+8,80,2,52);
showstr(2,6,64,0x0a);
showstr(2,6,96,0x0c);
showstr(2,6,104,0x0d);
showstr(2,6,112,0x0e);//48-52KHz*/
}
void Button()//检测有无按键
{
Byte i;
if((PINC&0x04)==0)
{
for(i=0;i<30;i++)
{
if(((PINC>>PINC2)&1)==1)//去抖动
{
return;
}
}
while(((PINC>>PINC2)&1)==0) //等待松开按键
;
flg++;
fl=1;
}
}
void Butt()//检测有无按键
{
Byte i;
if((PINC&0x02)==0)
{
for(i=0;i<30;i++)
{
if(((PINC>>PINC1)&1)==1)//去抖动
{
return;
}
}
while(((PINC>>PINC1)&1)==0) //等待松开按键
;
flg1++;
flg2=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -