📄 tpublic.c
字号:
asm ld value,[portid];
pVar->flash_dat[i]=value;
portid=portid+2;
rst_wdog();
}
}
void flashwrite_a(unsigned int addr)
{
register unsigned int portid;
register unsigned int value;
unsigned int adrbak;
unsigned int sum;
unsigned int ui;
int i;
flash_boot_reset();// reset flash, read array mode
portid=addr;
portid=portid-PSD_FLASH_BASE;
value=portid/8192;
portid=PSD_FLASH_BASE+value*8192;
adrbak=portid;
sum=0;
for(ui=0;ui<4095;ui++)
{
sum=sum+pVar->flash_dat[ui];
}
pVar->flash_dat[4095]=sum;
portid=addr;
flash_boot_erase_sector(portid);
portid=adrbak;
for(i=0;i<4096;i++)
{
rst_wdog();
flash_boot_write_with_poll(portid,pVar->flash_dat[i]);
portid=portid+2;
}
}
//--------------------------------------------------------------------------//
unsigned int atobit(register unsigned int os ,register unsigned int Bitnum)
{
register unsigned int temp;
asm
{
clr temp;
inc temp;
shl temp, Bitnum;
and os, temp;
}
return os;
}
void KeyScan(void)
{
register unsigned long portid;
register unsigned int newkey,chgkey,oldkey,keyfg;
portid=KEYDATA;
if(pVar->Lcd_BG_Count>=30000)
{
pVar->Lcd_BG_Flag=0;
pVar->Lcd_BG_Count=0;
}else pVar->Lcd_BG_Count++;
oldkey=pVar->OldKey;
chgkey=oldkey;
keyfg=pVar->KeyFg;
asm eldb newkey, [portid];
asm
{/* 478 =F1 */
bbc newkey, 4, keynext00;
orb newkey+1, #0x01;
};
goto keyend00;
keynext00: asm
{
bbc newkey, 7, keynext01;
orb newkey+1, #0x01;
}
goto keyend00;
keynext01: asm
{
orb newkey, #0x90;
andb newkey+1, #0xfe;
}
keyend00: asm
{/* 578 =F2 */
bbc newkey, 5, keynext02;
orb newkey+1, #0x02;
};
goto keyend01;
keynext02: asm
{
bbc newkey, 7, keynext03;
orb newkey+1, #0x02;
}
goto keyend01;
keynext03: asm
{
orb newkey, #0xA0;
andb newkey+1, #0xfd;
}
keyend01: asm
{/* 678 =RESET */
bbc newkey, 6, keynext04;
orb newkey+1, #0x04;
};
goto keyend02;
keynext04: asm
{
bbc newkey, 7, keynext05;
orb newkey+1, #0x04;
}
goto keyend02;
keynext05: asm
{
orb newkey, #0xC0;
andb newkey+1, #0xfb;
}
keyend02: asm xor chgkey, newkey;
/*--------------key00-----------------------------------*/
KEY00: asm
{
bbs keyfg, 0, YS00;
bbc chgkey, 0, KEY01;
}
GK00: keyfg=keyfg | 0x0001;
pVar->Keytm[0]=0;
goto KEY01;
YS00: pVar->Keytm[0]+=pVar->KeyTimeCount;
asm bbc chgkey, 0, DT00;
FG00: keyfg=keyfg & 0xFFFE;
goto KEY01;
DT00: if(pVar->Keytm[0]>=KEYSPEED)
{
oldkey=newkey & 0x01;
if(oldkey==0)
{
pVar->KeyValue=0;
Lcd_on();
pVar->KeyID=0;
}
keyfg=keyfg & 0xFFFE;
}
/*--------------key01-----------------------------------*/
KEY01: asm
{
bbs keyfg, 1, YS01;
bbc chgkey, 1, KEY02;
}
GK01: keyfg=keyfg | 0x0002;
pVar->Keytm[1]=0;
goto KEY02;
YS01: pVar->Keytm[1]+=pVar->KeyTimeCount;
asm bbc chgkey, 1, DT01;
FG01: keyfg=keyfg & 0xFFFD;
goto KEY02;
DT01: if(pVar->Keytm[1]>=KEYSPEED)
{
oldkey=newkey & 0x02;
if(oldkey==0)
{
pVar->KeyValue=1;
pVar->KeyID=1;
Lcd_on();
}
keyfg=keyfg & 0xFFFD;
}
/*--------------key02-----------------------------------*/
KEY02: asm
{
bbs keyfg, 2, YS02;
bbc chgkey, 2, KEY03;
}
GK02: keyfg=keyfg | 0x0004;
pVar->Keytm[2]=0;
goto KEY03;
YS02: pVar->Keytm[2]+=pVar->KeyTimeCount;
asm bbc chgkey, 2, DT02;
FG02: keyfg=keyfg & 0xFFFB;
goto KEY03;
DT02: if(pVar->Keytm[2]>=KEYSPEED)
{
oldkey=newkey & 0x04;
if(oldkey==0)
{
pVar->KeyValue=2;
pVar->KeyID=2;
Lcd_on();
}
keyfg=keyfg & 0xFFFB;
}
/*--------------key03-----------------------------------*/
KEY03: asm
{
bbs keyfg, 3, YS03;
bbc chgkey, 3, KEY04;
}
GK03: keyfg=keyfg | 0x0008;
pVar->Keytm[3]=0;
goto KEY04;
YS03: pVar->Keytm[3]+=pVar->KeyTimeCount;
asm bbc chgkey, 3, DT03;
FG03: keyfg=keyfg & 0xFFF7;
goto KEY04;
DT03: if(pVar->Keytm[3]>=KEYSPEED)
{
oldkey=newkey & 0x08;
if(oldkey==0)
{
pVar->KeyValue=3;
pVar->KeyID=3;
Lcd_on();
}
keyfg=keyfg & 0xFFF7;
}
/*--------------key04-----------------------------------*/
KEY04: asm
{
bbs keyfg, 4, YS04;
bbc chgkey, 4, KEY05;
}
GK04: keyfg=keyfg | 0x0010;
pVar->Keytm[4]=0;
goto KEY05;
YS04: pVar->Keytm[4]+=pVar->KeyTimeCount;
asm bbc chgkey, 4, DT04;
FG04: keyfg=keyfg & 0xFFEF;
goto KEY05;
DT04: if(pVar->Keytm[4]>=KEYSPEED)
{
oldkey=newkey & 0x10;
if(oldkey==0)
{
pVar->KeyValue=4;
pVar->KeyID=4;
Lcd_on();
}
keyfg=keyfg & 0xFFEF;
}
/*--------------key05-----------------------------------*/
KEY05: asm
{
bbs keyfg, 5, YS05;
bbc chgkey, 5, KEY06;
}
GK05: keyfg=keyfg | 0x0020;
pVar->Keytm[5]=0;
goto KEY06;
YS05: pVar->Keytm[5]+=pVar->KeyTimeCount;
asm bbc chgkey, 5, DT05;
FG05: keyfg=keyfg & 0xFFDF;
goto KEY06;
DT05: if(pVar->Keytm[5]>=KEYSPEED)
{
oldkey=newkey & 0x20;
if(oldkey==0)
{
pVar->KeyValue=5;
pVar->KeyID=5;
Lcd_on();
}
keyfg=keyfg & 0xFFDF;
}
/*--------------key06-----------------------------------*/
KEY06: asm
{
bbs keyfg, 6, YS06;
bbc chgkey, 6, KEY07;
}
GK06: keyfg=keyfg | 0x0040;
pVar->Keytm[6]=0;
goto KEY07;
YS06: pVar->Keytm[6]+=pVar->KeyTimeCount;
asm bbc chgkey, 6, DT06;
FG06: keyfg=keyfg & 0xFFBF;
goto KEY07;
DT06: if(pVar->Keytm[6]>=KEYSPEED)
{
oldkey=newkey & 0x40;
if(oldkey==0)
{
pVar->KeyValue=6;
pVar->KeyID=6;
Lcd_on();
}
keyfg=keyfg & 0xFFBF;
}
/*--------------key07-----------------------------------*/
KEY07: asm
{
bbs keyfg, 7, YS07;
bbc chgkey, 7, KEY08;
}
GK07: keyfg=keyfg | 0x0080;
pVar->Keytm[7]=0;
goto KEY08;
YS07: pVar->Keytm[7]+=pVar->KeyTimeCount;
asm bbc chgkey, 7, DT07;
FG07: keyfg=keyfg & 0xFF7F;
goto KEY08;
DT07: if(pVar->Keytm[7]>=KEYSPEED)
{
oldkey=newkey & 0x80;
if(oldkey==0)
{
pVar->KeyValue=7;
pVar->KeyID=7;
Lcd_on();
}
keyfg=keyfg & 0xFF7F;
}
/*--------------key08--------F1-------------------------*/
KEY08: asm
{
bbs keyfg+1, 0, YS08;
bbc chgkey+1, 0, KEY09;
}
GK08: keyfg=keyfg | 0x0100;
pVar->Keytm[8]=0;
goto KEY09;
YS08: pVar->Keytm[8]+=pVar->KeyTimeCount;
asm bbc chgkey+1, 0, DT08;
FG08: keyfg=keyfg & 0xFEFF;
goto KEY09;
DT08: if(pVar->Keytm[8]>=KEYSPEED)
{
oldkey=newkey & 0x0100;
if(oldkey==0)
{
pVar->KeyValue=8;
pVar->KeyID=8;
Lcd_on();
}
keyfg=keyfg & 0xFEFF;
}
/*--------------key09--------F2-------------------------*/
KEY09: asm
{
bbs keyfg+1, 1, YS09;
bbc chgkey+1, 1, KEY10;
}
GK09: keyfg=keyfg | 0x0200;
pVar->Keytm[9]=0;
goto KEY10;
YS09: pVar->Keytm[9]+=pVar->KeyTimeCount;
asm bbc chgkey+1, 1, DT09;
FG09: keyfg=keyfg & 0xFDFF;
goto KEY10;
DT09: if(pVar->Keytm[9]>=KEYSPEED)
{
oldkey=newkey & 0x0200;
if(oldkey==0)
{
pVar->KeyValue=9;
pVar->KeyID=9;
Lcd_on();
}
keyfg=keyfg & 0xFDFF;
}
/*--------------key10--------RESET----------------------*/
KEY10: asm
{
bbs keyfg+1, 2, YS10;
bbc chgkey+1, 2, KEY11;
}
GK10: keyfg=keyfg | 0x0400;
pVar->Keytm[10]=0;
goto KEY11;
YS10: pVar->Keytm[10]+=pVar->KeyTimeCount;
asm bbc chgkey+1, 2, DT10;
FG10: keyfg=keyfg & 0xFBFF;
goto KEY11;
DT10: if(pVar->Keytm[10]>=KEYSPEED)
{
oldkey=newkey & 0x0400;
if(oldkey==0)
{
pVar->KeyValue=10;
pVar-> KeyID=10;
Lcd_on();
}
keyfg=keyfg & 0xFBFF;
}
KEY11: pVar->OldKey=newkey;
pVar->KeyFg=keyfg;
pVar->KeyTimeCount=0;
}
void InitYx(void)
{
register unsigned int portioa;
register unsigned int portiob;
register unsigned char value,image;
union WTEMP_ST Temp;
int i;
portioa=PIO_A_CMD;
value=0;
asm stb value, [portioa];/* PIO_A_CMD=0 inpout */
portioa=PIO_B_CMD;
value=0xff;
asm stb value, [portioa];/* PIO_B_CMD=1outpout */
portioa=PIO_A_DAT; /* 数据 */
portiob=PIO_B_DAT; /* 地址 */
for(i=0;i<25;i++) YXBUF[i]=0;
for(i=0;i<30;i++) KR_LAST[i]=0xff;
for(i=0;i<(int)yxnum;i++)
{
switch(i)
{
case 0x00: /* 1 遥信板 */
value=YX_BOARD_1_KRL;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[0]=value;
YXBUF[0]=~value;
value=YX_BOARD_1_KRM;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[1]=value;
YXBUF[1]=~value;
value=YX_BOARD_1_KRH;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[2]=value;
value=~value;
value=value & 0x0f;
YXBUF[2]|=value;
break;
case 0x01: /* 2 遥信板 */
value=YX_BOARD_2_KRL;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[3]=value;
value=~value;
image=value & 0xf0;//高四位
image=image>>4;
value=value & 0x0f;
value=value<<4;
YXBUF[2]|=value;
YXBUF[3]=image;
value=YX_BOARD_2_KRM;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[4]=value;
value=~value;
image=value & 0xf0;//高四位
image=image>>4;
value=value & 0x0f;
value=value<<4;
YXBUF[3]|=value;
YXBUF[4]=image;
value=YX_BOARD_2_KRH;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[5]=value;
value=~value;
value=value & 0x0f;
value=value<<4;
YXBUF[4]|=value;
break;
case 0x02: /* 3 遥信板 */
value=YX_BOARD_3_KRL;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[6]=value;
YXBUF[5]=~value;
value=YX_BOARD_3_KRM;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[7]=value;
YXBUF[6]=~value;
value=YX_BOARD_3_KRH;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[8]=value;
value=~value;
value=value & 0x0f;
YXBUF[7]|=value;
break;
case 0x03: /* 4 遥信板 */
value=YX_BOARD_4_KRL;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[9]=value;
value=~value;
image=value & 0xf0;//高四位
image=image>>4;
value=value & 0x0f;
value=value<<4;
YXBUF[7]|=value; // 低四位 高字节
YXBUF[8]=image; // 高四位 低字节
value=YX_BOARD_4_KRM;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[10]=value;
value=~value;
image=value & 0xf0;//高四位
image=image>>4;
value=value & 0x0f; // 低四位
value=value<<4;
YXBUF[8]|=value; // 低四位 高字节
YXBUF[9]=image; // 高四位 低字节
value=YX_BOARD_4_KRH;
asm stb value, [portiob];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -