📄 main.c
字号:
/*********************************************/
// Model: Retail Scale
// Chip: SST89E516RD2
// Development Tools: Keil C51 7.50
// Version: 1.00
// Note: Copyright (c) 2006 CHAS Electronics Co.
/*********************************************/
// File Name: main.c
// Author: henny
// Date: 2006/3/1
/*********************************************/
#include <SST89x5xxRD2.h>
#include <stdio.h>
#include <stdlib.h>
#include "Public.h"
#include "KeyBoard.h"
#include "main.h"
main()
{
Power_On();
while(1)
{
switch(mode)
{
case Input_code_mode:Input_Code();break;
case Calibration_mode:Calibration();break;
case Initialization_mode:Initialization();break;
case Sales_mode:Sales();break;
case Total_mode:Total();break;
case Payback_mode:Payback();break;
case PLU_Setup_mode:PLU_Setup();break;
case Time_Setup_mode:Time_Setup();break;
case Beep_and_Light_Setup_mode:Beep_and_Light_Setup();break;
case Calculator_mode:Calculator();break;
case Reports_mode:Reports();break;
case Download_mode:Download();break;
case Print_Cancel_mode:Print_Cancel();break;
case Power_down_mode:Power_Down();break;
}
}
}
/**********************************
********Power On Reset*************
**********************************/
VOID Power_On()
{
BAT_DECT=1;
AC_DECT=1;
P4=0x00;
P3=0xff;
P2=0xff;
P0=0x7f;
Delay(20);
if(!P3_2)
mode=Input_code_mode;
else
mode=Initialization_mode;
timer1_count=0;
date.year=6;
date.month=3;
date.day=1;
time.hour=12;
time.min=0;
time.sec=0;
icon_buf=0x00;
PT0=1;
TMOD=V_TMOD;
TH0=V_TH0;TL0=V_TL0;
TH1=V_TH1;TL1=V_TL1;
TR0=1;ET0=1;TR1=1;ET1=1;EA=1;
if(!Key_Short_Test())
{
Beep_on=TRUE;
while(1)
{
Beep();
Wait_n_s(2);
}
}
RS232_Init();
CS5532_Init();
LCD_Init(LCD_MODE,LCD_GLITTER);
keyprocess=FALSE;keydone=TRUE;
Beep_on=TRUE;colon=FALSE;Cal_flag=FALSE;
}
/**********************************
********Power Down mode***********
**********************************/
VOID Power_Down()
{
P4=0xff;
LIGHT=TRUE;
Cls_Icon_Buf();
while(mode==Power_down_mode)
{
if(keyprocess)
{
keydone=FALSE;
keyprocess=FALSE;
if(keypre[0]==K_ON_OFF)
{
Beep();
P4=0x00;
Delay(20);
RS232_Init();
CS5532_Init();
LCD_Init(LCD_MODE,LCD_GLITTER);
if(Light_on)
LIGHT=FALSE;
else
LIGHT=TRUE;
Set_Logo_Display();
Set_SCALE_Display();
Set_Ver_no_Display(Soft_ver_no);
Display();
Wait_n_ms(50);
while(!Zero_Setting_When_Power_Up())
{
Set_INIT0_On_Lcd1_Display();
Display();
}
unit_price_entered=FALSE;
mode=Sales_mode;
Sold_Quantity=0;
Sum_Price=0;
}
keydone=TRUE;
}
PCON|=0x01;
}
}
/**********************************
*********Input Code mode***********
**********************************/
VOID Input_Code()
{
INT8 data i;
static input_count=0;
BYTE Option_Table[TABLE_LEN];
Beep_on=TRUE;
if(Read_extern_eeprom(Option_Table))
{
if(Option_Table[EEPROM_ID]==0xa5&&Option_Table[EEPROM_ID+1]==0x5a)
{
if(Save_Option_Table(Option_Table))
{
Set_COPY_SUCCESS_Display();
Display();
Wait_n_s(2);
}
}
}
if(!Read_Cal_Password(Option_Table))
{
Set_NOEEP_On_Lcd1_Display();
Display();
while(1);
}
Full_Display();
Wait_n_s(2);
for(i=9;i>=0;i--)
{
Set_Lcd1_Buf(i+'0',0,5);
Set_Lcd2_Buf(i+'0',0,7);
Set_Lcd3_Buf(i+'0',0,7);
Display();
Wait_n_ms(50);
}
Set_INPUT_CODE_Display();
Display();
while(!P3_2);
while(mode==Input_code_mode)
{
if(keyprocess)
{
keydone=FALSE;
keyprocess=FALSE;
numeric=0;
if(!keypre[1]&&!keypre[2]&&!keypre[3])
{
switch(keypre[0])
{
case K_ENTER:
Beep();
if(Password_Compare(Option_Table,lcd2_buf))
mode=Calibration_mode;
else if(input_count>3)
{
Cal_flag=FALSE;
mode=Initialization_mode;
}
else
{
Alarm();
input_count++;
}
break;
case K_CLEAR:
Beep();
Set_INPUT_CODE_Display();
break;
case K_00:
Beep();
numeric+='0';
Lcd_Buf_Left_Shift(lcd2_buf,2,numeric,0);
Lcd_Buf_Left_Shift(lcd2_buf,2,numeric,0);
break;
case K_9:numeric++;
case K_8:numeric++;
case K_7:numeric++;
case K_6:numeric++;
case K_5:numeric++;
case K_4:numeric++;
case K_3:numeric++;
case K_2:numeric++;
case K_1:numeric++;
case K_0:numeric+='0';
Beep();
Lcd_Buf_Left_Shift(lcd2_buf,2,numeric,0);
break;
}
}
else if(keypre[3])
{
Beep();
Cal_flag=FALSE;
mode=Initialization_mode;
}
keydone=TRUE;
}
if(half_sec)
{
half_sec=FALSE;
Display();
}
}
}
/**********************************
********Calibration mode***********
**********************************/
VOID Calibration_Key_Processing()
{
if(keyprocess)
{
keydone=FALSE;
keyprocess=FALSE;
numeric=0;
if(!keypre[1]&&!keypre[2]&&!keypre[3])
{
switch(keypre[0])
{
case K_ENTER:
Beep();
Cal_Weight=Get_Cal_Weight_from_display_buf();
if(Cal_Weight!=0&&Cal_Weight<=30000)
{
factor_calcul=TRUE;
Calculate_One_Count();
Save_Cal_One_count(One_count);
Set_One_count_Display(One_count);
Delay(2);
Cal_counts++;
if(Cal_counts>99)
Cal_counts=99;
Save_Cal_counts(&Cal_counts);
}
else
Alarm();
break;
case K_ADD:
Beep();
if(factor_calcul)
{
One_count=One_count+1;
//Save_Cal_One_count(One_count);
Set_One_count_Display(One_count);
}
break;
case K_SUB:
Beep();
if(factor_calcul)
{
One_count=One_count-1;
//Save_Cal_One_count(One_count);
Set_One_count_Display(One_count);
}
break;
case K_CLEAR:
Beep();
Cal_Weight=0;
Set_Cal_Weight_Display(Cal_Weight);
break;
case K_00:
Beep();
numeric+='0';
Lcd_Buf_Left_Shift(lcd2_buf,4,numeric,0);
Lcd_Buf_Left_Shift(lcd2_buf,4,numeric,0);
Cal_Weight=Get_Cal_Weight_from_display_buf();
Set_Cal_Weight_Display(Cal_Weight);
break;
case K_9:numeric++;
case K_8:numeric++;
case K_7:numeric++;
case K_6:numeric++;
case K_5:numeric++;
case K_4:numeric++;
case K_3:numeric++;
case K_2:numeric++;
case K_1:numeric++;
case K_0:numeric+='0';
Beep();
Lcd_Buf_Left_Shift(lcd2_buf,4,numeric,0);
Cal_Weight=Get_Cal_Weight_from_display_buf();
Set_Cal_Weight_Display(Cal_Weight);
break;
}
}
else if(keypre[3])
{
Beep();
Cal_flag=FALSE;
mode=Initialization_mode;
}
keydone=TRUE;
}
}
VOID Calibration()
{
INT8 data i;
BYTE Option_Table[6],Option_buf;
Read_Cal_counts(&Cal_counts);
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Cal_counts_Display(Cal_counts);
Display();
Wait_n_s(2);
Read_Option_Param(&Option_buf);
if((Option_buf&0x02)==0x02)
KG_flag=FALSE;
else
KG_flag=TRUE;
Read_Cal_Zero_limit(Option_Table);
temp_LONG.B[0]=0x00;
temp_LONG.B[1]=Option_Table[0];
temp_LONG.B[2]=Option_Table[1];
temp_LONG.B[3]=Option_Table[2];
Cal_Zero_Lower_count=temp_LONG.L;
temp_LONG.B[0]=0x00;
temp_LONG.B[1]=Option_Table[3];
temp_LONG.B[2]=Option_Table[4];
temp_LONG.B[3]=Option_Table[5];
Cal_Zero_Upper_count=temp_LONG.L;
Cal_flag=TRUE;
One_count=0;
Weight=0;
Cal_Weight=0;
factor_calcul=FALSE;
for(i=0;i<5;i++)
Get_AD_Convert_Data();
Cal_Zero_count=0;
for(i=0;i<5;i++)
Cal_Zero_count+=Get_AD_Convert_Data();
Cal_Zero_count=Cal_Zero_count/5;
if(Cal_Zero_Count_Check())
Save_Cal_Zero_count(Cal_Zero_count);
else
{
Set_ADC_On_Lcd1_Display();
Display();
while(1);
}
Set_Weight_Display(Weight);
Set_Cal_Weight_Display(Cal_Weight);
Set_One_count_Display(One_count);
Set_BEEP_Icon();
while(mode==Calibration_mode)
{
if(factor_calcul)
{
Monitor_Weigh_Scale_On_Calibration_Mode();
Set_Weight_Display(Weight);
}
Calibration_Key_Processing();
if(half_sec)
{
half_sec=FALSE;
point2_on=~point2_on;
Display();
}
}
}
/**********************************
********Initialization mode********
**********************************/
VOID Initialization()
{
INT8 data i;
BYTE Option_Table[TABLE_LEN];
BYTE Option_buf;
if(!Read_Option_Table(Option_Table))
{
Set_NOEEP_On_Lcd1_Display();
Display();
while(1);
}
if(Option_Table[EEPROM_ID]!=0xa5&&Option_Table[EEPROM_ID+1]!=0x5a)
{
Set_EEP_On_Lcd1_Display();
Display();
while(1);
}
Option_buf=Option_Table[Option_Param_address];
if((Option_buf&0x01)==0x01)
Beep_on=TRUE;
else
Beep_on=FALSE;
if((Option_buf&0x02)==0x02)
KG_flag=FALSE;
else
KG_flag=TRUE;
if((Option_buf&0x04)==0x04)
Ver_flag=FOOKTIN;
else
Ver_flag=PAND;
if((Option_buf&0x08)==0x08)
Unit_flag=TRUE;
else
Unit_flag=FALSE;
if((Option_buf&0x10)==0x10)
{
Light_on=TRUE;
LIGHT=FALSE;
}
else
{
Light_on=FALSE;
LIGHT=TRUE;
}
temp_INT.B[0]=Option_Table[Graduation_Grade_address];
temp_INT.B[1]=Option_Table[Graduation_Grade_address+1];
Graduation_Grade=temp_INT.I;
Graduation1=Option_Table[Graduation1_address];
Graduation2=Option_Table[Graduation2_address];
temp_INT.B[0]=Option_Table[Max_Capacity_address];
temp_INT.B[1]=Option_Table[Max_Capacity_address+1];
Max_Capacity=temp_INT.I;
Initial_Zero_Setting_limit=Option_Table[Initial_Zero_Setting_limit_address];
Zero_Setting_and_Zero_Tracking_limit=Option_Table[Zero_Setting_and_Zero_Tracking_limit_address];
temp_INT.B[0]=Option_Table[Zero_Stable_count_address];
temp_INT.B[1]=Option_Table[Zero_Stable_count_address+1];
Zero_Stable_count=temp_INT.I;
Zero_Stable_times=Option_Table[Zero_Stable_times_address];
temp_INT.B[0]=Option_Table[Weight_Stable_count_address];
temp_INT.B[1]=Option_Table[Weight_Stable_count_address+1];
Weight_Stable_count=temp_INT.I;
Weight_Stable_times=Option_Table[Weight_Stable_times_address];
Err1_Timeout=Option_Table[Err1_Timeout_address];
Timeout3=Err1_Timeout;
temp_INT.B[0]=Option_Table[Local_Height_address];
temp_INT.B[1]=Option_Table[Local_Height_address+1];
Local_Height=temp_INT.I;
Local_Latitude=Option_Table[Local_Latitude_address];
temp_INT.B[0]=Option_Table[Destination_Height_address];
temp_INT.B[1]=Option_Table[Destination_Height_address+1];
Destination_Height=temp_INT.I;
Destination_Latitude=Option_Table[Destination_Latitude_address];
temp_INT.B[0]=Option_Table[Soft_Ver_address];
temp_INT.B[1]=Option_Table[Soft_Ver_address+1];
Soft_ver_no=temp_INT.I;
Cal_counts=Option_Table[Cal_counts_address];
temp_FLOAT.B[0]=Option_Table[Cal_One_count_address];
temp_FLOAT.B[1]=Option_Table[Cal_One_count_address+1];
temp_FLOAT.B[2]=Option_Table[Cal_One_count_address+2];
temp_FLOAT.B[3]=Option_Table[Cal_One_count_address+3];
One_count=temp_FLOAT.F;
temp_FLOAT.B[0]=Option_Table[Cal_Zero_count_address];
temp_FLOAT.B[1]=Option_Table[Cal_Zero_count_address+1];
temp_FLOAT.B[2]=Option_Table[Cal_Zero_count_address+2];
temp_FLOAT.B[3]=Option_Table[Cal_Zero_count_address+3];
Cal_Zero_count=temp_FLOAT.F;
temp_FLOAT.B[0]=Option_Table[Cal_Weight_count_address];
temp_FLOAT.B[1]=Option_Table[Cal_Weight_count_address+1];
temp_FLOAT.B[2]=Option_Table[Cal_Weight_count_address+2];
temp_FLOAT.B[3]=Option_Table[Cal_Weight_count_address+3];
Cal_Weight_count=temp_FLOAT.F;
if(Cal_counts==0)
{
Set_NOCAL_On_Lcd1_Display();
Display();
while(1);
}
temp_LONG.B[0]=0x00;
Cls_Icon_Buf();
Set_Logo_Display();
Set_SCALE_Display();
for(i=9;i>=0;i--)
{
Set_Lcd1_Buf(i+'0',0,5);
Display();
Wait_n_ms(50);
}
Set_Ver_no_Display(Soft_ver_no);
Display();
Wait_n_ms(50);
while(!Zero_Setting_When_Power_Up())
{
Set_INIT0_On_Lcd1_Display();
Display();
}
if(Beep_on)
Set_BEEP_Icon();
else
Cls_BEEP_Icon();
Last_day=0;
unit_price_entered=FALSE;
NET_flag=FALSE;
mode=Sales_mode;
Sold_Quantity=0;
Sum_Price=0;
Tare_Weight=0;
}
/**********************************
********Sales mode*****************
**********************************/
VOID Sales_Key_Processing()
{
if(keyprocess)
{
keydone=FALSE;
keyprocess=FALSE;
numeric=0;
if(!keypre[1]&&!keypre[2]&&!keypre[3])
{
switch(keypre[0])
{
case PLU30:numeric++;
case PLU29:numeric++;
case PLU28:numeric++;
case PLU27:numeric++;
case PLU26:numeric++;
case PLU25:numeric++;
case PLU24:numeric++;
case PLU23:numeric++;
case PLU22:numeric++;
case PLU21:numeric++;
case PLU20:numeric++;
case PLU19:numeric++;
case PLU18:numeric++;
case PLU17:numeric++;
case PLU16:numeric++;
case PLU15:numeric++;
case PLU14:numeric++;
case PLU13:numeric++;
case PLU12:numeric++;
case PLU11:numeric++;
case PLU10:numeric++;
case PLU9:numeric++;
case PLU8:numeric++;
case PLU7:numeric++;
case PLU6:numeric++;
case PLU5:numeric++;
case PLU4:numeric++;
case PLU3:numeric++;
case PLU2:numeric++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -