sub.c
来自「一个基于C51开发的计价秤」· C语言 代码 · 共 273 行
C
273 行
/*********************************************/
// File Name: sub.c
// Author: henny
// Date: 2006/3/1
/*********************************************/
#include <SST89x5xxRD2.h>
#include "Public.h"
#include "KeyBoard.h"
extern BYTE timer1_count;
extern INT8 Timeout1,Timeout2;
extern BOOL Timeout1_enable,Timeout2_enable;
extern BYTE report_type;
extern WORD Record_Counts;
extern WORD PLU_no;
extern WORD Weight;
extern WORD Quantity;
extern DWORD Unit_Price;
extern DWORD Total_Price;
extern BYTE lastop;
extern FLOAT Last_value;
extern FLOAT Current_value;
extern UNION_LONG temp_LONG;
extern BYTE PLU_buf[PLU_LEN];
extern BYTE Record_buf[RECORD_LEN];
extern VOID PLU_Load(WORD temp);
extern VOID Record_Load(WORD temp);
extern VOID Set_Weight_Display(WORD temp);
extern VOID Set_Quantity_Display(WORD temp);
extern VOID Set_Unit_Price_Display(DWORD temp);
extern VOID Set_Total_Price_Display(DWORD temp);
extern VOID Set_Calcul_Result_Display(BYTE *p);
extern VOID Set_Lcd3_Buf(CHAR c,BYTE pos,BYTE cnt);
VOID Wait_n_ms(BYTE n)
{
Timeout1=n;
Timeout1_enable=TRUE;
timer1_count=0;
while(Timeout1>0);
Timeout1_enable=FALSE;
}
VOID Wait_n_s(BYTE n)
{
Timeout2=n;
Timeout2_enable=TRUE;
timer1_count=0;
while(Timeout2>0);
Timeout2_enable=FALSE;
}
VOID Float_Format(FLOAT f)
{
INT8 data p=0;
BYTE dbuf[9];
BYTE digit;
FLOAT divisor=1000000;
BOOL pad=FALSE;
if(f>=0)
dbuf[p++]=' ';
else
{
dbuf[p++]='-';
f=-f;
}
if(f>=divisor)
dbuf[p++]='E';
else
while(p<9&&(divisor>1||f>=0.000001))
{
divisor=divisor/10;
digit=(int)(f/divisor);
if(divisor<1&&divisor>0.01)
dbuf[p++]='.';
if(digit!=0||divisor<10)
{
dbuf[p++]=digit+'0';
pad=TRUE;
}
else if(pad)
dbuf[p++]='0';
f-=digit*divisor;
}
dbuf[p]=0;
Set_Calcul_Result_Display(dbuf);
}
VOID Calculator_Operate(BYTE token)
{
BOOL result=TRUE;
switch(token)
{
case K_ADD:Last_value+=Current_value;break;
case K_SUB:Last_value-=Current_value;break;
case K_MUL:Last_value*=Current_value;break;
case K_DIV:
if(Current_value!=0)
{
Last_value/=Current_value;
result=TRUE;
}
else
result=FALSE;
break;
}
if(result)
{
Last_value=Last_value+0.000001;
Float_Format(Last_value);
}
else
{
Set_Lcd3_Buf(0,1,6);
Set_Lcd3_Buf('E',0,1);
}
}
DWORD Hex_to_Dec(DWORD hex)
{
FLOAT a,b,c,d,e,f,g;
a=hex&0xf;
b=hex>>4&0xf;
c=hex>>8&0xf;
d=hex>>12&0xf;
e=hex>>16&0xf;
f=hex>>20&0xf;
g=hex>>24&0xf;
if(a>9||b>9||c>9||d>9||e>9||f>9||g>9)
return 0;
else
return a+b*10+c*100+d*1000+e*10000.0+f*100000+g*1000000;
}
DWORD Data_Convert_Process(BYTE *pt,n)
{
switch(n)
{
case 2:
temp_LONG.B[0]=0x00;
temp_LONG.B[1]=0x00;
temp_LONG.B[2]=*pt;
temp_LONG.B[3]=*(pt+1);
break;
case 3:
temp_LONG.B[0]=0x00;
temp_LONG.B[1]=*pt;
temp_LONG.B[2]=*(pt+1);
temp_LONG.B[3]=*(pt+2);
break;
case 4:
temp_LONG.B[0]=*pt;
temp_LONG.B[1]=*(pt+1);
temp_LONG.B[2]=*(pt+2);
temp_LONG.B[3]=*(pt+3);
break;
}
return(Hex_to_Dec(temp_LONG.L));
}
VOID Load_PLU_to_LCD_Buf(WORD temp)
{
PLU_Load(temp);
Unit_Price=Data_Convert_Process(PLU_buf,3);
Set_Unit_Price_Display(Unit_Price);
}
BOOL Load_Record_to_LCD_Buf(WORD temp)
{
Record_Load(temp);
if(Record_buf[0]==DELE)
return FALSE;
if(Record_buf[0]==PW||Record_buf[0]==MW)
{
Weight=Data_Convert_Process(Record_buf+Weight_Save_address,3);
Set_Weight_Display(Weight);
}
else if(Record_buf[0]==PN||Record_buf[0]==MN)
{
Quantity=Data_Convert_Process(Record_buf+Weight_Save_address,2);
Set_Quantity_Display(Quantity);
}
Unit_Price=Data_Convert_Process(Record_buf+Unit_Price_Save_address,3);
Set_Unit_Price_Display(Unit_Price);
Total_Price=Data_Convert_Process(Record_buf+Total_Price_Save_address,4);
Set_Total_Price_Display(Total_Price);
return TRUE;
}
DWORD Report_Total()
{
WORD ii;
DWORD total_value=0;
for(ii=1;ii<=Record_Counts;ii++)
{
Record_Load(ii);
switch(report_type)
{
case TOTAL_ALL_MONEY:
if(Record_buf[0]==PW||Record_buf[0]==PN||Record_buf[0]==MW||Record_buf[0]==MN)
total_value+=Data_Convert_Process(Record_buf+Total_Price_Save_address,4);
break;
case TOTAL_ALL_PLU_MONEY:
if(Record_buf[0]==PW||Record_buf[0]==PN)
total_value+=Data_Convert_Process(Record_buf+Total_Price_Save_address,4);
break;
case TOTAL_SEL_PLU_MONEY:
if(PLU_no==Data_Convert_Process(Record_buf+PLU_no_Save_address,2))
total_value+=Data_Convert_Process(Record_buf+Total_Price_Save_address,4);
break;
case TOTAL_ALL_MANUL_MONEY:
if(Record_buf[0]==MW||Record_buf[0]==MN)
total_value+=Data_Convert_Process(Record_buf+Total_Price_Save_address,4);
break;
case TOTAL_ALL_NUMBER_MONEY:
if(Record_buf[0]==PN||Record_buf[0]==MN)
total_value+=Data_Convert_Process(Record_buf+Total_Price_Save_address,4);
break;
case TOTAL_ALL_WEIGHT:
if(Record_buf[0]==PW||Record_buf[0]==MW)
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,3);
break;
case TOTAL_ALL_PLU_WEIGHT:
if(Record_buf[0]==PW)
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,3);
break;
case TOTAL_SEL_PLU_WEIGHT:
if((Record_buf[0]==MW||Record_buf[0]==PW)&&PLU_no==Data_Convert_Process(Record_buf+PLU_no_Save_address,2))
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,3);
break;
case TOTAL_ALL_MANUL_WEIGHT:
if(Record_buf[0]==MW)
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,3);
break;
case TOTAL_ALL_NUMBER:
if(Record_buf[0]==PN||Record_buf[0]==MN)
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,2);
break;
case TOTAL_ALL_PLU_NUMBER:
if(Record_buf[0]==PN)
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,2);
break;
case TOTAL_SEL_PLU_NUMBER:
if((Record_buf[0]==MN||Record_buf[0]==PN)&&PLU_no==Data_Convert_Process(Record_buf+PLU_no_Save_address,2))
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,2);
break;
case TOTAL_ALL_MANUL_NUMBER:
if(Record_buf[0]==MN)
total_value+=Data_Convert_Process(Record_buf+Weight_Save_address,2);
break;
}
}
if(total_value>9999999)
total_value=9999999;
return total_value;
}
BOOL Password_Compare(BYTE *password,BYTE *lcd_buf)
{
if(password[0]==lcd_buf[2]&&password[1]==lcd_buf[1]&&password[2]==lcd_buf[0])
return TRUE;
else
return FALSE;
}
/*
VOID Weight_KG_to_LB() //1kg=2.2046lb,1lb=16oz
{
}
*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?