?? disp.c
字號:
/////////////////////////////////////////////////////
// 文件名:STATIC886.C 靜態886驅動
////////////////////////////////////////////////////
#include <REG51STC.H>
#include <ABSACC.H>
#include "CMD886.H"
#include <INTRINS.H>
#include "externxy.h"
/*********************************************
*功能: DISP 金額/容量 gunidid(槍號0,1) *
**********************************************/
void disp_lcd(ulong lcddata1,ulong lcddata2,uchar gunidid) //;LCD1,2金額及升的顯示
{
uchar i;
xdata uchar dispmem[16];
void *pi;
uchar endhide; //清前導零要到小數點位置
//------------------------------
for(i=0;i<8;i++)
{ bbyte=(lcddata1%10);
lcddata1 /=10;
dispmem[i]=bbyte; //dispmema[0] 為金額個位
}
//-------------------------------
for(i=0;i<8;i++)
{ bbyte=(lcddata2%10);
lcddata2 /=10;
dispmem[i+8]=bbyte; //dispmema[0+8] 為升個位
}
//---------------------------------------
if(gunidid==0)endhide=dota_data[6];
else endhide=dotb_data[6];
for(i=7;i>endhide;i--)
{
if(dispmem[i]==0)dispmem[i]=0x0f; //去前導零
else break;
}
if(gunidid==0)endhide=dota_data[5];
else endhide=dotb_data[5];
for(i=7;i>endhide;i--)
{
if(dispmem[i+8]==0)dispmem[i+8]=0x0f; //去前導零
else break;
}
//--------------------------------------------------------------
pi=&dispmem;
disp_out(gunidid,pi,8);
}
/******************************************************************
* 功能:LCD單價、小數點 gunidid(槍號0,1) *
*******************************************************************/
void disp_dot(ulong lcddata,uchar gunidid)
{
uchar i;
void *pi;
xdata uchar dispmem[16];
uchar endhide; //清前導零要到小數點位置
//------------------------------
for(i=0;i<6;i++)
{ bbyte=(lcddata%10);
lcddata /=10;
dispmem[i]=bbyte; //dispmema[0] 為個位
}
if(gunidid==0)endhide=dota_data[4];
else endhide=dotb_data[4];
for(i=5;i>endhide;i--)
{
if(dispmem[i]==0)dispmem[i]=0x0f; //去前導零
else break;
}
//-------------------------------
// 根據小數點的5種類型,查表
//-------------------------------
if(gunidid==0)
{
dispmem[0+8]=dotmode[decimal_a]; //空位
dispmem[1+8]=dota_data[0]; //第四位小數點位置
dispmem[2+8]=dota_data[1]; //單價小數點
dispmem[3+8]=dota_data[2]; //升小數點
dispmem[4+8]=dota_data[3]; //金額小數點
dispmem[5+8]=dota_data[7]; //特殊標識 STOP START
}
else
{
dispmem[0+8]=dotmode[decimal_b]; //空位
dispmem[1+8]=dotb_data[0]; //第四位小數點位置
dispmem[2+8]=dotb_data[1]; //單價小數點
dispmem[3+8]=dotb_data[2]; //升小數點
dispmem[4+8]=dotb_data[3]; //金額小數點
dispmem[5+8]=dotb_data[7]; //特殊標識 STOP START
}
//-------------------------------
pi=&dispmem;
disp_out(gunidid,pi,6);
}
/**************************************************
* 功能:顯示鍵盤小屏
**************************************************/
void disp_key(void)
{ uchar data mem_inn,mem_str; //做堆棧用
uchar data i,j,ma,mb;
mem_inn=AUXR; //做堆棧用
mem_str=bbyte;
AUXR |=0x02;
XBYTE[KEY_DISPADD]=0x24; //0x24--LE->H 0x00--LE->L
for(i=0;i<5;i++)
{
ma=keya_num[i];
mb=keyb_num[i];
for(j=0;j<8;j++)
{ bbyte=0x24;
a0=(bit)(ma & 0x80);ma<<=1;
a3=(bit)(mb & 0x80);mb<<=1;
XBYTE[KEY_DISPADD]=bbyte;
bbyte |=0x12;
XBYTE[KEY_DISPADD]=bbyte; //CLK ↑
bbyte &=0xed;
XBYTE[KEY_DISPADD]=bbyte;//CLK ↓
}
}
XBYTE[KEY_DISPADD]=0x00;
bbyte=mem_str;
AUXR=mem_inn; //做堆棧用
}
/**************************************************
* 功能: ; 顯示定量加油數據a
***************************************************/
void disp_vip_a(void)
{ uchar i;
ulong lcddata;
void *pi;
xdata uchar dispmem[16]; //dispmema[0]及dispmema[8]為個位
disp_ration_ending();
if(ration_mode_a)
{
keya_num[4]=0x04; //定升
for(i=0;i<8;i++)
{
dispmem[i]=0x0f;
}
#if DISPMODE==886
dispmem[7]=0x0a; //L
#else
dispmem[5]=0x0a; //L
#endif
lcddata=ration_num_a;
for(i=0;i<8;i++)
{ bbyte=(lcddata%10);
lcddata /=10;
dispmem[i+8]=bbyte; //dispmema[8] 為個位
}
for(i=7;i>dota_data[5];i--)
{
if(dispmem[i+8]==0)dispmem[i+8]=0x0f; //去前導零
else break;
}
}
else
{
keya_num[4]=0x08; //定元
for(i=0;i<8;i++)
{
dispmem[i+8]=0x0f;
}
#if DISPMODE==886
dispmem[7+8]=0x0c; //P
#else
dispmem[5+8]=0x0c; //P
#endif
lcddata=ration_num_a;
for(i=0;i<8;i++)
{ bbyte=(lcddata%10);
lcddata /=10;
dispmem[i]=bbyte; //dispmema[8] 為個位
}
for(i=7;i>dota_data[6];i--)
{
if(dispmem[i]==0)dispmem[i]=0x0f; //去前導零
else break;
}
}
pi=&dispmem;
disp_out(0,pi,8);
//----------------------------------------------
lcddata=price_a;
for(i=0;i<8;i++)
{ bbyte=(lcddata%10);
lcddata /=10;
dispmem[i]=bbyte; //dispmema[8] 為個位
}
for(i=5;i>dota_data[4];i--)
{
if(dispmem[i]==0)dispmem[i]=0x0f; //去前導零
else break;
}
if(ration_mode_a)
{ //定升
bbyte=0;
if(dota_data[5]==3)a1=1; //升小數點
else a5=1;
if(dota_data[4]==3)a2=1; //單價小數點
else if(dota_data[4]==2)a6=1;
dispmem[0+8]=dotmem[bbyte/16]*16+dotmem[bbyte%16];
dispmem[1+8]=dota_data[0]; //第四位小數點位置
dispmem[2+8]=dota_data[1]; //單價小數點
dispmem[3+8]=dota_data[2]; //升小數點
dispmem[4+8]=0x0f; //金額小數點
dispmem[5+8]=dota_data[7]; //特殊標識 STOP START
}
else
{
bbyte=0;
if(dota_data[6]==2)a4=1; //金額小數點
else if(dota_data[6]==1)a0=1;
if(dota_data[4]==3)a2=1; //單價小數點
else if(dota_data[4]==2)a6=1;
dispmem[0+8]=dotmem[bbyte/16]*16+dotmem[bbyte%16];
dispmem[1+8]=dota_data[0]; //第四位小數點位置
dispmem[2+8]=dota_data[1]; //單價小數點
dispmem[3+8]=0x0f; //升小數點
dispmem[4+8]=dota_data[3]; //金額小數點
dispmem[5+8]=dota_data[7]; //特殊標識 STOP START
}
pi=&dispmem;
disp_out(0,pi,6);
}
/***********************************************************
* 功能:計算、顯示定量加油結局a
***********************************************************/
void disp_ration_ending(void)
{
xdata uchar tt[8];
ulong ma;
uint aa,bb;
uchar i;
uchar strdot; //小數點位置
if(ration_mode_a)
{ //升
bbyte=dota_data[5];
if(bbyte==2){ma=ration_num_a*120/100; strdot=2;}
else if(bbyte==3){ma=ration_num_a*120/1000;strdot=3;}
else {ma=ration_num_a*120;strdot=0;}
}
else
{ bbyte=dota_data[4];
if(bbyte==2)aa=100; //單價小數點
else if(bbyte==3)aa=1000;
else aa=1;
bbyte=dota_data[6];
if(bbyte==2){bb=100;strdot=2;} //金額小數點
else if(bbyte==1){bb=10;strdot=1;}
else {bb=1;strdot=0;}
ma=ration_num_a*120*aa/bb/price_a;
}
//ma=nn;
//ration_pulse_a=ma; //定量脈沖
calculate_ration(0); //計算
ma=ration_num_a;
tt[7]=ma%10;ma/=10;
tt[6]=ma%10;ma/=10;
tt[5]=ma%10;ma/=10;
tt[4]=ma%10;ma/=10;
tt[3]=ma%10;ma/=10;
tt[2]=ma%10;ma/=10;
tt[1]=ma%10;ma/=10;
tt[0]=ma%10; //ma/=10;
for(i=0;i<7;i++)
{
if(i==(7-strdot))break;
if(tt[i]==0x00) tt[i]=28; //去前導零
else break;
}
if(ration_num_a==0)
{
keya_num[0]=keynumdata[0];
keya_num[1]=keynumdata[28];
keya_num[2]=keynumdata[28];
keya_num[3]=keynumdata[28];
}
else
{
if(i<4)
{
keya_num[0]=keynumdata[tt[i+3]]; //keya_num[0]為個位位置
keya_num[1]=keynumdata[tt[i+2]];
if(strdot==2 && i==3)keya_num[1]+=0x80;
keya_num[2]=keynumdata[tt[i+1]];
if(strdot==3 && i==2)keya_num[2]+=0x80;
keya_num[3]=keynumdata[tt[i]];
}
else
{
keya_num[0]=keynumdata[tt[7]];
keya_num[1]=keynumdata[tt[6]];
keya_num[2]=keynumdata[tt[5]];
keya_num[3]=keynumdata[tt[4]];
if(strdot==1)keya_num[1]+=0x80;
else if(strdot==2)keya_num[2]+=0x80;
else if(strdot==3)keya_num[3]+=0x80;
}
}
}
/*****************************************
* 功能:鍵盤小屏清屏a
*******************************************/
void disp_key_clear_a(void)
{
if(k1key)
{
/*if(printermode_a==0) keya_num[3]=keynumdata[0x0a]; //自動
else keya_num[3]=keynumdata[17]; //手動
keya_num[0]=keynumdata[pirnt_select_a+1];
keya_num[1]=0x00;keya_num[2]=0x00;keya_num[4]=0x00; */
//------------------------------------------------------
if(vip_mode_a) {keya_num[4]=0x04;} //定升
else {keya_num[4]=0x08;} //定元
keya_num[0]=keynumdata[0];
keya_num[1]=keynumdata[28];
keya_num[2]=keynumdata[28];
keya_num[3]=keynumdata[28];
//------------------------------------------------------
}
else
{ keya_num[0]=keynumdata[27];keya_num[3]=keynumdata[27];
keya_num[1]=keynumdata[27];keya_num[2]=keynumdata[27];keya_num[4]=0x02;
}
}
/*****************************************
* 功能:鍵盤小屏清屏b
*******************************************/
void disp_key_clear_b(void)
{
if(k2key)
{
/*if(printermode_b==0) keyb_num[3]=keynumdata[0x0a]; //自動
else keyb_num[3]=keynumdata[17]; //手動
keyb_num[0]=keynumdata[pirnt_select_b+1];
keyb_num[1]=0x00;keyb_num[2]=0x00;keyb_num[4]=0x00;*/
//-----------------------------------------------------
if(vip_mode_b) {keyb_num[4]=0x04;} //定升
else {keyb_num[4]=0x08;} //定元
keyb_num[0]=keynumdata[0];
keyb_num[1]=keynumdata[28];
keyb_num[2]=keynumdata[28];
keyb_num[3]=keynumdata[28];
//-----------------------------------------------------
}
else
{ keyb_num[0]=keynumdata[27];keyb_num[3]=keynumdata[27];
keyb_num[1]=keynumdata[27];keyb_num[2]=keynumdata[27];keyb_num[4]=0x02;
}
}
/***********************************************************************
* 功能:顯示TOTAL數據a
************************************************************************/
void disp_total_a(void)
{ uchar i;
xdata uchar dispmem[16],tt[12];
uchar dotdata;
ulong ma;
uchar *ptr;
for(i=0;i<16;i++)
{
dispmem[i]=0x0f;
}
if((menu1==1 && state1==6) ||state1==8)
{
if(!ration_mode_a)
{
dotdata=dota_data[6];
#if DISPMODE==886
dispmem[7]=0x0c;dispmem[6]=0x0c; //PP
#else
dispmem[5]=0x0c;dispmem[4]=0x0c; //PP
#endif
if(state1!=8 || ration_num_a==0) ma=gun1.sum_sale; //總累--鎖售額 PP
else ma=ration_num_a; //設置總累金額
if(state1!=8)
{
keya_num[0]=0x1f;keya_num[1]=0x01;keya_num[2]=0x48;keya_num[3]=0x48;
keya_num[4]=0x02;
}
else
{
keya_num[0]=keynumdata[27];
keya_num[1]=keynumdata[27];
keya_num[2]=keynumdata[23];
keya_num[3]=keynumdata[23]; //"PP--"
keya_num[4]=0x02;
}
}
else //升
{ dotdata=dota_data[5];
#if DISPMODE==886
dispmem[7]=0x0a;dispmem[6]=0x0a;
#else
dispmem[5]=0x0a;dispmem[4]=0x0a;
#endif //LL
if(state1!=8 || ration_num_a==0) ma=gun1.sum_liter; //總累--升 LL
else ma=ration_num_a; //設置總累升
if(state1!=8)
{
keya_num[0]=0x32;keya_num[1]=0x01;keya_num[2]=0x48;keya_num[3]=0x48;
keya_num[4]=0x02;
}
else
{
keya_num[0]=keynumdata[27];
keya_num[1]=keynumdata[27];
keya_num[2]=keynumdata[19];
keya_num[3]=keynumdata[19]; //"LL--"
keya_num[4]=0x02;
}
}
}
else
{
if(!ration_mode_a)
{ dotdata=dota_data[6];
#if DISPMODE==886
dispmem[7]=0x0c;dispmem[6]=0x0f;
#else
dispmem[5]=0x0c;dispmem[4]=0x0f;
#endif //P
ma=gun1.work_sale; //班累--鎖售額 P
keya_num[0]=0x1f;keya_num[1]=0x01;keya_num[2]=0x3d;keya_num[3]=0x48;
keya_num[4]=0x02;
}
else
{ dotdata=dota_data[5];
#if DISPMODE==886
dispmem[7]=0x0a;dispmem[6]=0x0f;
#else
dispmem[5]=0x0a;dispmem[4]=0x0f;
#endif //L
ma=gun1.work_liter; //班累--升 L
keya_num[0]=0x32;keya_num[1]=0x01;keya_num[2]=0x3d;keya_num[3]=0x48;
keya_num[4]=0x02;
}
}
//*******************************************
//if(!ration_mode_a)dotdata=dota_data[6]; //P
//else dotdata=dota_data[5];//L
for(i=0;i<12;i++) //tt[0]為個位
{
tt[i]=ma%10;ma/=10;
}
for(i=11;i>0;i--)
{ if(i==dotdata) break;
if(tt[i]==0) tt[i]=0x0f; //去前導零
else break;
}
//------------------------
#if DISPMODE==664
if(dotdata==1) //如果是1位小數
{
for(i=0;i<3;i++)
{
dispmem[i]=tt[i+9];
}
for(i=0;i<6;i++)
{
dispmem[i+8]=tt[i+3];
}
ptr=&dispmem;
disp_out(0,ptr,8);
//--------------------------
for(i=0;i<16;i++)
{
dispmem[i]=0x0f;
}
if(dotdata==3)dispmem[0+8]=0xfc; //3位
else if(dotdata==0)dispmem[0+8]=0xff; //0位
else dispmem[0+8]=0xcf; //1,2位都只能顯示第二位小數
for(i=1;i<4;i++)
{
dispmem[i]=tt[i-1];
}
//dispmem[10]=dotmem[dotdata];
}
else //不是一位小數時
{
for(i=0;i<2;i++)
{
dispmem[i]=tt[i+10];
}
for(i=0;i<6;i++)
{
dispmem[i+8]=tt[i+4];
}
ptr=&dispmem;
disp_out(0,ptr,8);
//--------------------------
for(i=0;i<16;i++)
{
dispmem[i]=0x0f;
}
if(dotdata==3)dispmem[0+8]=0xfc; //3位
else if(dotdata==0)dispmem[0+8]=0xff; //0位
else dispmem[0+8]=0xcf; //1,2位都只能顯示第二位小數
for(i=0;i<4;i++)
{
dispmem[i]=tt[i];
}
//dispmem[10]=dotmem[dotdata];
}
ptr=&dispmem;
disp_out(0,ptr,6);
#else //*******886***666***********
for(i=6;i<10;i++)
{
dispmem[i+2]=tt[i];
}
ptr=&dispmem;
disp_out(0,ptr,8);
//--------------------------
for(i=6;i<16;i++)
{
dispmem[i]=0x0f;
}
for(i=0;i<6;i++)
{
dispmem[i]=tt[i];
}
dispmem[10]=dotmem[dotdata];
ptr=&dispmem;
disp_out(0,ptr,6);
#endif
}
/***********************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -