From 865d4f943522ffc4b17cb1adbc9ce350ff301fb8 Mon Sep 17 00:00:00 2001 From: Anurag Date: Sun, 6 Sep 2026 16:38:55 +0530 Subject: [PATCH] Added Tinfilling program --- Readme.txt | 1 - .../4x4_key.LST | 106 + .../4x4_key.OBJ | Bin 0 -> 2570 bytes .../4x4_key.c | 81 + .../4x4_key.h | 1 + .../ADC_AD7780.C | 87 + .../ADC_AD7780.LST | 112 + .../ADC_AD7780.OBJ | Bin 0 -> 7471 bytes .../ADC_AD7780.h | 6 + .../ADC_HX711.C | 201 + .../ADC_HX711.LST | 230 ++ .../ADC_HX711.OBJ | Bin 0 -> 325 bytes .../ADC_HX711.h | 17 + .../IAP.c | 249 ++ .../IAP.h | 14 + .../Notes.txt | 35 + .../Tin_fill_4x4_key_36Recipe_ad7780_55WD.plg | 45 + ..._fill_4x4_key_36Recipe_ad7780_55WD_default | Bin 0 -> 165104 bytes ...l_4x4_key_36Recipe_ad7780_55WD_default.M51 | 3587 +++++++++++++++++ ...l_4x4_key_36Recipe_ad7780_55WD_default.hex | 1303 ++++++ ...l_4x4_key_36Recipe_ad7780_55WD_default.lnp | 9 + ...l_4x4_key_36Recipe_ad7780_55WD_default.plg | 35 + ...key_36Recipe_ad7780_55WD_default_abort.hex | 1303 ++++++ .../desktop.ini | 2 + .../eeprom.LST | 258 ++ .../eeprom.OBJ | Bin 0 -> 18204 bytes .../eeprom.c | 228 ++ .../eeprom.h | 72 + .../fill.uvopt | 1681 ++++++++ .../fill.uvproj | 400 ++ .../fill_uvopt.bak | 1681 ++++++++ .../fill_uvproj.bak | 400 ++ .../keyboard4x4.c | 52 + .../keyboard4x4.h | 25 + .../main.LST | 3447 ++++++++++++++++ .../main.OBJ | Bin 0 -> 160457 bytes .../main.c | 3295 +++++++++++++++ .../matrix_key.c | 205 + .../matrix_key.h | 22 + .../ser_disp.LST | 180 + .../ser_disp.OBJ | Bin 0 -> 11655 bytes .../ser_disp.c | 153 + .../ser_disp.h | 6 + .../utility.LST | 86 + .../utility.OBJ | Bin 0 -> 6917 bytes .../utility.c | 61 + .../utility.h | 6 + 47 files changed, 19681 insertions(+), 1 deletion(-) delete mode 100644 Readme.txt create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.C create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.C create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/IAP.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/IAP.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Notes.txt create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD.plg create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.M51 create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.hex create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.lnp create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.plg create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default_abort.hex create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/desktop.ini create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvopt create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvproj create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvopt.bak create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvproj.bak create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.h create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.LST create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.OBJ create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.c create mode 100644 Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.h diff --git a/Readme.txt b/Readme.txt deleted file mode 100644 index 9dbfeee..0000000 --- a/Readme.txt +++ /dev/null @@ -1 +0,0 @@ -Some text \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.LST b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.LST new file mode 100644 index 0000000..8856ed8 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.LST @@ -0,0 +1,106 @@ +C51 COMPILER V9.60.7.0 4X4_KEY 07/10/2026 17:02:31 PAGE 1 + + +C51 COMPILER V9.60.7.0, COMPILATION OF MODULE 4X4_KEY +OBJECT MODULE PLACED IN 4x4_key.OBJ +COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 4x4_key.c BROWSE DEBUG OBJECTEXTEND + +line level source + + 1 //#include //including sfr registers for ports of the controller + 2 //#include + 3 //#include + 4 + 5 //#include + 6 #include + 7 #include + 8 #include <4x4_key.h> + 9 + 10 //Keypad Connections + 11 sbit R1 = P0^0; + 12 sbit R2 = P0^1; + 13 sbit R3 = P0^2; + 14 sbit R4 = P0^3; + 15 sbit C1 = P0^4; + 16 sbit C2 = P0^5; + 17 sbit C3 = P0^6; + 18 sbit C4 = P0^7; + 19 //============================================================================== + 20 unsigned char Read_Keypad(void) + 21 { + 22 1 C1=1; + 23 1 C2=1; + 24 1 C3=1; + 25 1 C4=1; + 26 1 R1=0; + 27 1 R2=1; + 28 1 R3=1; + 29 1 R4=1; + 30 1 /*if(C1==0){delay(100);while(C1==0);return '7';} + 31 1 if(C2==0){delay(100);while(C2==0);return '8';} + 32 1 if(C3==0){delay(100);while(C3==0);return '9';} + 33 1 if(C4==0){delay(100);while(C4==0);return 'C';} */ + 34 1 + 35 1 if(C1==0)return 0x01; + 36 1 if(C2==0)return 0x02; + 37 1 if(C3==0)return 0x03; + 38 1 if(C4==0)return 'A'; + 39 1 R1=1; + 40 1 R2=0; + 41 1 R3=1; + 42 1 R4=1; + 43 1 /*if(C1==0){delay(100);while(C1==0);return '4';} + 44 1 if(C2==0){delay(100);while(C2==0);return '5';} + 45 1 if(C3==0){delay(100);while(C3==0);return '6';} + 46 1 if(C4==0){delay(100);while(C4==0);return 'B';} */ + 47 1 + 48 1 if(C1==0)return 0x04; + 49 1 if(C2==0)return 0x05; + 50 1 if(C3==0)return 0x06; + 51 1 if(C4==0)return 'B'; + 52 1 R1=1; + 53 1 R2=1; + 54 1 R3=0; + 55 1 R4=1; + C51 COMPILER V9.60.7.0 4X4_KEY 07/10/2026 17:02:31 PAGE 2 + + 56 1 /*if(C1==0){delay(100);while(C1==0);return '1';} + 57 1 if(C2==0){delay(100);while(C2==0);return '2';} + 58 1 if(C3==0){delay(100);while(C3==0);return '3';} + 59 1 if(C4==0){delay(100);while(C4==0);return 'A';} */ + 60 1 + 61 1 if(C1==0)return 0x07; + 62 1 if(C2==0)return 0x08; + 63 1 if(C3==0)return 0x09; + 64 1 if(C4==0)return 'C'; + 65 1 R1=1; + 66 1 R2=1; + 67 1 R3=1; + 68 1 R4=0; + 69 1 /*if(C1==0){delay(100);while(C1==0);return '*';} + 70 1 if(C2==0){delay(100);while(C2==0);return '0';} + 71 1 if(C3==0){delay(100);while(C3==0);return '#';} + 72 1 if(C4==0){delay(100);while(C4==0);return 'D';} */ + 73 1 + 74 1 if(C1==0)return '*'; + 75 1 if(C2==0)return 0x00; + 76 1 if(C3==0)return '#'; + 77 1 if(C4==0)return 'D'; + 78 1 + 79 1 return 'x'; + 80 1 } + 81 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 139 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.OBJ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..e956f8d8bd883213409b62f36c6e31d45cc41958 GIT binary patch literal 2570 zcma)8TW=dh6h6CaHy1ZID7iJEmYuXsKvA7IiGf@tNp^rla~3YSLj z|6JKCnWSPS3u*z1jBB?nZfI zcYmU!H|8j<={{-+uZ7K2a{VvukFEe|#J}{E`XcE}B$JFL*q4qbBKB)f`(71q5cw4E z7v1gTWcqca6Dg?8j+lrq2Cwh~46o0ek0;H<>eAA>8S#54XwY{-i!;aGNxCZf z>z2>ORO-j|llp1>?EIj9Sg+NO{KrOB3;0irsvhv48dW3UKQpS)K>gs{@q2{dEBu#) zKL&sO@Z64X5&l-;ZxjBw@YieSBLBGXlkf+HKM|5nNng%YyuhBBi0@HK{_zv9#W+?*9(>-8`qQFf=YgDEgE?&K62b>Wi- zPf!Ezh0Wh(E!u2Y4AMlh3V-61oa$^+vI8MJWXU1eYRNGd zpKOV literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.c new file mode 100644 index 0000000..10229e0 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.c @@ -0,0 +1,81 @@ +//#include //including sfr registers for ports of the controller +//#include +//#include + +//#include +#include +#include +#include <4x4_key.h> + +//Keypad Connections +sbit R1 = P0^0; +sbit R2 = P0^1; +sbit R3 = P0^2; +sbit R4 = P0^3; +sbit C1 = P0^4; +sbit C2 = P0^5; +sbit C3 = P0^6; +sbit C4 = P0^7; +//============================================================================== +unsigned char Read_Keypad(void) +{ + C1=1; + C2=1; + C3=1; + C4=1; + R1=0; + R2=1; + R3=1; + R4=1; + /*if(C1==0){delay(100);while(C1==0);return '7';} + if(C2==0){delay(100);while(C2==0);return '8';} + if(C3==0){delay(100);while(C3==0);return '9';} + if(C4==0){delay(100);while(C4==0);return 'C';} */ + + if(C1==0)return 0x01; + if(C2==0)return 0x02; + if(C3==0)return 0x03; + if(C4==0)return 'A'; + R1=1; + R2=0; + R3=1; + R4=1; + /*if(C1==0){delay(100);while(C1==0);return '4';} + if(C2==0){delay(100);while(C2==0);return '5';} + if(C3==0){delay(100);while(C3==0);return '6';} + if(C4==0){delay(100);while(C4==0);return 'B';} */ + + if(C1==0)return 0x04; + if(C2==0)return 0x05; + if(C3==0)return 0x06; + if(C4==0)return 'B'; + R1=1; + R2=1; + R3=0; + R4=1; + /*if(C1==0){delay(100);while(C1==0);return '1';} + if(C2==0){delay(100);while(C2==0);return '2';} + if(C3==0){delay(100);while(C3==0);return '3';} + if(C4==0){delay(100);while(C4==0);return 'A';} */ + + if(C1==0)return 0x07; + if(C2==0)return 0x08; + if(C3==0)return 0x09; + if(C4==0)return 'C'; + R1=1; + R2=1; + R3=1; + R4=0; + /*if(C1==0){delay(100);while(C1==0);return '*';} + if(C2==0){delay(100);while(C2==0);return '0';} + if(C3==0){delay(100);while(C3==0);return '#';} + if(C4==0){delay(100);while(C4==0);return 'D';} */ + + if(C1==0)return '*'; + if(C2==0)return 0x00; + if(C3==0)return '#'; + if(C4==0)return 'D'; + + return 'x'; +} + diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.h b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.h new file mode 100644 index 0000000..48d9ae1 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/4x4_key.h @@ -0,0 +1 @@ +unsigned char Read_Keypad(void); \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.C b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.C new file mode 100644 index 0000000..990f504 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.C @@ -0,0 +1,87 @@ +/*this is the pgm for ADC 7780 using SPI Protocol*/ + +//#pragma ot(9,size) +//#pragma nointpromote +//#include +//#include +//#include + +//#include +#include + +#include +#include +#include + +#include +#include +#include + +//----------------------------------------------------------------------------- +sbit clk = P3^3; +sbit dout = P3^2; + +sbit PDRST = P3^4; +//----------------------------------------------------------------------------- +extern unsigned char data Adc_Value_LSB,Adc_Value_MSB,Adc_Value_MLSB,Status_Bits; +extern unsigned int idata adc_val,filter_val; +extern bit Adc_Data_Ready,Adc_Status_bit73; + +unsigned int data Adc_Value; +extern bit adc_pol,rd_ok; +//-------------------------------------------------------------------------- +void init_adc_AD7780(void) +{ + PDRST = 0; + delay(5); + PDRST = 1; +} +//----------------------------------------------------------------------------- +unsigned char Read_Adc_AD7780(void) +{ + unsigned char dat=0; + char i; + for(i=0;i<8;i++) + { + dat <<= 1; + clk=1; + nop(); + clk=0; + nop(); + if(dout) dat |= 0x01; + else dat |= 0x00; + rst_wdt(); + } + clk=1; + return(dat); +} +//------------------------------------------------------------------------- +void Get_Adc_Result_AD7780(void) +{ + if(Adc_Data_Ready) + { + Adc_Value_MSB = Read_Adc_AD7780(); + Adc_Value_MLSB = Read_Adc_AD7780(); + Adc_Value_LSB = Read_Adc_AD7780(); + + if((Adc_Value_MSB & 0x80)==0x80)adc_pol=0; + else adc_pol=1; + + Adc_Value_LSB = (Adc_Value_MLSB << 2 ) + (Adc_Value_LSB >> 6); + Adc_Value_MSB = (Adc_Value_MSB << 2 ) + (Adc_Value_MLSB >> 6); + Adc_Value = ((unsigned int)Adc_Value_MSB * 0x100) + Adc_Value_LSB; + rst_wdt(); + Status_Bits = Read_Adc_AD7780(); + Adc_Data_Ready=0; + EX0 = 1; + } + if(Status_Bits == 73) + { + adc_val = Adc_Value; + //filter_val = adc_val; //No filteration + Adc_Status_bit73 = 1; + rd_ok=1; + } +} +//------------------------------------------------------------------------- + diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.LST b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.LST new file mode 100644 index 0000000..8b4c976 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.LST @@ -0,0 +1,112 @@ +C51 COMPILER V9.60.7.0 ADC_AD7780 07/10/2026 17:02:31 PAGE 1 + + +C51 COMPILER V9.60.7.0, COMPILATION OF MODULE ADC_AD7780 +OBJECT MODULE PLACED IN ADC_AD7780.OBJ +COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADC_AD7780.C BROWSE DEBUG OBJECTEXTEND + +line level source + + 1 /*this is the pgm for ADC 7780 using SPI Protocol*/ + 2 + 3 //#pragma ot(9,size) + 4 //#pragma nointpromote + 5 //#include + 6 //#include + 7 //#include + 8 + 9 //#include + 10 #include + 11 + 12 #include + 13 #include + 14 #include + 15 + 16 #include + 17 #include + 18 #include + 19 + 20 //----------------------------------------------------------------------------- + 21 sbit clk = P3^3; + 22 sbit dout = P3^2; + 23 + 24 sbit PDRST = P3^4; + 25 //----------------------------------------------------------------------------- + 26 extern unsigned char data Adc_Value_LSB,Adc_Value_MSB,Adc_Value_MLSB,Status_Bits; + 27 extern unsigned int idata adc_val,filter_val; + 28 extern bit Adc_Data_Ready,Adc_Status_bit73; + 29 + 30 unsigned int data Adc_Value; + 31 extern bit adc_pol,rd_ok; + 32 //-------------------------------------------------------------------------- + 33 void init_adc_AD7780(void) + 34 { + 35 1 PDRST = 0; + 36 1 delay(5); + 37 1 PDRST = 1; + 38 1 } + 39 //----------------------------------------------------------------------------- + 40 unsigned char Read_Adc_AD7780(void) + 41 { + 42 1 unsigned char dat=0; + 43 1 char i; + 44 1 for(i=0;i<8;i++) + 45 1 { + 46 2 dat <<= 1; + 47 2 clk=1; + 48 2 nop(); + 49 2 clk=0; + 50 2 nop(); + 51 2 if(dout) dat |= 0x01; + 52 2 else dat |= 0x00; + 53 2 rst_wdt(); + 54 2 } + 55 1 clk=1; + C51 COMPILER V9.60.7.0 ADC_AD7780 07/10/2026 17:02:31 PAGE 2 + + 56 1 return(dat); + 57 1 } + 58 //------------------------------------------------------------------------- + 59 void Get_Adc_Result_AD7780(void) + 60 { + 61 1 if(Adc_Data_Ready) + 62 1 { + 63 2 Adc_Value_MSB = Read_Adc_AD7780(); + 64 2 Adc_Value_MLSB = Read_Adc_AD7780(); + 65 2 Adc_Value_LSB = Read_Adc_AD7780(); + 66 2 + 67 2 if((Adc_Value_MSB & 0x80)==0x80)adc_pol=0; + 68 2 else adc_pol=1; + 69 2 + 70 2 Adc_Value_LSB = (Adc_Value_MLSB << 2 ) + (Adc_Value_LSB >> 6); + 71 2 Adc_Value_MSB = (Adc_Value_MSB << 2 ) + (Adc_Value_MLSB >> 6); + 72 2 Adc_Value = ((unsigned int)Adc_Value_MSB * 0x100) + Adc_Value_LSB; + 73 2 rst_wdt(); + 74 2 Status_Bits = Read_Adc_AD7780(); + 75 2 Adc_Data_Ready=0; + 76 2 EX0 = 1; + 77 2 } + 78 1 if(Status_Bits == 73) + 79 1 { + 80 2 adc_val = Adc_Value; + 81 2 //filter_val = adc_val; //No filteration + 82 2 Adc_Status_bit73 = 1; + 83 2 rd_ok=1; + 84 2 } + 85 1 } + 86 //------------------------------------------------------------------------- + 87 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 164 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 2 2 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.OBJ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..ebd54fb213aea8f0afa91826e34803c10c07f85d GIT binary patch literal 7471 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 literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.h b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.h new file mode 100644 index 0000000..81bca4a --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_AD7780.h @@ -0,0 +1,6 @@ + +//extern void Get_Adc_Result(void); +//extern void init_adc(void); + +extern void Get_Adc_Result_AD7780(void); +extern void init_adc_AD7780(void); \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.C b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.C new file mode 100644 index 0000000..011cce8 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.C @@ -0,0 +1,201 @@ +/*this is the pgm for ADC 7780 using SPI Protocol*/ +#if defined( _HX711 ) +//#pragma ot(9,size) +//#pragma nointpromote +//#include +//#include +// #include +#include + + +#include +#include +#include + +#include +#include +#include +//----------------------------------------------------------------------------- +sbit dout = P3^2; +//sbit clk = P3^4; +sbit clk = P3^3; +sbit PDRST = P3^5; + +//sbit SPEED = P1^7; +//----------------------------------------------------------------------------- +extern unsigned char data Adc_Value_LSB,Adc_Value_MSB,Adc_Value_MLSB,Status_Bits; +extern unsigned int idata filter_val; +extern unsigned int idata adc_val; +extern bit Adc_Data_Ready,Adc_Status_bit73; + +unsigned int data Temp_Adc_Value; +extern bit adc_pol,rd_ok; +//unsigned char set_gain=1,GAIN=1; +//-------------------------------------------------------------------------- +unsigned char Read_Adc_HX711(void); +//-------------------------------------------------------------------------- +//void init_adc(void) +void init_adc_HX711(void) +{ + unsigned char i; + + /*if(set_gain < 64) GAIN = 2; //32, channel B + else if(set_gain < 128) GAIN = 3; //64, channel A + else GAIN = 1; //128, channel A */ + + PDRST = 0; + delay(5); + + /*SPEED=0;//10 SPS + //SPEED=1;//80 SPS + GAIN=1;//0mV to +19.5mV (Gain = 128) + //GAIN=0; //0mV to +39mV (Gain = 64)*/ + + PDRST = 1; + delay(5); + + clk=0; + nop(); + nop(); + delay(5); + + //for(i=0;i<=26;i++) + //for(i=0;i<(24+GAIN);i++) + for(i=0;i<25;i++) + { + clk=1; + nop(); + clk=0; + nop(); + rst_wdt(); + } + delay(500); +} +//----------------------------------------------------------------------------- +unsigned char Read_Adc_HX711(void) +{ + unsigned char dat=0; + char i; + for(i=0;i<8;i++) + { + dat <<= 1; + clk=1; + nop(); + clk=0; + nop(); + if(dout)dat |= 0x01; + else dat |= 0x00; + rst_wdt(); + } + //clk=1; + return(dat); +} +//------------------------------------------------------------------------- +//void Get_Adc_Result(void) +void Get_Adc_Result_HX711(void) +{ + if(Adc_Data_Ready) + { + Adc_Value_MSB = Read_Adc_HX711(); + Adc_Value_MLSB = Read_Adc_HX711(); + Adc_Value_LSB = Read_Adc_HX711(); + + if((Adc_Value_MSB & 0x80)==0x80)adc_pol=1; + else adc_pol=0; + + /*Adc_Value_LSB = (Adc_Value_MLSB << 2 ) + (Adc_Value_LSB >> 6); + Adc_Value_MSB = (Adc_Value_MSB << 2 ) + (Adc_Value_MLSB >> 6);*/ + Adc_Value_LSB = (Adc_Value_MLSB << 1 ) + (Adc_Value_LSB >> 7); + Adc_Value_MSB = (Adc_Value_MSB << 1 ) + (Adc_Value_MLSB >> 7); + Temp_Adc_Value = ((unsigned int)Adc_Value_MSB * 0x100) + Adc_Value_LSB; + //Status_Bits = Read_Adc(); + Adc_Data_Ready=0; + //EX0 = 1; + } + //filter_val = Temp_Adc_Value; + adc_val = Temp_Adc_Value; + rd_ok=1; +/* if(Status_Bits == 73) + { + adc_val = Adc_Value; + filter_val = adc_val; //No filteration + Adc_Status_bit73 = 1; + }*/ + clk=1; + nop(); + clk=0; +} +//------------------------------------------------------------------------- +/*unsigned char Read_Adc(void) +{ + unsigned char dat=0; + char i; + Temp_Adc_Value=0; + + clk=0; + nop(); + //delay(1); + + for(i=0;i<24;i++) + { + clk=1; + nop(); + //delay(1); + + clk=0; + nop(); + //delay(1); + if(i==0) + { + if(dout) dat |= 0x01; + else dat |= 0x00; + } + if(i>1 && i<18) + { + Temp_Adc_Value <<= 1; + if(dout) Temp_Adc_Value |= 0x01; + else Temp_Adc_Value |= 0x00; + } + //rst_wdt(); + } + //clk=1; + return(dat); +}*/ +//------------------------------------------------------------------------- +/*void Get_Adc_Result(void) +{ + clk=0; + nop(); + nop(); + //delay(5); + + //while(dout); + //Adc_Data_Ready=1; + + + if(Adc_Data_Ready) + { + //Adc_Value_MSB = Read_Adc(); + //Adc_Value_MLSB = Read_Adc(); + //Adc_Value_LSB = Read_Adc(); + //Adc_Value_LSB = (Adc_Value_MLSB << 4 ) + (Adc_Value_LSB >> 4); + //Adc_Value_MSB = (Adc_Value_MSB << 4 ) + (Adc_Value_MLSB >> 4); + //Adc_Value = ((unsigned int)Adc_Value_MSB * 0x100) + Adc_Value_LSB; + //rst_wdt(); + Status_Bits = Read_Adc(); + adc_value = Temp_Adc_Value; + //adc_val = Adc_Value>>1; + //adc_val = (( ~( Adc_Value - 1 ) ) & 0xFFFF )>>1; + Adc_Data_Ready=0; + //EX0 = 1; + } + //if(Status_Bits == 73) + //{ + //adc_val = Adc_Value; + //filter_val = adc_val; //No filteration + // Adc_Status_bit73 = 1; + //} +} */ +//------------------------------------------------------------------------ + + #endif \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.LST b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.LST new file mode 100644 index 0000000..4dbcf27 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.LST @@ -0,0 +1,230 @@ +C51 COMPILER V9.60.7.0 ADC_HX711 07/10/2026 17:02:32 PAGE 1 + + +C51 COMPILER V9.60.7.0, COMPILATION OF MODULE ADC_HX711 +OBJECT MODULE PLACED IN ADC_HX711.OBJ +COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADC_HX711.C BROWSE DEBUG OBJECTEXTEND + +line level source + + 1 /*this is the pgm for ADC 7780 using SPI Protocol*/ + 2 #if defined( _HX711 ) + //#pragma ot(9,size) + //#pragma nointpromote + //#include + //#include + // #include + #include + + + #include + #include + #include + + #include + #include + #include + //----------------------------------------------------------------------------- + sbit dout = P3^2; + //sbit clk = P3^4; + sbit clk = P3^3; + sbit PDRST = P3^5; + + //sbit SPEED = P1^7; + //----------------------------------------------------------------------------- + extern unsigned char data Adc_Value_LSB,Adc_Value_MSB,Adc_Value_MLSB,Status_Bits; + extern unsigned int idata filter_val; + extern unsigned int idata adc_val; + extern bit Adc_Data_Ready,Adc_Status_bit73; + + unsigned int data Temp_Adc_Value; + extern bit adc_pol,rd_ok; + //unsigned char set_gain=1,GAIN=1; + //-------------------------------------------------------------------------- + unsigned char Read_Adc_HX711(void); + //-------------------------------------------------------------------------- + //void init_adc(void) + void init_adc_HX711(void) + { + unsigned char i; + + /*if(set_gain < 64) GAIN = 2; //32, channel B + else if(set_gain < 128) GAIN = 3; //64, channel A + else GAIN = 1; //128, channel A */ + + PDRST = 0; + delay(5); + + /*SPEED=0;//10 SPS + //SPEED=1;//80 SPS + GAIN=1;//0mV to +19.5mV (Gain = 128) + //GAIN=0; //0mV to +39mV (Gain = 64)*/ + + PDRST = 1; + delay(5); + C51 COMPILER V9.60.7.0 ADC_HX711 07/10/2026 17:02:32 PAGE 2 + + + clk=0; + nop(); + nop(); + delay(5); + + //for(i=0;i<=26;i++) + //for(i=0;i<(24+GAIN);i++) + for(i=0;i<25;i++) + { + clk=1; + nop(); + clk=0; + nop(); + rst_wdt(); + } + delay(500); + } + //----------------------------------------------------------------------------- + unsigned char Read_Adc_HX711(void) + { + unsigned char dat=0; + char i; + for(i=0;i<8;i++) + { + dat <<= 1; + clk=1; + nop(); + clk=0; + nop(); + if(dout)dat |= 0x01; + else dat |= 0x00; + rst_wdt(); + } + //clk=1; + return(dat); + } + //------------------------------------------------------------------------- + //void Get_Adc_Result(void) + void Get_Adc_Result_HX711(void) + { + if(Adc_Data_Ready) + { + Adc_Value_MSB = Read_Adc_HX711(); + Adc_Value_MLSB = Read_Adc_HX711(); + Adc_Value_LSB = Read_Adc_HX711(); + + if((Adc_Value_MSB & 0x80)==0x80)adc_pol=1; + else adc_pol=0; + + /*Adc_Value_LSB = (Adc_Value_MLSB << 2 ) + (Adc_Value_LSB >> 6); + Adc_Value_MSB = (Adc_Value_MSB << 2 ) + (Adc_Value_MLSB >> 6);*/ + Adc_Value_LSB = (Adc_Value_MLSB << 1 ) + (Adc_Value_LSB >> 7); + Adc_Value_MSB = (Adc_Value_MSB << 1 ) + (Adc_Value_MLSB >> 7); + Temp_Adc_Value = ((unsigned int)Adc_Value_MSB * 0x100) + Adc_Value_LSB; + //Status_Bits = Read_Adc(); + Adc_Data_Ready=0; + //EX0 = 1; + } + //filter_val = Temp_Adc_Value; + adc_val = Temp_Adc_Value; + rd_ok=1; + C51 COMPILER V9.60.7.0 ADC_HX711 07/10/2026 17:02:32 PAGE 3 + + /* if(Status_Bits == 73) + { + adc_val = Adc_Value; + filter_val = adc_val; //No filteration + Adc_Status_bit73 = 1; + }*/ + clk=1; + nop(); + clk=0; + } + //------------------------------------------------------------------------- + /*unsigned char Read_Adc(void) + { + unsigned char dat=0; + char i; + Temp_Adc_Value=0; + + clk=0; + nop(); + //delay(1); + + for(i=0;i<24;i++) + { + clk=1; + nop(); + //delay(1); + + clk=0; + nop(); + //delay(1); + if(i==0) + { + if(dout) dat |= 0x01; + else dat |= 0x00; + } + if(i>1 && i<18) + { + Temp_Adc_Value <<= 1; + if(dout) Temp_Adc_Value |= 0x01; + else Temp_Adc_Value |= 0x00; + } + //rst_wdt(); + } + //clk=1; + return(dat); + }*/ + //------------------------------------------------------------------------- + /*void Get_Adc_Result(void) + { + clk=0; + nop(); + nop(); + //delay(5); + + //while(dout); + //Adc_Data_Ready=1; + + + if(Adc_Data_Ready) + { + //Adc_Value_MSB = Read_Adc(); + //Adc_Value_MLSB = Read_Adc(); + C51 COMPILER V9.60.7.0 ADC_HX711 07/10/2026 17:02:32 PAGE 4 + + //Adc_Value_LSB = Read_Adc(); + //Adc_Value_LSB = (Adc_Value_MLSB << 4 ) + (Adc_Value_LSB >> 4); + //Adc_Value_MSB = (Adc_Value_MSB << 4 ) + (Adc_Value_MLSB >> 4); + //Adc_Value = ((unsigned int)Adc_Value_MSB * 0x100) + Adc_Value_LSB; + //rst_wdt(); + Status_Bits = Read_Adc(); + adc_value = Temp_Adc_Value; + //adc_val = Adc_Value>>1; + //adc_val = (( ~( Adc_Value - 1 ) ) & 0xFFFF )>>1; + Adc_Data_Ready=0; + //EX0 = 1; + } + //if(Status_Bits == 73) + //{ + //adc_val = Adc_Value; + //filter_val = adc_val; //No filteration + // Adc_Status_bit73 = 1; + //} + } */ + //------------------------------------------------------------------------ + + #endif + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = ---- ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.OBJ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ADC_HX711.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..093cad56390fc37530531fe8a4e75844b6360088 GIT binary patch literal 325 zcmXR2Vfe4@Y-*^WaO7LgU41 z5O5cDW#v8zJU=m5G;u6VCs~*eSrnfFw|@BESFy$T~hKi-3fHfR#Jm z)7drNCDhk9GTt7jkr`o9MS=+f0}~?yBTyX&P-$jLVo4%v1(+-Vkt|>$IX@+pH5DwH z0U}=|3WJ@ +//#include + +#include +#include +#include +#include +//********************************************************************************************************** +extern unsigned char idata EEPROM_block; +/*********************************************************************************************************** +* FlashFlex MCU SFR Memory Addresses +***********************************************************************************************************/ +//sfr SFCF = 0xB1; /*SuperFlash Configuration*/ +//sfr SFCM = 0xB2; /*SuperFlash Command*/ +//sfr SFAL = 0xB3; /*SuperFlash Address Low*/ +//sfr SFAH = 0xB4; /*SuperFlash Address High*/ +//sfr SFDT = 0xB5; /*SuperFlash Data*/ +//sfr SFST = 0xB6; /*SuperFlash Status*/ +/*********************************************************************************************************** +* FlashFlex MCU IAP Commands +***********************************************************************************************************/ +#define SFCM_SE 0x0B; /*Sector-Erase IAP cmd*/ +#define SFCM_VB 0x0C; /*Byte-Verify IAP cmd*/ +#define SFCM_PB 0x0E; /*Byte-Program IAP cmd*/ +/*********************************************************************************************************** +* Global Variable Definition +***********************************************************************************************************/ +const unsigned short int BLK1_DST_ADDR = 0x1000; +/*SST89x516RDx destination address (in the other on-chip flash memory block) +where data will be written to, which is above BSL code space. +Please comment out this line and uncomment the following line if SST89x58RDx is used*/ +/*const unsigned short int BLK1_DST_ADDR = 0x0F000; */ +/*SST89x58RDx destination address (in the other on-chip flash memory block) +where data will be written to, which is above BSL code space. +Please comment out this line and uncomment the previous line if SST89x516RDx is used*/ +const unsigned char SECT_SIZE = 0x80; /*number of bytes in a sector*/ +unsigned char ErrorCode; /*show the result of the operation*/ +//********************************************************************************************************* +/*©2008 Silicon Storage Technology, Inc. S72048-03-000 8/08 +Application Note +FlashFlex Microcontroller +In-Application Programming Example Using C +3*/ +/*********************************************************************************************************** +* Function Prototype +***********************************************************************************************************/ +//void sector_erase(unsigned short int dataAddr); +//void byte_program(unsigned short int dataAddr, unsigned char dataByte); +//unsigned char byte_verify(unsigned short int dataAddr); +int ready(); +void error(); +/*********************************************************************************************************** +* MAIN PROGRAM +* To program a sector of data bytes (starting from 0, increment by 1) +* into block 1, starting address is BLK1_DST_ADDR. +* When the IAP is completed successfully, ErrorCode is 0. Otherwise, +* ErrorCode is 1. +*********************************************************************************************************/ +void EEPROM_copy_to_sectors(unsigned short int dataAddr, unsigned char EEdataByteAddr) +{ + //unsigned short int destAddr = BLK1_DST_ADDR; + unsigned short int destAddr = dataAddr; + unsigned char byteCnt ; //byte count/ + unsigned char origData; //store the data byte for IAP operation + unsigned char verifyData; //verify the data byte + unsigned char sectorNo=0; //each sector 128 bytes + +for(sectorNo=0; sectorNo<8; sectorNo++) + { + sector_erase(destAddr); //erase sector area before writing there + origData = 0; + if(sectorNo==0) {EEPROM_block = Block_0;EEdataByteAddr=0;} + else if(sectorNo==1) {EEPROM_block = Block_0;} + else if(sectorNo==2) {EEPROM_block = Block_1;EEdataByteAddr=0;} + else if(sectorNo==3) {EEPROM_block = Block_1;} + else if(sectorNo==4) {EEPROM_block = Block_2;EEdataByteAddr=0;} + else if(sectorNo==5) {EEPROM_block = Block_2;} + else if(sectorNo==6) {EEPROM_block = Block_3;EEdataByteAddr=0;} + else if(sectorNo==7) {EEPROM_block = Block_3;} + rst_wdt(); + for(byteCnt=0; byteCnt>8; /*load high order address byte*/ + SFAL = destAddr; /*load low order address byte */ + SFCM = SFCM_SE; /*issue sector erase command */ + if(!ready()) error(); + return; +} +//********************************************************************************************************* +/*©2008 Silicon Storage Technology, Inc. S72048-03-000 8/08 +4 +Application Note +FlashFlex Microcontroller +In-Application Programming Example Using C */ +/*********************************************************************************************************** +* Byte-Program Subroutine +***********************************************************************************************************/ +void byte_program(unsigned short int dataAddr, unsigned char dataByte) +{ + unsigned short int destAddr = dataAddr; + SFCF = SFCF | 0x40; /*enable IAP */ + SFAH = destAddr>>8; /*load high order address byte*/ + SFAL = destAddr; /*load low order address byte */ + SFDT = dataByte; /*load data to be programmed */ + SFCM = SFCM_PB; /*issue byte program command */ + if(!ready()) error(); + return; +} +/*********************************************************************************************************** +* Byte-Verify Subroutine +***********************************************************************************************************/ +unsigned char byte_verify(unsigned short int dataAddr) +{ + unsigned short int destAddr = dataAddr; + unsigned char readByte; + SFCF = SFCF | 0x40; /*enable IAP */ + SFAH = destAddr>>8; /*load high order address byte*/ + SFAL = destAddr; /*load low order address byte */ + SFCM = SFCM_VB; /*issue byte verify command */ + readByte = SFDT; + SFCF = SFCF & 0xBF; /*turn off IAP*/ + SFDT = 0; + return readByte; +} +/*********************************************************************************************************** +* Ready Subroutine +* +* Purpose: To check if the IAP operation is completed. +* When it is done, turn off IAP configuration. +***********************************************************************************************************/ +int ready() +{ + unsigned long int TimeOut = 0; + while (TimeOut < 100000) + { + if ((SFST&4) == 0) /* Check if IAP is done */ + { /* IAP is done */ + SFCF = SFCF & 0xBF; /* turn off IAP*/ + SFDT = 0; /* any value other than 0x55 */ + return 1; /* IAP operation is completed*/ + } + TimeOut++; + } + SFCF = SFCF & 0xBF; /*turn off IAP*/ + SFDT = 0; /*any value other than 0x55*/ + return 0; /*IAP operation is NOT completed before time out*/ +} +//******************************************************************************************************** +/*©2008 Silicon Storage Technology, Inc. S72048-03-000 8/08 +Application Note +FlashFlex Microcontroller +In-Application Programming Example Using C +5*/ +/*********************************************************************************************************** +* Error Function +***********************************************************************************************************/ +void error() +{ + disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + ErrorCode=1; /*IAP error*/ + //while(1) /*software trap*/ + //{} + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode)return; + #endif +} +//********************************************************************************************************** +void sectors_copy_to_EEPROM(unsigned short int dataAddr, unsigned char EEdataByteAddr) +{ + //unsigned short int destAddr = BLK1_DST_ADDR; + unsigned short int destAddr = dataAddr; + unsigned char byteCnt ; //byte count/ + unsigned char verifyData; //verify the data byte + unsigned char sectorNo=0; //each sector 128 bytes + +for(sectorNo=0; sectorNo<8; sectorNo++) + { + if(sectorNo==0) {EEPROM_block = Block_0;EEdataByteAddr=0;} + else if(sectorNo==1) {EEPROM_block = Block_0;} + else if(sectorNo==2) {EEPROM_block = Block_1;EEdataByteAddr=0;} + else if(sectorNo==3) {EEPROM_block = Block_1;} + else if(sectorNo==4) {EEPROM_block = Block_2;EEdataByteAddr=0;} + else if(sectorNo==5) {EEPROM_block = Block_2;} + else if(sectorNo==6) {EEPROM_block = Block_3;EEdataByteAddr=0;} + else if(sectorNo==7) {EEPROM_block = Block_3;} + rst_wdt(); + for(byteCnt=0; byteCnt + +
+

µVision Build Log

+

Project:

+E:\FILLTRONICS\CHECKING POGRAMS\UNDER GOING PROJECTS\New folder\Tin_fill_ 4x4-&_6Key_8digit_new_keyboard_ffd_36_recipe_2speed_HX711_AD7780 - 55wd\fill.uvproj +Project File Date: 07/24/2023 + +

Output:

+Build target 'Target 1' +compiling main.c... +compiling ser_disp.c... +compiling utility.c... +compiling eeprom.c... +compiling 4x4_key.c... +compiling ADC_AD7780.C... +compiling ADC_HX711.C... +linking... +Program Size: data=185.1 xdata=0 code=19562 +creating hex file from "Tin_fill_4x4_key_36Recipe_ad7780_55WD"... +"Tin_fill_4x4_key_36Recipe_ad7780_55WD" - 0 Error(s), 0 Warning(s). +Build target 'Target 1' +compiling main.c... +compiling ser_disp.c... +compiling utility.c... +compiling eeprom.c... +compiling 4x4_key.c... +compiling ADC_AD7780.C... +compiling ADC_HX711.C... +linking... +Program Size: data=185.1 xdata=0 code=19562 +creating hex file from "Tin_fill_4x4_key_36Recipe_ad7780_55WD"... +"Tin_fill_4x4_key_36Recipe_ad7780_55WD" - 0 Error(s), 0 Warning(s). +Build target 'Target 1' +compiling main.c... +compiling ser_disp.c... +compiling utility.c... +compiling eeprom.c... +compiling 4x4_key.c... +compiling ADC_AD7780.C... +compiling ADC_HX711.C... +linking... +Program Size: data=185.1 xdata=0 code=19562 +creating hex file from "Tin_fill_4x4_key_36Recipe_ad7780_55WD_default"... +"Tin_fill_4x4_key_36Recipe_ad7780_55WD_default" - 0 Error(s), 0 Warning(s). diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default new file mode 100644 index 0000000000000000000000000000000000000000..1642ff11694e3055ea7b8571949bb3ddccb8655e GIT binary patch literal 165104 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Ì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 literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.M51 b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.M51 new file mode 100644 index 0000000..95b2a8c --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.M51 @@ -0,0 +1,3587 @@ +BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 1 + + +BL51 BANKED LINKER/LOCATER V6.22.4.0, INVOKED BY: +C:\KEIL\C51\BIN\BL51.EXE main.obj, ser_disp.obj, utility.obj, eeprom.obj, 4x4_key.obj, ADC_AD7780.obj, ADC_HX711.obj TO +>> Tin_fill_4x4_key_36Recipe_ad7780_55WD_default RAMSIZE (256) + + +MEMORY MODEL: SMALL + + +INPUT MODULES INCLUDED: + main.obj (MAIN) + ser_disp.obj (SER_DISP) + utility.obj (UTILITY) + eeprom.obj (EEPROM) + 4x4_key.obj (4X4_KEY) + ADC_AD7780.obj (ADC_AD7780) + ADC_HX711.obj (ADC_HX711) + C:\KEIL\C51\LIB\C51S.LIB (?C_STARTUP) + C:\KEIL\C51\LIB\C51S.LIB (?C?SCDIV) + C:\KEIL\C51\LIB\C51S.LIB (?C?CLDOPTR) + C:\KEIL\C51\LIB\C51S.LIB (?C?IMUL) + C:\KEIL\C51\LIB\C51S.LIB (?C?UIDIV) + C:\KEIL\C51\LIB\C51S.LIB (?C?LMUL) + C:\KEIL\C51\LIB\C51S.LIB (?C?ULDIV) + C:\KEIL\C51\LIB\C51S.LIB (?C?ULCMP) + C:\KEIL\C51\LIB\C51S.LIB (?C?ULSHR) + C:\KEIL\C51\LIB\C51S.LIB (?C?LSHL) + C:\KEIL\C51\LIB\C51S.LIB (?C?LLDIDATA) + C:\KEIL\C51\LIB\C51S.LIB (?C?LLDIDATA0) + C:\KEIL\C51\LIB\C51S.LIB (?C?LSTIDATA) + C:\KEIL\C51\LIB\C51S.LIB (?C?LSTKIDATA) + C:\KEIL\C51\LIB\C51S.LIB (ABS) + C:\KEIL\C51\LIB\C51S.LIB (?C_INIT) + + +LINK MAP OF MODULE: Tin_fill_4x4_key_36Recipe_ad7780_55WD_default (MAIN) + + + TYPE BASE LENGTH RELOCATION SEGMENT NAME + ----------------------------------------------------- + + * * * * * * * D A T A M E M O R Y * * * * * * * + REG 0000H 0008H ABSOLUTE "REG BANK 0" + DATA 0008H 0002H UNIT ?DT?ADC_AD7780 + IDATA 000AH 0010H UNIT _IDATA_GROUP_ + 001AH 0006H *** GAP *** + BIT 0020H.0 0004H.7 UNIT ?BI?MAIN + BIT 0024H.7 0000H.2 UNIT _BIT_GROUP_ + 0025H.1 0000H.7 *** GAP *** + DATA 0026H 0030H UNIT ?DT?MAIN + DATA 0056H 0019H UNIT _DATA_GROUP_ + IDATA 006FH 0054H UNIT ?ID?MAIN + IDATA 00C3H 0001H UNIT ?STACK + + * * * * * * * C O D E M E M O R Y * * * * * * * + CODE 0000H 0003H ABSOLUTE + CODE 0003H 0003H ABSOLUTE + CODE 0006H 0015H UNIT ?PR?ACK?EEPROM + CODE 001BH 0003H ABSOLUTE + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 2 + + + CODE 001EH 08A0H UNIT ?PR?CHECK_KEYPAD?MAIN + CODE 08BEH 07FFH UNIT ?PR?MENU?MAIN + CODE 10BDH 0695H UNIT ?PR?CHECK_VALUES?MAIN + CODE 1752H 0627H UNIT ?PR?SETTINGS?MAIN + CODE 1D79H 0353H UNIT ?PR?CHECK_SWITCH?MAIN + CODE 20CCH 0349H UNIT ?PR?READ_VALUES?MAIN + CODE 2415H 0347H UNIT ?PR?SYS_PARAMTS?MAIN + CODE 275CH 0270H UNIT ?PR?SELECT_MENU?MAIN + CODE 29CCH 0248H UNIT ?C?LIB_CODE + CODE 2C14H 0245H UNIT ?PR?LOAD_EEP_DEFAULTS?MAIN + CODE 2E59H 0207H UNIT ?PR?SELF_TEST?MAIN + CODE 3060H 01D5H UNIT ?PR?CAL?MAIN + CODE 3235H 016BH UNIT ?PR?CLEAR_CURRENT_CUMULATIVE_BATCH?MAIN + CODE 33A0H 015AH UNIT ?PR?DISPLAY_CURRENT_BATCH?MAIN + CODE 34FAH 0153H UNIT ?PR?MAIN?MAIN + CODE 364DH 013BH UNIT ?PR?DISPLAY_TOTAL_BATCH?MAIN + CODE 3788H 013BH UNIT ?PR?CLEAR_BATCH_CUMULATIVE?MAIN + CODE 38C3H 0116H UNIT ?PR?DISPLAY_VALUE?MAIN + CODE 39D9H 010EH UNIT ?PR?CAL_FIND?MAIN + CODE 3AE7H 00FFH UNIT ?PR?RECIPE_MENU?MAIN + CODE 3BE6H 00FFH UNIT ?PR?DISPLAY_CURRENT_CUMULATIVE?MAIN + CODE 3CE5H 00DCH UNIT ?PR?DISPLAY_TOTAL_CUMULATIVE?MAIN + CODE 3DC1H 00DCH UNIT ?C_INITSEG + CODE 3E9DH 00BDH UNIT ?PR?_RTC_READLONG?EEPROM + CODE 3F5AH 00BBH UNIT ?PR?DEFAULTS?MAIN + CODE 4015H 00BAH UNIT ?PR?FILTER?MAIN + CODE 40CFH 00AEH UNIT ?PR?PROCESS?MAIN + CODE 417DH 00ACH UNIT ?PR?CAL_RST?MAIN + CODE 4229H 009AH UNIT ?PR?_LONG2BCD?SER_DISP + CODE 42C3H 008CH UNIT ?C_C51STARTUP + CODE 434FH 008BH UNIT ?PR?READ_KEYPAD?4X4_KEY + CODE 43DAH 007EH UNIT ?PR?PWD?MAIN + CODE 4458H 0070H UNIT ?PR?_VAL_READ?MAIN + CODE 44C8H 0069H UNIT ?PR?_RTC_WRITELONG?EEPROM + CODE 4531H 0068H UNIT ?PR?GET_ADC_RESULT_AD7780?ADC_AD7780 + CODE 4599H 0066H UNIT ?PR?TARE_CHK?MAIN + CODE 45FFH 0066H UNIT ?PR?_BATCH2BCD?SER_DISP + CODE 4665H 0062H UNIT ?PR?ADCINT0_ISR?MAIN + CODE 46C7H 0061H UNIT ?PR?DISPLAY?SER_DISP + CODE 4728H 0060H UNIT ?PR?_INCDEC?MAIN + CODE 4788H 005BH UNIT ?PR?_BLINK?MAIN + CODE 47E3H 004CH UNIT ?CO?MAIN + CODE 482FH 004AH UNIT ?PR?_BCD2BIN?MAIN + CODE 4879H 0049H UNIT ?PR?TIMER1_ISR?MAIN + CODE 48C2H 0049H UNIT ?PR?CALIBRATE?MAIN + CODE 490BH 0045H UNIT ?PR?_BIN2BCD?MAIN + CODE 4950H 0040H UNIT ?PR?DISPLAY_NAME?SER_DISP + CODE 4990H 0040H UNIT ?PR?_ARR_CMP?UTILITY + CODE 49D0H 003DH UNIT ?PR?DISP_CHECK?MAIN + CODE 4A0DH 0038H UNIT ?PR?_READ_EEPROM?EEPROM + CODE 4A45H 0032H UNIT ?CO?SER_DISP + CODE 4A77H 0030H UNIT ?PR?_DELAY?UTILITY + CODE 4AA7H 0030H UNIT ?PR?READ_ADC_AD7780?ADC_AD7780 + CODE 4AD7H 002EH UNIT ?PR?INIT?MAIN + CODE 4B05H 002EH UNIT ?PR?_WRITE_EEPROM?EEPROM + CODE 4B33H 002DH UNIT ?PR?ZERO_TRACK?MAIN + CODE 4B60H 0026H UNIT ?PR?_READ_RTC?EEPROM + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 3 + + + CODE 4B86H 0024H UNIT ?PR?AVERAGE?MAIN + CODE 4BAAH 0024H UNIT ?PR?_WRITE_RTC?EEPROM + CODE 4BCEH 001FH UNIT ?PR?ADD_VALUES?MAIN + CODE 4BEDH 001FH UNIT ?PR?_WRITE_DATA?EEPROM + CODE 4C0CH 001DH UNIT ?PR?READ_DATA?EEPROM + CODE 4C29H 001CH UNIT ?PR?_ARR_CPY?UTILITY + CODE 4C45H 001BH UNIT ?PR?CLR_DISP?SER_DISP + CODE 4C60H 0018H UNIT ?PR?_DISP?SER_DISP + CODE 4C78H 0012H UNIT ?PR?_ABS?ABS + CODE 4C8AH 000FH UNIT ?PR?_BCD2INT?UTILITY + CODE 4C99H 000FH UNIT ?PR?START?EEPROM + CODE 4CA8H 000DH UNIT ?PR?STOP?EEPROM + CODE 4CB5H 000CH UNIT ?PR?INIT_ADC_AD7780?ADC_AD7780 + CODE 4CC1H 0007H UNIT ?PR?RST_WDT?UTILITY + + + +OVERLAY MAP OF MODULE: Tin_fill_4x4_key_36Recipe_ad7780_55WD_default (MAIN) + + +SEGMENT BIT_GROUP DATA_GROUP IDATA_GROUP + +--> CALLED SEGMENT START LENGTH START LENGTH START LENGTH +------------------------------------------------------------------------------------------------------- +?PR?ADCINT0_ISR?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?GET_ADC_RESULT_AD7780?ADC_AD7780 + +--> ?PR?ADD_VALUES?MAIN + +--> ?PR?AVERAGE?MAIN + +--> ?PR?FILTER?MAIN + +?PR?GET_ADC_RESULT_AD7780?ADC_AD7780 ----- ----- ----- ----- ----- ----- + +--> ?PR?READ_ADC_AD7780?ADC_AD7780 + +--> ?PR?RST_WDT?UTILITY + +?PR?READ_ADC_AD7780?ADC_AD7780 ----- ----- 0056H 0002H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +?PR?FILTER?MAIN 0024H.7 0000H.1 0056H 0001H ----- ----- + +--> ?PR?_ABS?ABS + +*** NEW ROOT *************************************************** + +?PR?TIMER1_ISR?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?READ_KEYPAD?4X4_KEY + +*** NEW ROOT *************************************************** + +?C_C51STARTUP ----- ----- ----- ----- ----- ----- + +--> ?PR?MAIN?MAIN + +--> ?C_INITSEG + +?PR?MAIN?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?INIT?MAIN + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?_DISP?SER_DISP + +--> ?PR?DISPLAY_NAME?SER_DISP + +--> ?PR?READ_VALUES?MAIN + +--> ?PR?_READ_EEPROM?EEPROM + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 4 + + + +--> ?PR?_DELAY?UTILITY + +--> ?PR?LOAD_EEP_DEFAULTS?MAIN + +--> ?PR?INIT_ADC_AD7780?ADC_AD7780 + +--> ?PR?CLR_DISP?SER_DISP + +--> ?PR?DISP_CHECK?MAIN + +--> ?PR?SELF_TEST?MAIN + +--> ?PR?PROCESS?MAIN + +--> ?PR?READ_KEYPAD?4X4_KEY + +--> ?PR?CHECK_KEYPAD?MAIN + +--> ?PR?CHECK_SWITCH?MAIN + +--> ?PR?CHECK_VALUES?MAIN + +--> ?PR?DISPLAY_VALUE?MAIN + +?PR?_DISP?SER_DISP ----- ----- 005DH 000FH ----- ----- + +--> ?PR?DISPLAY?SER_DISP + +?PR?DISPLAY?SER_DISP ----- ----- 006CH 0003H ----- ----- + +--> ?CO?SER_DISP + +--> ?PR?RST_WDT?UTILITY + +?PR?DISPLAY_NAME?SER_DISP ----- ----- 0058H 0001H ----- ----- + +--> ?CO?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?DISPLAY?SER_DISP + +?PR?_DELAY?UTILITY ----- ----- 0063H 0004H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +?PR?READ_VALUES?MAIN ----- ----- 005DH 0001H ----- ----- + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_WRITE_RTC?EEPROM + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?_READ_EEPROM?EEPROM + +--> ?CO?MAIN + +?PR?_READ_RTC?EEPROM ----- ----- 005EH 0001H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?ACK?EEPROM + +--> ?PR?_WRITE_DATA?EEPROM + +--> ?PR?START?EEPROM + +--> ?PR?READ_DATA?EEPROM + +--> ?PR?STOP?EEPROM + +?PR?ACK?EEPROM ----- ----- ----- ----- ----- ----- + +--> ?PR?START?EEPROM + +--> ?PR?_WRITE_DATA?EEPROM + +?PR?_WRITE_RTC?EEPROM ----- ----- 0060H 0002H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?ACK?EEPROM + +--> ?PR?_WRITE_DATA?EEPROM + +--> ?PR?STOP?EEPROM + +--> ?PR?_DELAY?UTILITY + +?PR?_READ_EEPROM?EEPROM ----- ----- 005EH 0002H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?START?EEPROM + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 5 + + + +--> ?PR?_WRITE_DATA?EEPROM + +--> ?PR?ACK?EEPROM + +--> ?PR?READ_DATA?EEPROM + +--> ?PR?STOP?EEPROM + +?PR?LOAD_EEP_DEFAULTS?MAIN ----- ----- 005BH 0002H ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?DEFAULTS?MAIN + +--> ?PR?_WRITE_EEPROM?EEPROM + +--> ?PR?_WRITE_RTC?EEPROM + +--> ?PR?_BLINK?MAIN + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?READ_VALUES?MAIN + +--> ?PR?CLR_DISP?SER_DISP + +?PR?DEFAULTS?MAIN ----- ----- ----- ----- ----- ----- + +--> ?CO?MAIN + +?PR?_WRITE_EEPROM?EEPROM ----- ----- 005DH 0002H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?START?EEPROM + +--> ?PR?_WRITE_DATA?EEPROM + +--> ?PR?ACK?EEPROM + +--> ?PR?STOP?EEPROM + +--> ?PR?_DELAY?UTILITY + +?PR?_BLINK?MAIN ----- ----- 005FH 0004H ----- ----- + +--> ?PR?_ARR_CPY?UTILITY + +--> ?PR?DISPLAY?SER_DISP + +--> ?PR?_DELAY?UTILITY + +?PR?CLR_DISP?SER_DISP ----- ----- ----- ----- ----- ----- + +--> ?PR?DISPLAY?SER_DISP + +?PR?INIT_ADC_AD7780?ADC_AD7780 ----- ----- ----- ----- ----- ----- + +--> ?PR?_DELAY?UTILITY + +?PR?DISP_CHECK?MAIN ----- ----- 0058H 0001H ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +?PR?SELF_TEST?MAIN 0025H.0 0000H.1 0058H 0002H ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_READ_EEPROM?EEPROM + +--> ?PR?_READ_RTC?EEPROM + +?PR?PROCESS?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?TARE_CHK?MAIN + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?ZERO_TRACK?MAIN + +--> ?PR?CAL_FIND?MAIN + +--> ?PR?CALIBRATE?MAIN + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BLINK?MAIN + + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 6 + + +?PR?CAL_FIND?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_WRITE_EEPROM?EEPROM + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?CLR_DISP?SER_DISP + +--> ?PR?CALIBRATE?MAIN + +?PR?CHECK_KEYPAD?MAIN ----- ----- 0058H 0002H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?PWD?MAIN + +--> ?PR?_ARR_CPY?UTILITY + +--> ?CO?MAIN + +--> ?PR?_ARR_CMP?UTILITY + +--> ?PR?RECIPE_MENU?MAIN + +--> ?PR?MENU?MAIN + +--> ?PR?CAL?MAIN + +--> ?PR?SETTINGS?MAIN + +--> ?PR?SYS_PARAMTS?MAIN + +--> ?PR?LOAD_EEP_DEFAULTS?MAIN + +--> ?PR?SELECT_MENU?MAIN + +--> ?PR?DISPLAY_TOTAL_CUMULATIVE?MAIN + +--> ?PR?DISPLAY_CURRENT_BATCH?MAIN + +--> ?PR?CLEAR_CURRENT_CUMULATIVE_BATCH?MAIN + +--> ?PR?DISPLAY_CURRENT_CUMULATIVE?MAIN + +--> ?PR?CLEAR_BATCH_CUMULATIVE?MAIN + +--> ?PR?DISPLAY_TOTAL_BATCH?MAIN + +--> ?PR?_WRITE_RTC?EEPROM + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?CLR_DISP?SER_DISP + +--> ?PR?_BIN2BCD?MAIN + +--> ?PR?_VAL_READ?MAIN + +--> ?PR?_BCD2BIN?MAIN + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_BCD2INT?UTILITY + +--> ?PR?_READ_EEPROM?EEPROM + +--> ?PR?READ_VALUES?MAIN + +?PR?PWD?MAIN ----- ----- 005AH 0001H ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_DELAY?UTILITY + +?PR?_ARR_CMP?UTILITY 0025H.0 0000H.1 005AH 0008H ----- ----- + +?PR?RECIPE_MENU?MAIN ----- ----- 005AH 0001H ----- ----- + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_DISP?SER_DISP + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_BCD2INT?UTILITY + +--> ?PR?_DELAY?UTILITY + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 7 + + + +--> ?PR?_WRITE_RTC?EEPROM + +?PR?MENU?MAIN 0025H.0 0000H.1 005AH 0003H ----- ----- + +--> ?PR?READ_VALUES?MAIN + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BIN2BCD?MAIN + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_VAL_READ?MAIN + +--> ?PR?_BCD2BIN?MAIN + +--> ?CO?MAIN + +--> ?PR?_WRITE_EEPROM?EEPROM + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_READ_EEPROM?EEPROM + +?PR?_BIN2BCD?MAIN ----- ----- 005DH 0002H ----- ----- + +--> ?PR?DISPLAY?SER_DISP + +?PR?_VAL_READ?MAIN ----- ----- 005DH 0002H ----- ----- + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_DELAY?UTILITY + +?PR?_BCD2BIN?MAIN ----- ----- 005DH 0002H ----- ----- + +?PR?CAL?MAIN ----- ----- 005BH 0001H ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?PROCESS?MAIN + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_BCD2BIN?MAIN + +?PR?SETTINGS?MAIN ----- ----- 005BH 0001H ----- ----- + +--> ?PR?READ_VALUES?MAIN + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BIN2BCD?MAIN + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_VAL_READ?MAIN + +--> ?PR?_BCD2BIN?MAIN + +--> ?PR?_WRITE_EEPROM?EEPROM + +--> ?PR?_READ_EEPROM?EEPROM + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?CO?MAIN + +?PR?SYS_PARAMTS?MAIN ----- ----- 005BH 0001H ----- ----- + +--> ?PR?READ_VALUES?MAIN + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_WRITE_RTC?EEPROM + +--> ?PR?_BIN2BCD?MAIN + +--> ?PR?_VAL_READ?MAIN + +--> ?PR?_BCD2BIN?MAIN + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 8 + + + +?PR?SELECT_MENU?MAIN ----- ----- 005AH 0001H ----- ----- + +--> ?PR?CLR_DISP?SER_DISP + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?SYS_PARAMTS?MAIN + +--> ?PR?SETTINGS?MAIN + +--> ?PR?CAL?MAIN + +--> ?PR?CAL_RST?MAIN + +--> ?PR?LOAD_EEP_DEFAULTS?MAIN + +--> ?PR?DISPLAY_CURRENT_CUMULATIVE?MAIN + +--> ?PR?DISPLAY_CURRENT_BATCH?MAIN + +--> ?PR?DISPLAY_TOTAL_BATCH?MAIN + +--> ?PR?CLEAR_BATCH_CUMULATIVE?MAIN + +?PR?CAL_RST?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?CLR_DISP?SER_DISP + +--> ?PR?_WRITE_EEPROM?EEPROM + +--> ?PR?READ_VALUES?MAIN + +?PR?DISPLAY_CURRENT_CUMULATIVE?MAIN ----- ----- 005BH 0002H ----- ----- + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_BCD2INT?UTILITY + +--> ?PR?_RTC_READLONG?EEPROM + +--> ?PR?_BIN2BCD?MAIN + +?PR?_RTC_READLONG?EEPROM ----- ----- 005DH 0001H 000AH 0010H + +--> ?PR?_READ_RTC?EEPROM + +?PR?DISPLAY_CURRENT_BATCH?MAIN ----- ----- 005BH 0002H ----- ----- + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BLINK?MAIN + +--> ?PR?_INCDEC?MAIN + +--> ?PR?_BCD2INT?UTILITY + +--> ?PR?_BIN2BCD?MAIN + +?PR?DISPLAY_TOTAL_BATCH?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BATCH2BCD?SER_DISP + +--> ?PR?_DELAY?UTILITY + +?PR?_BATCH2BCD?SER_DISP ----- ----- 005BH 0004H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?DISPLAY?SER_DISP + + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 9 + + +?PR?CLEAR_BATCH_CUMULATIVE?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BLINK?MAIN + +--> ?PR?_RTC_WRITELONG?EEPROM + +--> ?PR?_WRITE_RTC?EEPROM + +?PR?_RTC_WRITELONG?EEPROM ----- ----- 005BH 0005H 000AH 0004H + +--> ?PR?_WRITE_RTC?EEPROM + +?PR?DISPLAY_TOTAL_CUMULATIVE?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_RTC_READLONG?EEPROM + +--> ?PR?_LONG2BCD?SER_DISP + +--> ?PR?_DELAY?UTILITY + +?PR?_LONG2BCD?SER_DISP ----- ----- 005AH 0006H ----- ----- + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?DISPLAY?SER_DISP + +?PR?CLEAR_CURRENT_CUMULATIVE_BATCH?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_BLINK?MAIN + +--> ?PR?_RTC_WRITELONG?EEPROM + +--> ?PR?_WRITE_RTC?EEPROM + +?PR?CHECK_SWITCH?MAIN ----- ----- 0058H 0002H ----- ----- + +--> ?PR?READ_VALUES?MAIN + +--> ?PR?_DISP?SER_DISP + +--> ?PR?_DELAY?UTILITY + +--> ?PR?READ_KEYPAD?4X4_KEY + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?RST_WDT?UTILITY + +--> ?PR?PROCESS?MAIN + +?PR?CHECK_VALUES?MAIN ----- ----- ----- ----- ----- ----- + +--> ?PR?_DELAY?UTILITY + +--> ?PR?_READ_RTC?EEPROM + +--> ?PR?_WRITE_RTC?EEPROM + +--> ?PR?_RTC_READLONG?EEPROM + +--> ?PR?_RTC_WRITELONG?EEPROM + +--> ?PR?_DISP?SER_DISP + +?PR?DISPLAY_VALUE?MAIN ----- ----- 0058H 0002H ----- ----- + +--> ?PR?DISPLAY?SER_DISP + + + +SYMBOL TABLE OF MODULE: Tin_fill_4x4_key_36Recipe_ad7780_55WD_default (MAIN) + + VALUE TYPE NAME + ---------------------------------- + + ------- MODULE MAIN + C:0000H SYMBOL _ICE_DUMMY_ + C:3235H PUBLIC clear_current_cumulative_batch + B:0020H.0 PUBLIC process_flag + D:0090H PUBLIC P1 + B:0020H.1 PUBLIC grwt_ok + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 10 + + + D:00A0H PUBLIC P2 + C:40CFH PUBLIC process + I:006FH PUBLIC batch + C:4879H PUBLIC timer1_isr + I:0071H PUBLIC KeyPressed + B:00A8H.7 PUBLIC EA + C:4015H PUBLIC filter + C:3BE6H PUBLIC display_current_cumulative + D:00A8H PUBLIC IE + D:0026H PUBLIC hold_counter + B:0090H.3 PUBLIC waled + C:47FDH PUBLIC pass_F1 + B:0020H.2 PUBLIC rd_ok + I:0072H PUBLIC batch_count + C:47FFH PUBLIC pass_F2 + C:4801H PUBLIC pass_F3 + C:20CCH PUBLIC read_values + C:4790H PUBLIC _blink + C:4803H PUBLIC pass_F4 + C:3AE7H PUBLIC recipe_menu + C:49D0H PUBLIC disp_check + C:4805H PUBLIC pass_F5 + C:4807H PUBLIC pass_F6 + C:4809H PUBLIC pass_F7 + C:3788H PUBLIC clear_batch_cumulative + C:480BH PUBLIC pass_F8 + C:4914H PUBLIC _bin2bcd + C:482FH PUBLIC _bcd2bin + C:480DH PUBLIC pass_F9 + D:00B8H PUBLIC IP + C:275CH PUBLIC select_menu + B:0020H.3 PUBLIC shift_flag + C:4BCEH PUBLIC add_values + C:47F5H PUBLIC pswd10 + C:47F7H PUBLIC pswd11 + I:0074H PUBLIC start_delay + C:47F9H PUBLIC pswd12 + C:47FBH PUBLIC pswd13 + C:34FAH PUBLIC main + B:0020H.4 PUBLIC help_flag + I:0075H PUBLIC div_factor + C:3CE5H PUBLIC display_total_cumulative + B:0020H.5 PUBLIC tare_flag + D:002AH PUBLIC Adc_Value_LSB + D:002BH PUBLIC Adc_Value_MSB + C:48C2H PUBLIC calibrate + B:0020H.6 PUBLIC cal_flag + B:0020H.7 PUBLIC start_flag + I:0076H PUBLIC filter_val + D:002CH PUBLIC disp_data + I:0078H PUBLIC bset + D:0034H PUBLIC scale_val + I:007AH PUBLIC htar + I:007CH PUBLIC ffd + B:0090H.0 PUBLIC start + C:3060H PUBLIC cal + I:007EH PUBLIC mul_factor + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 11 + + + B:0021H.0 PUBLIC wait_flag + B:0021H.1 PUBLIC drop_flag + B:0021H.2 PUBLIC aco + D:0036H PUBLIC add_adc + D:0098H PUBLIC SCON + I:007FH PUBLIC ltar + D:003AH PUBLIC temp_data + C:39D9H PUBLIC cal_find + D:0089H PUBLIC TMOD + D:0088H PUBLIC TCON + C:4AD7H PUBLIC init + C:08BEH PUBLIC menu + D:0042H PUBLIC temp + B:0021H.3 PUBLIC esc_flag + I:0081H PUBLIC EEPROM_block + B:0021H.4 PUBLIC start_status + B:0021H.5 PUBLIC Instant_fill_enable + B:0021H.6 PUBLIC fill_start + C:4B33H PUBLIC zero_track + B:0021H.7 PUBLIC Adc_Data_Ready + I:0082H PUBLIC start_count + C:2415H PUBLIC sys_paramts + I:0083H PUBLIC disp_count + I:0084H PUBLIC avg + I:0085H PUBLIC nfl + C:480FH PUBLIC pass_F10 + B:0022H.0 PUBLIC busy_flag + I:0087H PUBLIC mas + C:4458H PUBLIC _val_read + I:0088H PUBLIC start_disp + B:0022H.1 PUBLIC zset_flag + B:0022H.2 PUBLIC start_wait_flag + B:0022H.3 PUBLIC grwt + I:008AH PUBLIC cumulative + C:4599H PUBLIC tare_chk + D:0046H PUBLIC temp_tare + I:008EH PUBLIC zset + B:0022H.4 PUBLIC ff_flag + B:0022H.5 PUBLIC ed + I:0090H PUBLIC cf + C:33A0H PUBLIC display_current_batch + I:0092H PUBLIC ztwc + C:4811H PUBLIC rng_array + I:0093H PUBLIC res + B:0022H.6 PUBLIC set_enter_flag + B:0090H.2 PUBLIC ff + C:43DAH PUBLIC pwd + D:008CH PUBLIC TH0 + B:0022H.7 PUBLIC auto_start + B:00A8H.0 PUBLIC EX0 + B:0088H.0 PUBLIC IT0 + D:008DH PUBLIC TH1 + I:0094H PUBLIC adc_val + C:2E59H PUBLIC self_test + D:0048H PUBLIC help_val + D:008AH PUBLIC TL0 + B:0023H.0 PUBLIC dp_flag + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 12 + + + I:0096H PUBLIC add_cnt + D:008BH PUBLIC TL1 + I:0097H PUBLIC ztc + D:004AH PUBLIC tare_val + B:0023H.1 PUBLIC adc_err + B:0023H.2 PUBLIC wa_flag + I:0098H PUBLIC tare_cnt + B:0023H.3 PUBLIC adc_pol + I:0099H PUBLIC cal_val + C:4665H PUBLIC adcint0_isr + I:009BH PUBLIC disp_val + B:0088H.6 PUBLIC TR1 + B:0023H.4 PUBLIC tare_pol + I:009DH PUBLIC wait_val + I:009EH PUBLIC temp_val + C:3F5AH PUBLIC defaults + B:0023H.5 PUBLIC c_flag + B:0023H.6 PUBLIC disp_pol + I:00A0H PUBLIC bin_val + I:00A2H PUBLIC cfd1 + C:4B86H PUBLIC average + I:00A4H PUBLIC cfd2 + I:00A6H PUBLIC drop_ctr + I:00A8H PUBLIC wait_ctr + I:00AAH PUBLIC test_loc + C:001EH PUBLIC check_keypad + I:00ABH PUBLIC prev_val + I:00B5H PUBLIC temp_pwd + B:0090H.7 PUBLIC cal_en + I:00B9H PUBLIC avg_cnt + C:364DH PUBLIC display_total_batch + D:004CH PUBLIC temp1 + C:472FH PUBLIC _incdec + B:0023H.7 PUBLIC autotare + D:0050H PUBLIC temp2 + I:00BAH PUBLIC function + C:417DH PUBLIC cal_rst + I:00BBH PUBLIC rng_val + I:00BCH PUBLIC on_time + C:47E3H PUBLIC pswd1 + C:47E5H PUBLIC pswd2 + I:00BEH PUBLIC t + C:47E7H PUBLIC pswd3 + I:00BFH PUBLIC drop_wait_val + C:47E9H PUBLIC pswd4 + C:47EBH PUBLIC pswd5 + C:10BDH PUBLIC check_values + C:47EDH PUBLIC pswd6 + C:1752H PUBLIC settings + B:0024H.0 PUBLIC cf1_flag + I:00C0H PUBLIC fillset + C:47EFH PUBLIC pswd7 + C:1D79H PUBLIC check_switch + B:0024H.1 PUBLIC cf2_flag + B:0024H.2 PUBLIC ave_ok + C:47F1H PUBLIC pswd8 + B:0024H.3 PUBLIC wt_ach + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 13 + + + D:0054H PUBLIC Adc_Value_MLSB + C:47F3H PUBLIC pswd9 + I:00C2H PUBLIC dp_val + B:0090H.4 PUBLIC cf1 + B:0024H.4 PUBLIC bset_enable + B:0024H.5 PUBLIC recipe + B:0090H.1 PUBLIC cf2 + C:38C3H PUBLIC display_value + D:0055H PUBLIC Status_Bits + C:2C14H PUBLIC load_eep_defaults + B:0024H.6 PUBLIC Adc_Status_bit73 + ------- PROC MAIN + C:34FAH LINE# 194 + C:34FAH LINE# 195 + C:34FAH LINE# 196 + C:34FDH LINE# 197 + C:3500H LINE# 201 + C:3508H LINE# 203 + C:350AH LINE# 204 + C:3535H LINE# 205 + C:3538H LINE# 207 + C:353BH LINE# 208 + C:353DH LINE# 209 + C:3546H LINE# 210 + C:354FH LINE# 211 + C:354FH LINE# 212 + C:357AH LINE# 216 + C:3595H LINE# 222 + C:359BH LINE# 224 + C:359BH LINE# 225 + C:35C6H LINE# 226 + C:35C9H LINE# 227 + C:35D0H LINE# 228 + C:35D0H LINE# 229 + C:35D0H LINE# 232 + C:35D3H LINE# 237 + C:35D6H LINE# 239 + C:35D9H LINE# 240 + C:35D9H LINE# 241 + C:35DCH LINE# 242 + C:35DFH LINE# 243 + C:35E2H LINE# 244 + C:35E4H LINE# 245 + C:360FH LINE# 246 + C:3616H LINE# 247 + C:3619H LINE# 248 + C:3619H LINE# 249 + C:361BH LINE# 251 + C:361BH LINE# 252 + C:361BH LINE# 267 + C:361EH LINE# 269 + C:3625H LINE# 271 + C:3628H LINE# 272 + C:362BH LINE# 273 + C:362EH LINE# 274 + C:3631H LINE# 275 + C:3634H LINE# 276 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 14 + + + C:363AH LINE# 277 + C:3647H LINE# 281 + C:364BH LINE# 283 + ------- ENDPROC MAIN + ------- PROC INIT + C:4AD7H LINE# 286 + C:4AD7H LINE# 287 + C:4AD7H LINE# 299 + C:4ADDH LINE# 300 + C:4AE0H LINE# 301 + C:4AE3H LINE# 302 + C:4AE5H LINE# 303 + C:4AE8H LINE# 304 + C:4AEBH LINE# 305 + C:4AEEH LINE# 306 + C:4AF1H LINE# 307 + C:4AF4H LINE# 308 + C:4AF6H LINE# 314 + C:4AF8H LINE# 315 + C:4AFAH LINE# 316 + C:4AFCH LINE# 319 + C:4AFEH LINE# 320 + C:4B00H LINE# 321 + C:4B02H LINE# 322 + C:4B04H LINE# 323 + ------- ENDPROC INIT + ------- PROC ADCINT0_ISR + C:4665H LINE# 325 + C:4682H LINE# 327 + C:4684H LINE# 330 + C:4687H LINE# 334 + C:4689H LINE# 336 + C:468CH LINE# 337 + C:468CH LINE# 338 + C:468EH LINE# 339 + C:4691H LINE# 340 + C:4694H LINE# 341 + C:469DH LINE# 342 + C:469DH LINE# 343 + C:46A1H LINE# 344 + C:46A4H LINE# 345 + C:46AAH LINE# 347 + C:46AAH LINE# 348 + C:46AAH LINE# 349 + C:46ACH LINE# 350 + ------- ENDPROC ADCINT0_ISR + ------- PROC TIMER1_ISR + C:4879H LINE# 353 + C:4896H LINE# 355 + C:4898H LINE# 356 + C:489FH LINE# 357 + C:48A2H LINE# 359 + C:48A5H LINE# 360 + C:48A7H LINE# 361 + ------- ENDPROC TIMER1_ISR + ------- PROC READ_VALUES + ------- DO + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 15 + + + D:005DH SYMBOL dat + ------- ENDDO + C:20CCH LINE# 364 + C:20CCH LINE# 365 + C:20CCH LINE# 369 + C:20CEH LINE# 371 + C:20D5H LINE# 372 + C:20DEH LINE# 373 + C:20E0H LINE# 375 + C:20E7H LINE# 376 + C:20F0H LINE# 377 + C:20F2H LINE# 379 + C:20F9H LINE# 380 + C:2102H LINE# 381 + C:2104H LINE# 384 + C:210EH LINE# 385 + C:2117H LINE# 387 + C:211EH LINE# 388 + C:2127H LINE# 389 + C:2129H LINE# 391 + C:2132H LINE# 393 + C:2139H LINE# 394 + C:2142H LINE# 395 + C:2144H LINE# 396 + C:2168H LINE# 397 + C:216BH LINE# 399 + C:2182H LINE# 400 + C:2199H LINE# 401 + C:21B0H LINE# 402 + C:21C5H LINE# 404 + C:21C8H LINE# 405 + C:21DCH LINE# 407 + C:2205H LINE# 409 + C:2231H LINE# 410 + C:225DH LINE# 411 + C:2289H LINE# 412 + C:22B5H LINE# 413 + C:22E1H LINE# 414 + C:22EEH LINE# 415 + C:22F6H LINE# 416 + C:22F8H LINE# 418 + C:22FCH LINE# 420 + C:231CH LINE# 421 + C:233CH LINE# 423 + C:2345H LINE# 424 + C:234EH LINE# 425 + C:2357H LINE# 426 + C:2360H LINE# 427 + C:2369H LINE# 429 + C:2372H LINE# 430 + C:237DH LINE# 431 + C:2380H LINE# 432 + C:2396H LINE# 433 + C:23A9H LINE# 434 + C:23D9H LINE# 437 + C:23E2H LINE# 438 + C:23EBH LINE# 440 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 16 + + + C:23FBH LINE# 447 + C:240DH LINE# 448 + C:2412H LINE# 450 + C:2414H LINE# 451 + ------- ENDPROC READ_VALUES + ------- PROC SELF_TEST + ------- DO + D:0058H SYMBOL dat + D:0059H SYMBOL i + B:0025H.0 SYMBOL aok + ------- ENDDO + C:2E59H LINE# 453 + C:2E59H LINE# 454 + C:2E59H LINE# 456 + C:2E5BH LINE# 458 + C:2E86H LINE# 459 + C:2E8DH LINE# 462 + C:2EB8H LINE# 463 + C:2EBFH LINE# 464 + C:2EC6H LINE# 465 + C:2ECDH LINE# 466 + C:2EEEH LINE# 468 + C:2EEEH LINE# 469 + C:2F19H LINE# 471 + C:2F19H LINE# 472 + C:2F20H LINE# 475 + C:2F4BH LINE# 476 + C:2F52H LINE# 477 + C:2F59H LINE# 478 + C:2F60H LINE# 479 + C:2F81H LINE# 481 + C:2F81H LINE# 482 + C:2FACH LINE# 484 + C:2FACH LINE# 485 + C:2FB3H LINE# 488 + C:2FDEH LINE# 490 + C:2FE0H LINE# 491 + C:2FE3H LINE# 492 + C:2FE3H LINE# 493 + C:2FE6H LINE# 494 + C:2FE6H LINE# 495 + C:2FE8H LINE# 496 + C:2FEAH LINE# 497 + C:2FEAH LINE# 498 + C:2FF1H LINE# 499 + C:2FFAH LINE# 500 + C:2FFDH LINE# 501 + C:2FFDH LINE# 502 + C:3028H LINE# 503 + C:302AH LINE# 504 + C:302CH LINE# 506 + C:302CH LINE# 507 + C:3057H LINE# 508 + C:3059H LINE# 509 + C:3059H LINE# 510 + ------- ENDPROC SELF_TEST + ------- PROC DISP_CHECK + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 17 + + + ------- DO + D:0058H SYMBOL i + ------- ENDDO + C:49D0H LINE# 513 + C:49D0H LINE# 514 + C:49D0H LINE# 516 + C:49D3H LINE# 517 + C:49D3H LINE# 518 + C:49FAH LINE# 519 + C:4A01H LINE# 520 + C:4A0CH LINE# 521 + ------- ENDPROC DISP_CHECK + ------- PROC DEFAULTS + C:3F5AH LINE# 523 + C:3F5AH LINE# 524 + C:3F5AH LINE# 525 + C:3F61H LINE# 528 + C:3F68H LINE# 529 + C:3F6FH LINE# 530 + C:3F75H LINE# 531 + C:3F7BH LINE# 532 + C:3F81H LINE# 533 + C:3F86H LINE# 534 + C:3F88H LINE# 535 + C:3F8CH LINE# 536 + C:3F98H LINE# 542 + C:3F9CH LINE# 543 + C:3FA0H LINE# 544 + C:3FA4H LINE# 545 + C:3FA8H LINE# 546 + C:3FACH LINE# 548 + C:3FC2H LINE# 549 + C:3FD5H LINE# 551 + C:4005H LINE# 557 + C:4009H LINE# 558 + C:400DH LINE# 559 + C:4014H LINE# 560 + ------- ENDPROC DEFAULTS + ------- PROC LOAD_EEP_DEFAULTS + ------- DO + D:005BH SYMBOL rcpe + D:005CH SYMBOL dat + ------- ENDDO + C:2C14H LINE# 562 + C:2C14H LINE# 563 + C:2C14H LINE# 564 + C:2C1AH LINE# 565 + C:2C3EH LINE# 566 + C:2C45H LINE# 567 + C:2C48H LINE# 568 + C:2C73H LINE# 569 + C:2C7CH LINE# 570 + C:2C83H LINE# 572 + C:2C86H LINE# 573 + C:2C86H LINE# 574 + C:2C9DH LINE# 575 + C:2CB7H LINE# 576 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 18 + + + C:2CD1H LINE# 577 + C:2CE9H LINE# 579 + C:2CF6H LINE# 580 + C:2D04H LINE# 581 + C:2D13H LINE# 582 + C:2D22H LINE# 583 + C:2D31H LINE# 584 + C:2D40H LINE# 585 + C:2D4FH LINE# 586 + C:2D5EH LINE# 587 + C:2D6DH LINE# 588 + C:2D7CH LINE# 589 + C:2D8BH LINE# 590 + C:2D9AH LINE# 591 + C:2DA7H LINE# 592 + C:2DAAH LINE# 593 + C:2DADH LINE# 594 + C:2DB9H LINE# 596 + C:2DBDH LINE# 598 + C:2DC6H LINE# 599 + C:2DCFH LINE# 601 + C:2DD8H LINE# 602 + C:2DE1H LINE# 603 + C:2DEAH LINE# 604 + C:2DF3H LINE# 605 + C:2DFCH LINE# 606 + C:2E05H LINE# 611 + C:2E0EH LINE# 612 + C:2E17H LINE# 613 + C:2E20H LINE# 615 + C:2E27H LINE# 616 + C:2E2EH LINE# 617 + C:2E35H LINE# 618 + C:2E3CH LINE# 619 + C:2E43H LINE# 620 + C:2E4CH LINE# 621 + C:2E53H LINE# 623 + C:2E56H LINE# 624 + ------- ENDPROC LOAD_EEP_DEFAULTS + ------- PROC ADD_VALUES + C:4BCEH LINE# 627 + C:4BCEH LINE# 628 + C:4BCEH LINE# 629 + C:4BECH LINE# 630 + ------- ENDPROC ADD_VALUES + ------- PROC AVERAGE + C:4B86H LINE# 632 + C:4B86H LINE# 633 + C:4B86H LINE# 634 + C:4BA0H LINE# 635 + C:4BA9H LINE# 636 + ------- ENDPROC AVERAGE + ------- PROC FILTER + ------- DO + D:0056H SYMBOL i + B:0024H.7 SYMBOL ave_ok + ------- ENDDO + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 19 + + + C:4015H LINE# 638 + C:4015H LINE# 639 + C:4015H LINE# 641 + C:4017H LINE# 643 + C:4035H LINE# 644 + C:4043H LINE# 646 + C:4046H LINE# 647 + C:4046H LINE# 648 + C:406DH LINE# 649 + C:4076H LINE# 651 + C:4079H LINE# 652 + C:4079H LINE# 653 + C:4082H LINE# 654 + C:40AEH LINE# 655 + C:40C7H LINE# 656 + C:40CEH LINE# 657 + C:40CEH LINE# 658 + ------- ENDPROC FILTER + ------- PROC PROCESS + C:40CFH LINE# 660 + C:40CFH LINE# 661 + C:40CFH LINE# 666 + C:40D8H LINE# 667 + C:40DBH LINE# 668 + C:40DEH LINE# 669 + C:40E1H LINE# 670 + C:40E4H LINE# 671 + C:40E4H LINE# 672 + C:40E7H LINE# 673 + C:40EAH LINE# 674 + C:40EAH LINE# 675 + C:40F9H LINE# 676 + C:40F9H LINE# 677 + C:40FBH LINE# 678 + C:40FEH LINE# 679 + C:4100H LINE# 680 + C:412BH LINE# 681 + C:4135H LINE# 682 + C:4137H LINE# 683 + C:4139H LINE# 684 + C:413BH LINE# 686 + C:413EH LINE# 687 + C:413EH LINE# 688 + C:4140H LINE# 689 + C:4143H LINE# 690 + C:4145H LINE# 691 + C:4170H LINE# 692 + C:417AH LINE# 693 + C:417CH LINE# 694 + C:417CH LINE# 695 + ------- ENDPROC PROCESS + ------- PROC TARE_CHK + C:4599H LINE# 697 + C:4599H LINE# 698 + C:4599H LINE# 699 + C:459CH LINE# 700 + C:459CH LINE# 701 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 20 + + + C:45A2H LINE# 702 + C:45A6H LINE# 703 + C:45AFH LINE# 704 + C:45AFH LINE# 705 + C:45B1H LINE# 706 + C:45B3H LINE# 707 + C:45B3H LINE# 708 + C:45B3H LINE# 712 + C:45BBH LINE# 713 + C:45BBH LINE# 714 + C:45C8H LINE# 715 + C:45CCH LINE# 716 + C:45CDH LINE# 718 + C:45CDH LINE# 719 + C:45D8H LINE# 720 + C:45D8H LINE# 721 + C:45DCH LINE# 722 + C:45EAH LINE# 723 + C:45EBH LINE# 725 + C:45EBH LINE# 726 + C:45F0H LINE# 727 + C:45FEH LINE# 728 + C:45FEH LINE# 729 + C:45FEH LINE# 742 + ------- ENDPROC TARE_CHK + ------- PROC ZERO_TRACK + C:4B33H LINE# 744 + C:4B33H LINE# 745 + C:4B33H LINE# 746 + C:4B47H LINE# 747 + C:4B4BH LINE# 749 + C:4B53H LINE# 750 + C:4B53H LINE# 751 + C:4B59H LINE# 752 + C:4B5DH LINE# 753 + C:4B5FH LINE# 754 + C:4B5FH LINE# 755 + ------- ENDPROC ZERO_TRACK + C:490BH SYMBOL L?0774 + C:490DH SYMBOL L?0775 + ------- PROC L?0773 + ------- ENDPROC L?0773 + C:490BH SYMBOL L?0774 + C:490DH SYMBOL L?0775 + ------- PROC _BIN2BCD + D:005DH SYMBOL value + D:0003H SYMBOL no + ------- DO + D:0002H SYMBOL i + ------- ENDDO + C:4914H LINE# 757 + C:491AH LINE# 758 + C:491AH LINE# 761 + C:492AH LINE# 762 + C:492AH LINE# 763 + C:493BH LINE# 764 + C:494AH LINE# 765 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 21 + + + C:494DH LINE# 766 + ------- ENDPROC _BIN2BCD + ------- PROC DISPLAY_VALUE + ------- DO + D:0058H SYMBOL value + D:0003H SYMBOL i + ------- ENDDO + C:38C3H LINE# 769 + C:38C3H LINE# 770 + C:38C3H LINE# 777 + C:38E0H LINE# 778 + C:38E2H LINE# 779 + C:38E2H LINE# 780 + C:38F3H LINE# 781 + C:3902H LINE# 782 + C:3906H LINE# 784 + C:390DH LINE# 785 + C:3913H LINE# 787 + C:3921H LINE# 789 + C:3938H LINE# 790 + C:3938H LINE# 791 + C:393BH LINE# 792 + C:393DH LINE# 793 + C:3940H LINE# 794 + C:3942H LINE# 795 + C:3942H LINE# 796 + C:3946H LINE# 797 + C:3946H LINE# 798 + C:3949H LINE# 799 + C:394CH LINE# 800 + C:394FH LINE# 801 + C:3952H LINE# 802 + C:3952H LINE# 804 + C:3955H LINE# 805 + C:3955H LINE# 806 + C:3958H LINE# 807 + C:395BH LINE# 808 + C:395BH LINE# 809 + C:395DH LINE# 810 + C:3960H LINE# 811 + C:3960H LINE# 812 + C:3963H LINE# 813 + C:3966H LINE# 814 + C:3966H LINE# 815 + C:3968H LINE# 816 + C:396BH LINE# 817 + C:396BH LINE# 818 + C:396EH LINE# 819 + C:3971H LINE# 820 + C:3971H LINE# 821 + C:3973H LINE# 822 + C:3979H LINE# 823 + C:3979H LINE# 824 + C:397CH LINE# 825 + C:397FH LINE# 826 + C:397FH LINE# 827 + C:3981H LINE# 828 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 22 + + + C:3984H LINE# 829 + C:3984H LINE# 830 + C:398AH LINE# 831 + C:398AH LINE# 832 + C:398DH LINE# 833 + C:3990H LINE# 834 + C:3993H LINE# 835 + C:3995H LINE# 837 + C:3995H LINE# 838 + C:3998H LINE# 839 + C:399BH LINE# 840 + C:399BH LINE# 841 + C:399BH LINE# 842 + C:399DH LINE# 844 + C:399DH LINE# 845 + C:39A0H LINE# 846 + C:39A0H LINE# 847 + C:39A3H LINE# 848 + C:39A6H LINE# 849 + C:39A9H LINE# 850 + C:39ABH LINE# 852 + C:39ABH LINE# 855 + C:39B4H LINE# 856 + C:39B4H LINE# 857 + C:39B7H LINE# 858 + C:39BFH LINE# 860 + C:39C2H LINE# 861 + C:39C4H LINE# 863 + C:39C4H LINE# 864 + C:39CCH LINE# 865 + C:39D3H LINE# 866 + C:39D6H LINE# 868 + C:39D6H LINE# 869 + C:39D6H LINE# 870 + C:39D6H LINE# 871 + ------- ENDPROC DISPLAY_VALUE + ------- PROC CHECK_KEYPAD + ------- DO + D:0058H SYMBOL sdat + D:0059H SYMBOL b + C:05FFH SYMBOL rtn + ------- ENDDO + C:001EH LINE# 874 + C:001EH LINE# 875 + C:001EH LINE# 876 + C:0023H LINE# 881 + C:0039H LINE# 883 + C:0039H LINE# 884 + C:003BH LINE# 885 + C:003EH LINE# 886 + C:0041H LINE# 887 + C:0044H LINE# 888 + C:004FH LINE# 895 + C:0097H LINE# 898 + C:00B7H LINE# 901 + C:00D7H LINE# 902 + C:00F7H LINE# 903 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 23 + + + C:0117H LINE# 904 + C:0137H LINE# 905 + C:0157H LINE# 906 + C:0177H LINE# 907 + C:0197H LINE# 908 + C:01B7H LINE# 909 + C:01D7H LINE# 910 + C:01F7H LINE# 911 + C:021CH LINE# 912 + C:0241H LINE# 913 + C:0266H LINE# 914 + C:028BH LINE# 915 + C:02B0H LINE# 916 + C:02D5H LINE# 917 + C:02F9H LINE# 918 + C:031AH LINE# 919 + C:033BH LINE# 920 + C:0364H LINE# 922 + C:038FH LINE# 923 + C:0396H LINE# 924 + C:0399H LINE# 925 + C:039BH LINE# 926 + C:039BH LINE# 927 + C:039EH LINE# 933 + C:03A8H LINE# 935 + C:03A8H LINE# 936 + C:03CCH LINE# 940 + C:03DBH LINE# 942 + C:03DDH LINE# 943 + C:03DDH LINE# 949 + C:03F3H LINE# 951 + C:03F3H LINE# 952 + C:03F5H LINE# 953 + C:03FBH LINE# 954 + C:03FBH LINE# 955 + C:041AH LINE# 956 + C:041DH LINE# 957 + C:0424H LINE# 958 + C:0429H LINE# 959 + C:0437H LINE# 961 + C:0464H LINE# 962 + C:0464H LINE# 963 + C:048FH LINE# 964 + C:0496H LINE# 965 + C:0499H LINE# 966 + C:049BH LINE# 968 + C:049BH LINE# 969 + C:049DH LINE# 970 + C:04CCH LINE# 971 + C:04D4H LINE# 972 + C:04DDH LINE# 973 + C:04DDH LINE# 974 + C:04DDH LINE# 975 + C:04DDH LINE# 981 + C:04E9H LINE# 983 + C:04E9H LINE# 984 + C:04EBH LINE# 988 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 24 + + + C:04F1H LINE# 990 + C:04FAH LINE# 991 + C:04FAH LINE# 997 + C:0506H LINE# 999 + C:0506H LINE# 1003 + C:050CH LINE# 1005 + C:0515H LINE# 1006 + C:0517H LINE# 1007 + C:051AH LINE# 1008 + C:051AH LINE# 1014 + C:0536H LINE# 1016 + C:0536H LINE# 1017 + C:0538H LINE# 1018 + C:053AH LINE# 1019 + C:055EH LINE# 1020 + C:0581H LINE# 1021 + C:0586H LINE# 1022 + C:058DH LINE# 1023 + C:0592H LINE# 1024 + C:059EH LINE# 1029 + C:05A9H LINE# 1035 + C:05AEH LINE# 1038 + C:05AEH LINE# 1039 + C:05B7H LINE# 1040 + C:05C0H LINE# 1042 + C:05C9H LINE# 1043 + C:05D2H LINE# 1044 + C:05D2H LINE# 1045 + C:05D4H LINE# 1049 + C:05DAH LINE# 1051 + C:05E3H LINE# 1052 + C:05E3H LINE# 1060 + C:05FFH LINE# 1062 + C:05FFH LINE# 1063 + C:05FFH LINE# 1064 + C:0608H LINE# 1065 + C:060AH LINE# 1066 + C:0611H LINE# 1067 + C:0649H LINE# 1069 + C:0650H LINE# 1070 + C:0653H LINE# 1072 + C:0655H LINE# 1076 + C:0668H LINE# 1078 + C:0668H LINE# 1081 + C:0673H LINE# 1082 + C:0681H LINE# 1085 + C:0690H LINE# 1086 + C:0696H LINE# 1091 + C:06A2H LINE# 1093 + C:06A2H LINE# 1094 + C:06A4H LINE# 1097 + C:06AEH LINE# 1099 + C:06B2H LINE# 1101 + C:06B2H LINE# 1104 + C:06EEH LINE# 1106 + C:06F5H LINE# 1107 + C:0703H LINE# 1108 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 25 + + + C:0721H LINE# 1109 + C:072FH LINE# 1110 + C:074FH LINE# 1111 + C:075DH LINE# 1112 + C:077DH LINE# 1113 + C:078BH LINE# 1114 + C:07BBH LINE# 1115 + C:07BEH LINE# 1116 + C:07C1H LINE# 1120 + C:07C8H LINE# 1122 + C:07C8H LINE# 1123 + C:07D6H LINE# 1124 + C:07D6H LINE# 1125 + C:0801H LINE# 1126 + C:0808H LINE# 1127 + C:080BH LINE# 1128 + C:080EH LINE# 1129 + C:080EH LINE# 1131 + C:080EH LINE# 1132 + C:0815H LINE# 1133 + C:081EH LINE# 1134 + C:0821H LINE# 1135 + C:0825H LINE# 1136 + C:0825H LINE# 1137 + C:0827H LINE# 1141 + C:082DH LINE# 1143 + C:0836H LINE# 1144 + C:0836H LINE# 1150 + C:0846H LINE# 1152 + C:0846H LINE# 1153 + C:0848H LINE# 1154 + C:0868H LINE# 1155 + C:0893H LINE# 1156 + C:089FH LINE# 1157 + C:08A6H LINE# 1158 + C:08A8H LINE# 1159 + C:08A8H LINE# 1165 + C:08BAH LINE# 1167 + C:08BAH LINE# 1168 + C:08BDH LINE# 1169 + C:08BDH LINE# 1170 + ------- ENDPROC CHECK_KEYPAD + ------- PROC CHECK_SWITCH + ------- DO + D:0058H SYMBOL dat + D:0059H SYMBOL stop + C:1D86H SYMBOL bgn + C:1F9EH SYMBOL srt + ------- ENDDO + C:1D79H LINE# 1172 + C:1D79H LINE# 1173 + C:1D79H LINE# 1174 + C:1D7EH LINE# 1176 + C:1D86H LINE# 1177 + C:1D86H LINE# 1182 + C:1D99H LINE# 1184 + C:1D99H LINE# 1185 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 26 + + + C:1DAEH LINE# 1187 + C:1DC6H LINE# 1188 + C:1DC6H LINE# 1190 + C:1DC8H LINE# 1191 + C:1DF3H LINE# 1192 + C:1DF5H LINE# 1193 + C:1DF7H LINE# 1194 + C:1DF9H LINE# 1195 + C:1DFBH LINE# 1196 + C:1DFDH LINE# 1197 + C:1DFFH LINE# 1198 + C:1E01H LINE# 1199 + C:1E03H LINE# 1200 + C:1E05H LINE# 1201 + C:1E07H LINE# 1202 + C:1E0DH LINE# 1204 + C:1E1AH LINE# 1205 + C:1E1EH LINE# 1206 + C:1E26H LINE# 1208 + C:1E28H LINE# 1210 + C:1E2AH LINE# 1211 + C:1E4EH LINE# 1212 + C:1E55H LINE# 1213 + C:1E57H LINE# 1216 + C:1E5FH LINE# 1217 + C:1E68H LINE# 1218 + C:1E68H LINE# 1220 + C:1E69H LINE# 1222 + C:1E69H LINE# 1223 + C:1E72H LINE# 1228 + C:1E7BH LINE# 1229 + C:1E7BH LINE# 1233 + C:1E7DH LINE# 1234 + C:1E80H LINE# 1235 + C:1E80H LINE# 1236 + C:1E83H LINE# 1238 + C:1EA6H LINE# 1240 + C:1EB5H LINE# 1241 + C:1EB5H LINE# 1243 + C:1EB5H LINE# 1244 + C:1EB8H LINE# 1246 + C:1EB8H LINE# 1249 + C:1EBAH LINE# 1250 + C:1EBCH LINE# 1251 + C:1EBFH LINE# 1252 + C:1EBFH LINE# 1253 + C:1EBFH LINE# 1256 + C:1EC8H LINE# 1257 + C:1EC8H LINE# 1258 + C:1EE5H LINE# 1259 + C:1EE5H LINE# 1260 + C:1EF1H LINE# 1261 + C:1F04H LINE# 1262 + C:1F08H LINE# 1263 + C:1F1FH LINE# 1264 + C:1F1FH LINE# 1265 + C:1F23H LINE# 1266 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 27 + + + C:1F25H LINE# 1267 + C:1F25H LINE# 1268 + C:1F25H LINE# 1269 + C:1F25H LINE# 1271 + C:1F37H LINE# 1272 + C:1F37H LINE# 1273 + C:1F3AH LINE# 1274 + C:1F5DH LINE# 1276 + C:1F6CH LINE# 1277 + C:1F6CH LINE# 1279 + C:1F97H LINE# 1280 + C:1F9EH LINE# 1282 + C:1F9EH LINE# 1285 + C:1FD2H LINE# 1286 + C:1FD2H LINE# 1287 + C:1FD5H LINE# 1288 + C:1FD7H LINE# 1289 + C:2002H LINE# 1290 + C:2009H LINE# 1291 + C:200BH LINE# 1293 + C:200DH LINE# 1294 + C:2010H LINE# 1295 + C:2010H LINE# 1297 + C:2010H LINE# 1298 + C:2030H LINE# 1299 + C:2030H LINE# 1300 + C:2032H LINE# 1301 + C:2038H LINE# 1302 + C:203EH LINE# 1303 + C:2040H LINE# 1304 + C:2046H LINE# 1305 + C:2046H LINE# 1306 + C:2048H LINE# 1307 + C:204EH LINE# 1308 + C:2050H LINE# 1309 + C:2052H LINE# 1311 + C:2055H LINE# 1313 + C:2058H LINE# 1314 + C:2058H LINE# 1315 + C:205AH LINE# 1316 + C:205CH LINE# 1317 + C:205EH LINE# 1318 + C:2065H LINE# 1319 + C:2067H LINE# 1320 + C:206EH LINE# 1321 + C:2070H LINE# 1322 + C:2077H LINE# 1323 + C:2079H LINE# 1324 + C:207BH LINE# 1325 + C:207DH LINE# 1326 + C:207FH LINE# 1328 + C:2088H LINE# 1329 + C:208CH LINE# 1330 + C:2094H LINE# 1331 + C:2095H LINE# 1333 + C:2095H LINE# 1334 + C:2097H LINE# 1335 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 28 + + + C:20C2H LINE# 1336 + C:20C9H LINE# 1337 + C:20CBH LINE# 1338 + C:20CBH LINE# 1339 + C:20CBH LINE# 1340 + C:20CBH LINE# 1341 + C:20CBH LINE# 1342 + ------- ENDPROC CHECK_SWITCH + ------- PROC CHECK_VALUES + C:10BDH LINE# 1344 + C:10BDH LINE# 1345 + C:10BDH LINE# 1346 + C:10C3H LINE# 1347 + C:10C3H LINE# 1348 + C:10CCH LINE# 1349 + C:10CCH LINE# 1350 + C:10DCH LINE# 1351 + C:10DCH LINE# 1352 + C:10DEH LINE# 1357 + C:10E0H LINE# 1358 + C:10E0H LINE# 1359 + C:10EAH LINE# 1360 + C:10EAH LINE# 1361 + C:10EDH LINE# 1362 + C:10EDH LINE# 1364 + C:10F5H LINE# 1365 + C:10F9H LINE# 1366 + C:1101H LINE# 1368 + C:1101H LINE# 1369 + C:1103H LINE# 1370 + C:1105H LINE# 1371 + C:1107H LINE# 1372 + C:1107H LINE# 1373 + C:111DH LINE# 1374 + C:111DH LINE# 1375 + C:111FH LINE# 1376 + C:1121H LINE# 1377 + C:1121H LINE# 1378 + C:1121H LINE# 1380 + C:1124H LINE# 1381 + C:1124H LINE# 1382 + C:112CH LINE# 1385 + C:113FH LINE# 1386 + C:113FH LINE# 1387 + C:1143H LINE# 1388 + C:1145H LINE# 1389 + C:1147H LINE# 1390 + C:1147H LINE# 1391 + C:1147H LINE# 1393 + C:1153H LINE# 1394 + C:1153H LINE# 1405 + C:116DH LINE# 1406 + C:116DH LINE# 1407 + C:116FH LINE# 1408 + C:1171H LINE# 1409 + C:1174H LINE# 1410 + C:117EH LINE# 1411 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 29 + + + C:117EH LINE# 1412 + C:1186H LINE# 1414 + C:119CH LINE# 1415 + C:119CH LINE# 1416 + C:11A0H LINE# 1417 + C:11A2H LINE# 1418 + C:11ACH LINE# 1419 + C:11AEH LINE# 1420 + C:11AEH LINE# 1421 + C:11B1H LINE# 1423 + C:11B1H LINE# 1424 + C:11B3H LINE# 1425 + C:11B5H LINE# 1426 + C:11B7H LINE# 1427 + C:11BDH LINE# 1428 + C:11BFH LINE# 1429 + C:11C1H LINE# 1430 + C:11C3H LINE# 1431 + C:11C5H LINE# 1432 + C:11C7H LINE# 1433 + C:11C9H LINE# 1434 + C:11CBH LINE# 1435 + C:11CFH LINE# 1436 + C:11D1H LINE# 1438 + C:11DEH LINE# 1439 + C:11E2H LINE# 1440 + C:11EAH LINE# 1442 + C:120AH LINE# 1443 + C:1211H LINE# 1444 + C:121AH LINE# 1445 + C:1223H LINE# 1447 + C:122DH LINE# 1448 + C:122DH LINE# 1449 + C:1237H LINE# 1450 + C:1270H LINE# 1451 + C:128CH LINE# 1453 + C:129EH LINE# 1455 + C:12BEH LINE# 1456 + C:12C5H LINE# 1457 + C:12CEH LINE# 1458 + C:12D4H LINE# 1459 + C:12D7H LINE# 1460 + C:12E1H LINE# 1461 + C:12E1H LINE# 1462 + C:12EBH LINE# 1463 + C:1324H LINE# 1464 + C:1340H LINE# 1466 + C:1352H LINE# 1468 + C:1372H LINE# 1469 + C:1379H LINE# 1470 + C:1382H LINE# 1471 + C:1388H LINE# 1472 + C:138BH LINE# 1473 + C:1395H LINE# 1474 + C:1395H LINE# 1475 + C:139FH LINE# 1476 + C:13D8H LINE# 1477 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 30 + + + C:13F4H LINE# 1479 + C:1406H LINE# 1481 + C:1426H LINE# 1482 + C:142DH LINE# 1483 + C:1436H LINE# 1484 + C:143CH LINE# 1485 + C:143FH LINE# 1486 + C:1449H LINE# 1487 + C:1449H LINE# 1488 + C:1453H LINE# 1489 + C:148CH LINE# 1490 + C:14A8H LINE# 1492 + C:14BAH LINE# 1494 + C:14DAH LINE# 1495 + C:14E1H LINE# 1496 + C:14EAH LINE# 1497 + C:14F0H LINE# 1498 + C:14F3H LINE# 1499 + C:14FDH LINE# 1500 + C:14FDH LINE# 1501 + C:1507H LINE# 1502 + C:1540H LINE# 1503 + C:155CH LINE# 1505 + C:156EH LINE# 1507 + C:158EH LINE# 1508 + C:1595H LINE# 1509 + C:159EH LINE# 1510 + C:15A4H LINE# 1511 + C:15A7H LINE# 1512 + C:15BCH LINE# 1513 + C:15BCH LINE# 1514 + C:15C6H LINE# 1515 + C:15FFH LINE# 1516 + C:161BH LINE# 1518 + C:162DH LINE# 1520 + C:164DH LINE# 1521 + C:1654H LINE# 1522 + C:165DH LINE# 1523 + C:1666H LINE# 1524 + C:1666H LINE# 1525 + C:1666H LINE# 1526 + C:1666H LINE# 1528 + C:166FH LINE# 1529 + C:166FH LINE# 1530 + C:1677H LINE# 1531 + C:168AH LINE# 1532 + C:168AH LINE# 1533 + C:168CH LINE# 1534 + C:1692H LINE# 1535 + C:1696H LINE# 1536 + C:1696H LINE# 1537 + C:1696H LINE# 1539 + C:16A8H LINE# 1540 + C:16A8H LINE# 1541 + C:16B8H LINE# 1542 + C:16C6H LINE# 1543 + C:16D9H LINE# 1544 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 31 + + + C:16D9H LINE# 1545 + C:16DDH LINE# 1546 + C:16DFH LINE# 1548 + C:1703H LINE# 1550 + C:1705H LINE# 1555 + C:170CH LINE# 1557 + C:1717H LINE# 1558 + C:1717H LINE# 1559 + C:1717H LINE# 1562 + C:172AH LINE# 1563 + C:172AH LINE# 1564 + C:172CH LINE# 1565 + C:172EH LINE# 1566 + C:1734H LINE# 1567 + C:1741H LINE# 1569 + C:1745H LINE# 1570 + C:174DH LINE# 1571 + C:174FH LINE# 1572 + C:1751H LINE# 1573 + C:1751H LINE# 1574 + C:1751H LINE# 1575 + ------- ENDPROC CHECK_VALUES + ------- PROC PWD + ------- DO + D:005AH SYMBOL b + ------- ENDDO + C:43DAH LINE# 1577 + C:43DAH LINE# 1578 + C:43DAH LINE# 1579 + C:43DDH LINE# 1581 + C:43E1H LINE# 1582 + C:4407H LINE# 1584 + C:440AH LINE# 1588 + C:4411H LINE# 1590 + C:4411H LINE# 1591 + C:441CH LINE# 1592 + C:442AH LINE# 1596 + C:4436H LINE# 1598 + C:4436H LINE# 1599 + C:4438H LINE# 1600 + C:4442H LINE# 1603 + C:4446H LINE# 1605 + C:4446H LINE# 1612 + C:4448H LINE# 1616 + C:444EH LINE# 1618 + C:4457H LINE# 1619 + ------- ENDPROC PWD + ------- PROC _VAL_READ + D:005DH SYMBOL a + ------- DO + D:005EH SYMBOL b + ------- ENDDO + C:4458H LINE# 1621 + C:445AH LINE# 1622 + C:445AH LINE# 1624 + C:4461H LINE# 1629 + C:4473H LINE# 1631 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 32 + + + C:4473H LINE# 1632 + C:447EH LINE# 1633 + C:448CH LINE# 1638 + C:4498H LINE# 1640 + C:4498H LINE# 1641 + C:449AH LINE# 1642 + C:44A7H LINE# 1644 + C:44ABH LINE# 1646 + C:44ABH LINE# 1653 + C:44ADH LINE# 1657 + C:44B3H LINE# 1659 + C:44B3H LINE# 1663 + C:44B9H LINE# 1665 + C:44C2H LINE# 1666 + C:44C4H LINE# 1667 + C:44C5H LINE# 1668 + C:44C7H LINE# 1672 + ------- ENDPROC _VAL_READ + C:4788H SYMBOL L?0771 + C:478CH SYMBOL L?0772 + ------- PROC L?0770 + ------- ENDPROC L?0770 + C:4788H SYMBOL L?0771 + C:478CH SYMBOL L?0772 + ------- PROC _BLINK + D:005FH SYMBOL start + D:0061H SYMBOL no + ------- DO + D:0007H SYMBOL k + ------- ENDDO + C:4790H LINE# 1674 + C:4798H LINE# 1675 + C:4798H LINE# 1678 + C:47A3H LINE# 1679 + C:47C4H LINE# 1680 + C:47C7H LINE# 1681 + C:47CEH LINE# 1682 + C:47D9H LINE# 1683 + C:47DCH LINE# 1684 + ------- ENDPROC _BLINK + ------- PROC RECIPE_MENU + ------- DO + D:005AH SYMBOL b + C:3AECH SYMBOL err_rtn + ------- ENDDO + C:3AE7H LINE# 1687 + C:3AE7H LINE# 1688 + C:3AE7H LINE# 1690 + C:3AEAH LINE# 1691 + C:3AECH LINE# 1692 + C:3AECH LINE# 1693 + C:3AF5H LINE# 1695 + C:3B2BH LINE# 1696 + C:3B2EH LINE# 1700 + C:3B3BH LINE# 1702 + C:3B3BH LINE# 1703 + C:3B46H LINE# 1704 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 33 + + + C:3B54H LINE# 1709 + C:3B60H LINE# 1711 + C:3B60H LINE# 1712 + C:3B62H LINE# 1713 + C:3B6CH LINE# 1716 + C:3B70H LINE# 1718 + C:3B70H LINE# 1722 + C:3B77H LINE# 1730 + C:3B77H LINE# 1734 + C:3B7EH LINE# 1736 + C:3B7EH LINE# 1737 + C:3B8DH LINE# 1738 + C:3B93H LINE# 1739 + C:3B9AH LINE# 1740 + C:3B9AH LINE# 1741 + C:3BC5H LINE# 1742 + C:3BCCH LINE# 1743 + C:3BCFH LINE# 1744 + C:3BCFH LINE# 1745 + C:3BD6H LINE# 1746 + C:3BD6H LINE# 1750 + C:3BDCH LINE# 1752 + C:3BE5H LINE# 1753 + ------- ENDPROC RECIPE_MENU + ------- PROC MENU + ------- DO + D:005AH SYMBOL dat + B:0025H.0 SYMBOL err_flag + D:005BH SYMBOL temp + ------- ENDDO + C:08BEH LINE# 1755 + C:08BEH LINE# 1756 + C:08BEH LINE# 1758 + C:08C0H LINE# 1761 + C:08C3H LINE# 1762 + C:08C5H LINE# 1763 + C:08C7H LINE# 1765 + C:08DCH LINE# 1766 + C:08EEH LINE# 1767 + C:0900H LINE# 1768 + C:0910H LINE# 1771 + C:0910H LINE# 1772 + C:0934H LINE# 1774 + C:0964H LINE# 1775 + C:0967H LINE# 1776 + C:096EH LINE# 1777 + C:0973H LINE# 1778 + C:0979H LINE# 1783 + C:0983H LINE# 1785 + C:0983H LINE# 1786 + C:098CH LINE# 1787 + C:09B1H LINE# 1788 + C:09B1H LINE# 1789 + C:09B3H LINE# 1790 + C:09DEH LINE# 1791 + C:09E5H LINE# 1792 + C:09E7H LINE# 1794 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 34 + + + C:09E7H LINE# 1795 + C:09EEH LINE# 1796 + C:0A01H LINE# 1797 + C:0A14H LINE# 1798 + C:0A27H LINE# 1799 + C:0A38H LINE# 1801 + C:0A45H LINE# 1802 + C:0A53H LINE# 1803 + C:0A55H LINE# 1804 + C:0A55H LINE# 1805 + C:0A55H LINE# 1806 + C:0A5BH LINE# 1851 + C:0A5BH LINE# 1852 + C:0A81H LINE# 1854 + C:0AB3H LINE# 1857 + C:0ABFH LINE# 1858 + C:0AC6H LINE# 1861 + C:0ACBH LINE# 1862 + C:0AD1H LINE# 1867 + C:0ADBH LINE# 1869 + C:0ADBH LINE# 1872 + C:0AE4H LINE# 1874 + C:0AF0H LINE# 1875 + C:0AF0H LINE# 1876 + C:0AF2H LINE# 1877 + C:0B1DH LINE# 1878 + C:0B24H LINE# 1879 + C:0B26H LINE# 1881 + C:0B26H LINE# 1883 + C:0B2DH LINE# 1884 + C:0B40H LINE# 1885 + C:0B53H LINE# 1886 + C:0B66H LINE# 1887 + C:0B77H LINE# 1889 + C:0B86H LINE# 1890 + C:0B95H LINE# 1891 + C:0B97H LINE# 1892 + C:0B97H LINE# 1893 + C:0B97H LINE# 1894 + C:0B9DH LINE# 1902 + C:0B9DH LINE# 1903 + C:0BC3H LINE# 1905 + C:0BF5H LINE# 1906 + C:0C01H LINE# 1907 + C:0C08H LINE# 1908 + C:0C0DH LINE# 1909 + C:0C13H LINE# 1914 + C:0C1DH LINE# 1916 + C:0C1DH LINE# 1917 + C:0C26H LINE# 1919 + C:0C3BH LINE# 1920 + C:0C3BH LINE# 1921 + C:0C3DH LINE# 1922 + C:0C68H LINE# 1923 + C:0C6FH LINE# 1924 + C:0C71H LINE# 1926 + C:0C71H LINE# 1927 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 35 + + + C:0C78H LINE# 1928 + C:0C8BH LINE# 1929 + C:0C9EH LINE# 1930 + C:0CB1H LINE# 1931 + C:0CC2H LINE# 1933 + C:0CD1H LINE# 1934 + C:0CE0H LINE# 1935 + C:0CE2H LINE# 1936 + C:0CE2H LINE# 1937 + C:0CE2H LINE# 1938 + C:0CE8H LINE# 1941 + C:0CE8H LINE# 1942 + C:0D0EH LINE# 1944 + C:0D40H LINE# 1945 + C:0D45H LINE# 1946 + C:0D4CH LINE# 1947 + C:0D51H LINE# 1948 + C:0D57H LINE# 1953 + C:0D61H LINE# 1955 + C:0D61H LINE# 1956 + C:0D6AH LINE# 1958 + C:0D98H LINE# 1959 + C:0D98H LINE# 1960 + C:0D9AH LINE# 1961 + C:0DC5H LINE# 1962 + C:0DCCH LINE# 1963 + C:0DCEH LINE# 1965 + C:0DCEH LINE# 1966 + C:0DD5H LINE# 1967 + C:0DE8H LINE# 1968 + C:0DFBH LINE# 1969 + C:0E0EH LINE# 1970 + C:0E1FH LINE# 1972 + C:0E2EH LINE# 1973 + C:0E3DH LINE# 1974 + C:0E3FH LINE# 1975 + C:0E3FH LINE# 1976 + C:0E3FH LINE# 1977 + C:0E45H LINE# 1980 + C:0E45H LINE# 1981 + C:0E6BH LINE# 1983 + C:0E9DH LINE# 1984 + C:0EA9H LINE# 1985 + C:0EB0H LINE# 1986 + C:0EB5H LINE# 1987 + C:0EBBH LINE# 1992 + C:0EC5H LINE# 1994 + C:0EC5H LINE# 1995 + C:0ECEH LINE# 1996 + C:0EDAH LINE# 1997 + C:0EDAH LINE# 1998 + C:0EDCH LINE# 1999 + C:0F07H LINE# 2000 + C:0F0EH LINE# 2001 + C:0F10H LINE# 2003 + C:0F10H LINE# 2004 + C:0F17H LINE# 2005 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 36 + + + C:0F2AH LINE# 2006 + C:0F3DH LINE# 2007 + C:0F50H LINE# 2008 + C:0F61H LINE# 2010 + C:0F70H LINE# 2011 + C:0F7FH LINE# 2012 + C:0F81H LINE# 2013 + C:0F81H LINE# 2014 + C:0F81H LINE# 2015 + C:0F87H LINE# 2016 + C:0F89H LINE# 2018 + C:0FB6H LINE# 2020 + C:0FEEH LINE# 2021 + C:0FF5H LINE# 2022 + C:0FFDH LINE# 2023 + C:1000H LINE# 2027 + C:100DH LINE# 2029 + C:100DH LINE# 2030 + C:1010H LINE# 2031 + C:101BH LINE# 2032 + C:1026H LINE# 2033 + C:102BH LINE# 2034 + C:102DH LINE# 2039 + C:1034H LINE# 2041 + C:1034H LINE# 2042 + C:104BH LINE# 2043 + C:1062H LINE# 2044 + C:1079H LINE# 2045 + C:1094H LINE# 2046 + C:1094H LINE# 2047 + C:10A3H LINE# 2048 + C:10A5H LINE# 2050 + C:10ACH LINE# 2051 + C:10B9H LINE# 2052 + C:10BCH LINE# 2053 + ------- ENDPROC MENU + ------- PROC SETTINGS + ------- DO + D:005BH SYMBOL dat + C:1D61H SYMBOL end + ------- ENDDO + C:1752H LINE# 2055 + C:1752H LINE# 2056 + C:1752H LINE# 2058 + C:1755H LINE# 2059 + C:1759H LINE# 2060 + C:175BH LINE# 2062 + C:1760H LINE# 2063 + C:179FH LINE# 2064 + C:17ABH LINE# 2065 + C:17B2H LINE# 2066 + C:17B7H LINE# 2067 + C:17BDH LINE# 2068 + C:17C6H LINE# 2072 + C:17CCH LINE# 2074 + C:17CCH LINE# 2075 + C:17D5H LINE# 2076 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 37 + + + C:17D5H LINE# 2079 + C:17DCH LINE# 2080 + C:181DH LINE# 2081 + C:1829H LINE# 2082 + C:1830H LINE# 2083 + C:1835H LINE# 2084 + C:183BH LINE# 2085 + C:1844H LINE# 2090 + C:184FH LINE# 2096 + C:1853H LINE# 2098 + C:1853H LINE# 2099 + C:185CH LINE# 2100 + C:185CH LINE# 2103 + C:1863H LINE# 2104 + C:18A4H LINE# 2105 + C:18B0H LINE# 2106 + C:18B7H LINE# 2107 + C:18BCH LINE# 2108 + C:18C2H LINE# 2109 + C:18C9H LINE# 2114 + C:18D4H LINE# 2120 + C:18D8H LINE# 2122 + C:18D8H LINE# 2123 + C:18DFH LINE# 2124 + C:18DFH LINE# 2126 + C:1902H LINE# 2127 + C:190EH LINE# 2128 + C:1915H LINE# 2131 + C:191AH LINE# 2132 + C:1926H LINE# 2134 + C:192CH LINE# 2138 + C:1932H LINE# 2140 + C:1932H LINE# 2141 + C:193BH LINE# 2142 + C:1944H LINE# 2143 + C:1944H LINE# 2145 + C:1971H LINE# 2146 + C:1978H LINE# 2150 + C:198AH LINE# 2152 + C:198AH LINE# 2153 + C:198DH LINE# 2154 + C:199CH LINE# 2155 + C:199EH LINE# 2156 + C:19A0H LINE# 2160 + C:19ABH LINE# 2166 + C:19AFH LINE# 2168 + C:19AFH LINE# 2169 + C:19B8H LINE# 2170 + C:19C5H LINE# 2171 + C:19C5H LINE# 2173 + C:19C8H LINE# 2174 + C:19C8H LINE# 2175 + C:19F1H LINE# 2177 + C:19F4H LINE# 2178 + C:19F4H LINE# 2181 + C:1A1AH LINE# 2182 + C:1A34H LINE# 2183 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 38 + + + C:1A3BH LINE# 2187 + C:1A4DH LINE# 2189 + C:1A4DH LINE# 2190 + C:1A54H LINE# 2193 + C:1A5DH LINE# 2196 + C:1A63H LINE# 2197 + C:1A63H LINE# 2198 + C:1A66H LINE# 2201 + C:1A6EH LINE# 2202 + C:1A6EH LINE# 2210 + C:1A88H LINE# 2211 + C:1A8AH LINE# 2215 + C:1A95H LINE# 2221 + C:1A99H LINE# 2223 + C:1A99H LINE# 2224 + C:1AA2H LINE# 2225 + C:1AA2H LINE# 2227 + C:1ADAH LINE# 2228 + C:1AE1H LINE# 2229 + C:1AE7H LINE# 2230 + C:1AEDH LINE# 2231 + C:1AF4H LINE# 2235 + C:1B06H LINE# 2237 + C:1B06H LINE# 2238 + C:1B11H LINE# 2239 + C:1B1CH LINE# 2242 + C:1B22H LINE# 2243 + C:1B22H LINE# 2244 + C:1B24H LINE# 2245 + C:1B30H LINE# 2246 + C:1B30H LINE# 2253 + C:1B34H LINE# 2254 + C:1B3BH LINE# 2255 + C:1B43H LINE# 2256 + C:1B4EH LINE# 2257 + C:1B55H LINE# 2258 + C:1B57H LINE# 2262 + C:1B62H LINE# 2268 + C:1B66H LINE# 2270 + C:1B66H LINE# 2271 + C:1B6FH LINE# 2272 + C:1B6FH LINE# 2274 + C:1B85H LINE# 2275 + C:1B98H LINE# 2276 + C:1BC8H LINE# 2278 + C:1BF5H LINE# 2279 + C:1BFCH LINE# 2283 + C:1C0EH LINE# 2285 + C:1C0EH LINE# 2286 + C:1C11H LINE# 2287 + C:1C20H LINE# 2290 + C:1C26H LINE# 2291 + C:1C26H LINE# 2292 + C:1C29H LINE# 2293 + C:1C31H LINE# 2294 + C:1C31H LINE# 2301 + C:1C36H LINE# 2302 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 39 + + + C:1C38H LINE# 2306 + C:1C43H LINE# 2312 + C:1C47H LINE# 2314 + C:1C47H LINE# 2315 + C:1C50H LINE# 2316 + C:1C50H LINE# 2318 + C:1C7DH LINE# 2319 + C:1C84H LINE# 2323 + C:1C96H LINE# 2325 + C:1C96H LINE# 2326 + C:1C99H LINE# 2327 + C:1CA8H LINE# 2330 + C:1CAEH LINE# 2331 + C:1CAEH LINE# 2332 + C:1CB1H LINE# 2333 + C:1CB9H LINE# 2334 + C:1CB9H LINE# 2341 + C:1CBEH LINE# 2342 + C:1CC0H LINE# 2346 + C:1CCBH LINE# 2352 + C:1CCFH LINE# 2354 + C:1CCFH LINE# 2355 + C:1CD8H LINE# 2356 + C:1CD8H LINE# 2358 + C:1CDAH LINE# 2359 + C:1D07H LINE# 2360 + C:1D0EH LINE# 2364 + C:1D20H LINE# 2366 + C:1D20H LINE# 2367 + C:1D23H LINE# 2368 + C:1D32H LINE# 2371 + C:1D38H LINE# 2372 + C:1D38H LINE# 2373 + C:1D3BH LINE# 2374 + C:1D43H LINE# 2375 + C:1D43H LINE# 2382 + C:1D48H LINE# 2383 + C:1D4AH LINE# 2387 + C:1D52H LINE# 2393 + C:1D56H LINE# 2395 + C:1D56H LINE# 2396 + C:1D5FH LINE# 2397 + C:1D5FH LINE# 2398 + C:1D61H LINE# 2400 + C:1D61H LINE# 2401 + C:1D68H LINE# 2402 + C:1D75H LINE# 2403 + C:1D78H LINE# 2404 + ------- ENDPROC SETTINGS + ------- PROC SYS_PARAMTS + ------- DO + D:005BH SYMBOL dat + ------- ENDDO + C:2415H LINE# 2406 + C:2415H LINE# 2407 + C:2415H LINE# 2409 + C:2418H LINE# 2410 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 40 + + + C:241AH LINE# 2411 + C:241CH LINE# 2414 + C:2447H LINE# 2415 + C:244EH LINE# 2416 + C:2455H LINE# 2419 + C:245DH LINE# 2420 + C:245FH LINE# 2424 + C:2471H LINE# 2426 + C:2471H LINE# 2427 + C:2474H LINE# 2428 + C:247FH LINE# 2429 + C:248AH LINE# 2430 + C:2492H LINE# 2431 + C:2494H LINE# 2435 + C:249FH LINE# 2441 + C:24A3H LINE# 2443 + C:24A3H LINE# 2444 + C:24AAH LINE# 2445 + C:24AAH LINE# 2447 + C:24D5H LINE# 2448 + C:24DCH LINE# 2449 + C:24E3H LINE# 2452 + C:24EBH LINE# 2453 + C:24EDH LINE# 2457 + C:24FFH LINE# 2459 + C:24FFH LINE# 2460 + C:2502H LINE# 2461 + C:250DH LINE# 2462 + C:2518H LINE# 2463 + C:2520H LINE# 2464 + C:2522H LINE# 2468 + C:252DH LINE# 2474 + C:2531H LINE# 2476 + C:2531H LINE# 2477 + C:2538H LINE# 2478 + C:2538H LINE# 2481 + C:2563H LINE# 2482 + C:256CH LINE# 2483 + C:2573H LINE# 2484 + C:257AH LINE# 2485 + C:257FH LINE# 2486 + C:2585H LINE# 2487 + C:258EH LINE# 2492 + C:2599H LINE# 2498 + C:259DH LINE# 2500 + C:259DH LINE# 2501 + C:25A6H LINE# 2502 + C:25A6H LINE# 2504 + C:25D1H LINE# 2505 + C:25D8H LINE# 2506 + C:25DFH LINE# 2509 + C:25E7H LINE# 2510 + C:25E9H LINE# 2514 + C:25FBH LINE# 2516 + C:25FBH LINE# 2517 + C:25FEH LINE# 2518 + C:2609H LINE# 2519 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 41 + + + C:2614H LINE# 2520 + C:261CH LINE# 2521 + C:261EH LINE# 2525 + C:2629H LINE# 2531 + C:262DH LINE# 2533 + C:262DH LINE# 2534 + C:2634H LINE# 2535 + C:2634H LINE# 2537 + C:265FH LINE# 2538 + C:2666H LINE# 2539 + C:266DH LINE# 2542 + C:2675H LINE# 2543 + C:2677H LINE# 2547 + C:2689H LINE# 2549 + C:2689H LINE# 2550 + C:268CH LINE# 2551 + C:2697H LINE# 2552 + C:26A2H LINE# 2553 + C:26AAH LINE# 2554 + C:26ACH LINE# 2558 + C:26B7H LINE# 2564 + C:26BBH LINE# 2566 + C:26BBH LINE# 2567 + C:26C2H LINE# 2568 + C:26C2H LINE# 2570 + C:26EDH LINE# 2571 + C:26F4H LINE# 2572 + C:26FBH LINE# 2575 + C:2703H LINE# 2576 + C:2705H LINE# 2580 + C:2717H LINE# 2582 + C:2717H LINE# 2583 + C:271AH LINE# 2584 + C:2725H LINE# 2585 + C:2730H LINE# 2586 + C:2738H LINE# 2587 + C:273AH LINE# 2591 + C:2742H LINE# 2597 + C:2746H LINE# 2599 + C:2746H LINE# 2600 + C:274DH LINE# 2601 + C:274DH LINE# 2604 + C:2756H LINE# 2605 + C:2759H LINE# 2606 + C:275BH LINE# 2607 + ------- ENDPROC SYS_PARAMTS + ------- PROC _BCD2BIN + D:0003H SYMBOL no + ------- DO + D:005DH SYMBOL bin_val + D:0082H SYMBOL mul + D:0002H SYMBOL i + ------- ENDDO + C:482FH LINE# 2653 + C:4831H LINE# 2654 + C:4831H LINE# 2655 + C:4834H LINE# 2657 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 42 + + + C:4839H LINE# 2658 + C:4849H LINE# 2659 + C:4849H LINE# 2660 + C:4862H LINE# 2661 + C:4871H LINE# 2662 + C:4874H LINE# 2663 + C:4878H LINE# 2664 + ------- ENDPROC _BCD2BIN + C:4728H SYMBOL L?0777 + C:4729H SYMBOL L?0778 + ------- PROC L?0776 + ------- ENDPROC L?0776 + C:4728H SYMBOL L?0777 + C:4729H SYMBOL L?0778 + ------- PROC _INCDEC + D:0007H SYMBOL name + D:0001H SYMBOL max + D:0003H SYMBOL min + C:472FH LINE# 2666 + C:4731H LINE# 2667 + C:4731H LINE# 2671 + C:4738H LINE# 2673 + C:4738H LINE# 2674 + C:4739H LINE# 2675 + C:4746H LINE# 2676 + C:4747H LINE# 2680 + C:474BH LINE# 2682 + C:474BH LINE# 2683 + C:474CH LINE# 2684 + C:4759H LINE# 2685 + C:475AH LINE# 2688 + C:4781H LINE# 2689 + C:4781H LINE# 2690 + C:4785H LINE# 2691 + C:4787H LINE# 2692 + C:4787H LINE# 2694 + C:4787H LINE# 2695 + ------- ENDPROC _INCDEC + ------- PROC CAL + ------- DO + D:005BH SYMBOL j + ------- ENDDO + C:3060H LINE# 2697 + C:3060H LINE# 2698 + C:3060H LINE# 2701 + C:3063H LINE# 2702 + C:3063H LINE# 2703 + C:308EH LINE# 2705 + C:308EH LINE# 2708 + C:30B9H LINE# 2709 + C:30C0H LINE# 2710 + C:30EBH LINE# 2711 + C:30F1H LINE# 2715 + C:30FEH LINE# 2717 + C:3107H LINE# 2722 + C:310DH LINE# 2724 + C:310DH LINE# 2729 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 43 + + + C:311FH LINE# 2732 + C:311FH LINE# 2736 + C:312EH LINE# 2739 + C:3159H LINE# 2740 + C:315BH LINE# 2741 + C:315DH LINE# 2742 + C:315FH LINE# 2743 + C:3162H LINE# 2744 + C:3164H LINE# 2746 + C:3167H LINE# 2747 + C:3175H LINE# 2748 + C:3177H LINE# 2749 + C:317AH LINE# 2750 + C:317AH LINE# 2751 + C:3192H LINE# 2752 + C:31A4H LINE# 2753 + C:31ABH LINE# 2754 + C:31ADH LINE# 2758 + C:31BAH LINE# 2760 + C:31BAH LINE# 2761 + C:31C5H LINE# 2762 + C:31D3H LINE# 2767 + C:31DFH LINE# 2769 + C:31DFH LINE# 2770 + C:31E1H LINE# 2771 + C:31EBH LINE# 2772 + C:31EBH LINE# 2779 + C:31EDH LINE# 2783 + C:31F3H LINE# 2785 + C:31F3H LINE# 2789 + C:31FAH LINE# 2791 + C:3202H LINE# 2793 + C:3202H LINE# 2797 + C:3208H LINE# 2799 + C:3211H LINE# 2800 + C:3213H LINE# 2801 + C:321FH LINE# 2802 + C:322BH LINE# 2803 + C:3232H LINE# 2804 + C:3234H LINE# 2805 + ------- ENDPROC CAL + ------- PROC CAL_FIND + C:39D9H LINE# 2807 + C:39D9H LINE# 2808 + C:39D9H LINE# 2809 + C:39DFH LINE# 2810 + C:39DFH LINE# 2811 + C:39E1H LINE# 2812 + C:39F4H LINE# 2813 + C:3A04H LINE# 2815 + C:3A1EH LINE# 2816 + C:3A30H LINE# 2818 + C:3A37H LINE# 2819 + C:3A37H LINE# 2820 + C:3A5CH LINE# 2821 + C:3A63H LINE# 2823 + C:3A67H LINE# 2824 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 44 + + + C:3A70H LINE# 2825 + C:3A79H LINE# 2826 + C:3AA4H LINE# 2827 + C:3AABH LINE# 2828 + C:3AAEH LINE# 2829 + C:3AAEH LINE# 2831 + C:3AAEH LINE# 2832 + C:3AD9H LINE# 2833 + C:3AE0H LINE# 2834 + C:3AE3H LINE# 2835 + C:3AE6H LINE# 2836 + C:3AE6H LINE# 2837 + C:3AE6H LINE# 2838 + ------- ENDPROC CAL_FIND + ------- PROC CALIBRATE + C:48C2H LINE# 2840 + C:48C2H LINE# 2841 + C:48C2H LINE# 2842 + C:48D2H LINE# 2843 + C:48E2H LINE# 2844 + C:4903H LINE# 2845 + C:490AH LINE# 2847 + ------- ENDPROC CALIBRATE + ------- PROC CAL_RST + C:417DH LINE# 2849 + C:417DH LINE# 2850 + C:417DH LINE# 2851 + C:4180H LINE# 2852 + C:4180H LINE# 2853 + C:41ABH LINE# 2855 + C:41ABH LINE# 2858 + C:41D6H LINE# 2862 + C:41E3H LINE# 2864 + C:41ECH LINE# 2869 + C:41F2H LINE# 2871 + C:41F2H LINE# 2875 + C:4201H LINE# 2878 + C:4201H LINE# 2882 + C:4207H LINE# 2884 + C:4210H LINE# 2885 + C:4213H LINE# 2886 + C:4217H LINE# 2887 + C:421EH LINE# 2888 + C:4225H LINE# 2889 + C:4228H LINE# 2890 + ------- ENDPROC CAL_RST + ------- PROC SELECT_MENU + ------- DO + D:005AH SYMBOL no + ------- ENDDO + C:275CH LINE# 2892 + C:275CH LINE# 2893 + C:275CH LINE# 2894 + C:275FH LINE# 2895 + C:2762H LINE# 2899 + C:2775H LINE# 2901 + C:2775H LINE# 2902 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 45 + + + C:277FH LINE# 2904 + C:278AH LINE# 2905 + C:278DH LINE# 2906 + C:27BEH LINE# 2907 + C:27BEH LINE# 2908 + C:27BEH LINE# 2909 + C:27E6H LINE# 2910 + C:27E9H LINE# 2911 + C:27E9H LINE# 2912 + C:2811H LINE# 2913 + C:2814H LINE# 2914 + C:2814H LINE# 2915 + C:283CH LINE# 2916 + C:283FH LINE# 2917 + C:283FH LINE# 2918 + C:2867H LINE# 2919 + C:286AH LINE# 2920 + C:286AH LINE# 2921 + C:2892H LINE# 2922 + C:2895H LINE# 2923 + C:2895H LINE# 2924 + C:28BDH LINE# 2925 + C:28C0H LINE# 2926 + C:28C0H LINE# 2927 + C:28E8H LINE# 2928 + C:28EBH LINE# 2929 + C:28EBH LINE# 2930 + C:2913H LINE# 2931 + C:2915H LINE# 2932 + C:2915H LINE# 2933 + C:2940H LINE# 2934 + C:2947H LINE# 2935 + C:2972H LINE# 2936 + C:2975H LINE# 2937 + C:2975H LINE# 2938 + C:2975H LINE# 2942 + C:297CH LINE# 2944 + C:29ADH LINE# 2945 + C:29ADH LINE# 2947 + C:29ADH LINE# 2948 + C:29B0H LINE# 2949 + C:29B3H LINE# 2950 + C:29B3H LINE# 2951 + C:29B3H LINE# 2952 + C:29B6H LINE# 2953 + C:29B6H LINE# 2954 + C:29B6H LINE# 2955 + C:29B9H LINE# 2956 + C:29B9H LINE# 2957 + C:29B9H LINE# 2958 + C:29BCH LINE# 2959 + C:29BCH LINE# 2960 + C:29BCH LINE# 2961 + C:29BFH LINE# 2962 + C:29BFH LINE# 2963 + C:29BFH LINE# 2964 + C:29C2H LINE# 2965 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 46 + + + C:29C2H LINE# 2966 + C:29C2H LINE# 2967 + C:29C5H LINE# 2968 + C:29C5H LINE# 2969 + C:29C5H LINE# 2970 + C:29C8H LINE# 2971 + C:29C8H LINE# 2972 + C:29C8H LINE# 2973 + C:29CBH LINE# 2974 + C:29CBH LINE# 2975 + C:29CBH LINE# 2976 + ------- ENDPROC SELECT_MENU + ------- PROC DISPLAY_TOTAL_CUMULATIVE + C:3CE5H LINE# 2978 + C:3CE5H LINE# 2979 + C:3CE5H LINE# 2980 + C:3CEEH LINE# 2981 + C:3CF0H LINE# 2982 + C:3D9FH LINE# 2984 + C:3DAAH LINE# 2988 + C:3DB7H LINE# 2990 + C:3DC0H LINE# 2991 + ------- ENDPROC DISPLAY_TOTAL_CUMULATIVE + ------- PROC DISPLAY_TOTAL_BATCH + C:364DH LINE# 2993 + C:364DH LINE# 2994 + C:364DH LINE# 2995 + C:373AH LINE# 3002 + C:3765H LINE# 3003 + C:3771H LINE# 3007 + C:377EH LINE# 3009 + C:3787H LINE# 3010 + ------- ENDPROC DISPLAY_TOTAL_BATCH + ------- PROC DISPLAY_CURRENT_CUMULATIVE + ------- DO + D:005BH SYMBOL sdat + D:005CH SYMBOL b + ------- ENDDO + C:3BE6H LINE# 3012 + C:3BE6H LINE# 3013 + C:3BE6H LINE# 3014 + C:3BECH LINE# 3016 + C:3BF5H LINE# 3017 + C:3BF7H LINE# 3018 + C:3C01H LINE# 3019 + C:3C06H LINE# 3024 + C:3C0CH LINE# 3026 + C:3C15H LINE# 3027 + C:3C40H LINE# 3028 + C:3C47H LINE# 3030 + C:3C4AH LINE# 3031 + C:3C4CH LINE# 3035 + C:3C61H LINE# 3037 + C:3C61H LINE# 3038 + C:3C6CH LINE# 3039 + C:3C81H LINE# 3041 + C:3C85H LINE# 3042 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 47 + + + C:3C8CH LINE# 3044 + C:3C91H LINE# 3045 + C:3C95H LINE# 3046 + C:3C9AH LINE# 3047 + C:3C9EH LINE# 3048 + C:3CA3H LINE# 3049 + C:3CA7H LINE# 3050 + C:3CACH LINE# 3051 + C:3CB0H LINE# 3052 + C:3CB5H LINE# 3053 + C:3CB9H LINE# 3054 + C:3CBEH LINE# 3055 + C:3CC8H LINE# 3059 + C:3CD2H LINE# 3060 + C:3CD5H LINE# 3064 + C:3CDBH LINE# 3066 + C:3CE4H LINE# 3099 + ------- ENDPROC DISPLAY_CURRENT_CUMULATIVE + ------- PROC DISPLAY_CURRENT_BATCH + ------- DO + D:005BH SYMBOL sdat + D:005CH SYMBOL b + ------- ENDDO + C:33A0H LINE# 3101 + C:33A0H LINE# 3102 + C:33A0H LINE# 3103 + C:33A6H LINE# 3104 + C:33AFH LINE# 3105 + C:33B1H LINE# 3106 + C:33BBH LINE# 3107 + C:33C0H LINE# 3112 + C:33C6H LINE# 3114 + C:33CFH LINE# 3117 + C:33FBH LINE# 3118 + C:3402H LINE# 3119 + C:3405H LINE# 3121 + C:3407H LINE# 3125 + C:3422H LINE# 3127 + C:3422H LINE# 3128 + C:342DH LINE# 3129 + C:3442H LINE# 3131 + C:3446H LINE# 3132 + C:344DH LINE# 3134 + C:3452H LINE# 3135 + C:3463H LINE# 3136 + C:3468H LINE# 3137 + C:3479H LINE# 3138 + C:347EH LINE# 3139 + C:348FH LINE# 3140 + C:3494H LINE# 3141 + C:34A5H LINE# 3142 + C:34AAH LINE# 3143 + C:34BBH LINE# 3144 + C:34C0H LINE# 3145 + C:34E0H LINE# 3148 + C:34E5H LINE# 3149 + C:34E8H LINE# 3153 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 48 + + + C:34F7H LINE# 3155 + C:34F9H LINE# 3156 + ------- ENDPROC DISPLAY_CURRENT_BATCH + ------- PROC CLEAR_CURRENT_CUMULATIVE_BATCH + C:3235H LINE# 3192 + C:3235H LINE# 3193 + C:3235H LINE# 3194 + C:3260H LINE# 3198 + C:3272H LINE# 3200 + C:3272H LINE# 3201 + C:327CH LINE# 3202 + C:327EH LINE# 3206 + C:3288H LINE# 3208 + C:3288H LINE# 3209 + C:3291H LINE# 3210 + C:3297H LINE# 3211 + C:329EH LINE# 3212 + C:329EH LINE# 3213 + C:32B0H LINE# 3214 + C:32B9H LINE# 3215 + C:32BFH LINE# 3216 + C:32C2H LINE# 3217 + C:32C9H LINE# 3218 + C:32C9H LINE# 3219 + C:32DBH LINE# 3220 + C:32E4H LINE# 3221 + C:32EAH LINE# 3222 + C:32EDH LINE# 3223 + C:32F4H LINE# 3224 + C:32F4H LINE# 3225 + C:3306H LINE# 3226 + C:330FH LINE# 3227 + C:3315H LINE# 3228 + C:3318H LINE# 3229 + C:331FH LINE# 3230 + C:331FH LINE# 3231 + C:3331H LINE# 3232 + C:333AH LINE# 3233 + C:3340H LINE# 3234 + C:3342H LINE# 3235 + C:3349H LINE# 3236 + C:3349H LINE# 3237 + C:335BH LINE# 3238 + C:3364H LINE# 3239 + C:336AH LINE# 3240 + C:336CH LINE# 3241 + C:337BH LINE# 3242 + C:337BH LINE# 3243 + C:338DH LINE# 3244 + C:3396H LINE# 3245 + C:339FH LINE# 3246 + C:339FH LINE# 3247 + C:339FH LINE# 3248 + ------- ENDPROC CLEAR_CURRENT_CUMULATIVE_BATCH + ------- PROC CLEAR_BATCH_CUMULATIVE + C:3788H LINE# 3250 + C:3788H LINE# 3251 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 49 + + + C:3788H LINE# 3252 + C:37B3H LINE# 3256 + C:37C5H LINE# 3258 + C:37C5H LINE# 3259 + C:37CFH LINE# 3260 + C:37D1H LINE# 3264 + C:37DBH LINE# 3266 + C:37DBH LINE# 3267 + C:37E4H LINE# 3268 + C:37EAH LINE# 3270 + C:37FCH LINE# 3271 + C:3805H LINE# 3272 + C:380EH LINE# 3274 + C:3820H LINE# 3275 + C:3829H LINE# 3276 + C:3832H LINE# 3278 + C:3844H LINE# 3279 + C:384DH LINE# 3280 + C:3856H LINE# 3282 + C:3868H LINE# 3283 + C:3871H LINE# 3284 + C:387AH LINE# 3286 + C:388CH LINE# 3287 + C:3895H LINE# 3288 + C:389EH LINE# 3290 + C:38B0H LINE# 3291 + C:38B9H LINE# 3292 + C:38C2H LINE# 3293 + C:38C2H LINE# 3294 + ------- ENDPROC CLEAR_BATCH_CUMULATIVE + ------- ENDMOD MAIN + + ------- MODULE SER_DISP + C:0000H SYMBOL _ICE_DUMMY_ + C:4A45H PUBLIC h_7 + C:4950H PUBLIC display_name + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + B:00A8H.7 PUBLIC EA + D:00A8H PUBLIC IE + C:4229H PUBLIC _long2bcd + D:00B8H PUBLIC IP + C:4A64H PUBLIC filltronics + C:4C60H PUBLIC _disp + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + B:00A0H.7 PUBLIC ser_data + C:4C45H PUBLIC clr_disp + C:45FFH PUBLIC _batch2bcd + B:00A0H.6 PUBLIC ser_clk + D:00C8H PUBLIC T2CON + C:46C7H PUBLIC display + D:00D0H PUBLIC PSW + ------- PROC DISPLAY + ------- DO + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 50 + + + D:006CH SYMBOL i + D:006DH SYMBOL j + D:006EH SYMBOL temp + ------- ENDDO + C:46C7H LINE# 51 + C:46C7H LINE# 52 + C:46C7H LINE# 55 + C:46C9H LINE# 56 + C:46CCH LINE# 57 + C:46CCH LINE# 58 + C:46E6H LINE# 59 + C:46F2H LINE# 60 + C:46F5H LINE# 61 + C:46F5H LINE# 62 + C:46FEH LINE# 63 + C:4700H LINE# 65 + C:4702H LINE# 66 + C:4703H LINE# 67 + C:4704H LINE# 68 + C:4705H LINE# 69 + C:4707H LINE# 71 + C:470DH LINE# 72 + C:470EH LINE# 73 + C:470FH LINE# 74 + C:4710H LINE# 76 + C:4713H LINE# 77 + C:471CH LINE# 78 + C:4725H LINE# 80 + C:4727H LINE# 81 + ------- ENDPROC DISPLAY + ------- PROC _DISP + D:0007H SYMBOL i1 + D:0004H SYMBOL i2 + D:0002H SYMBOL i3 + D:0062H SYMBOL i4 + D:0064H SYMBOL i5 + D:0066H SYMBOL i6 + D:0068H SYMBOL i7 + D:006AH SYMBOL i8 + C:4C60H LINE# 83 + C:4C60H LINE# 84 + C:4C60H LINE# 85 + C:4C62H LINE# 86 + C:4C64H LINE# 87 + C:4C66H LINE# 88 + C:4C69H LINE# 89 + C:4C6CH LINE# 90 + C:4C6FH LINE# 91 + C:4C72H LINE# 92 + C:4C75H LINE# 93 + ------- ENDPROC _DISP + ------- PROC CLR_DISP + C:4C45H LINE# 96 + C:4C45H LINE# 97 + C:4C45H LINE# 98 + C:4C48H LINE# 99 + C:4C4BH LINE# 100 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 51 + + + C:4C4EH LINE# 101 + C:4C51H LINE# 102 + C:4C54H LINE# 103 + C:4C57H LINE# 104 + C:4C5AH LINE# 105 + C:4C5DH LINE# 106 + ------- ENDPROC CLR_DISP + ------- PROC _LONG2BCD + D:005AH SYMBOL value + D:005EH SYMBOL no + ------- DO + D:005FH SYMBOL i + ------- ENDDO + C:4229H LINE# 109 + C:4231H LINE# 110 + C:4231H LINE# 113 + C:4244H LINE# 114 + C:4244H LINE# 115 + C:425EH LINE# 116 + C:4290H LINE# 117 + C:42A9H LINE# 118 + C:42ACH LINE# 119 + C:42B0H LINE# 120 + C:42C0H LINE# 121 + ------- ENDPROC _LONG2BCD + ------- PROC _BATCH2BCD + D:005BH SYMBOL value + D:005DH SYMBOL no + ------- DO + D:005EH SYMBOL i + ------- ENDDO + C:45FFH LINE# 124 + C:4605H LINE# 125 + C:4605H LINE# 128 + C:4618H LINE# 129 + C:4618H LINE# 130 + C:462AH LINE# 131 + C:4643H LINE# 132 + C:4652H LINE# 133 + C:4655H LINE# 134 + C:4659H LINE# 135 + C:465CH LINE# 136 + C:465FH LINE# 137 + C:4662H LINE# 138 + ------- ENDPROC _BATCH2BCD + ------- PROC DISPLAY_NAME + ------- DO + D:0058H SYMBOL i + D:0007H SYMBOL j + ------- ENDDO + C:4950H LINE# 141 + C:4950H LINE# 142 + C:4950H LINE# 145 + C:4953H LINE# 146 + C:4953H LINE# 147 + C:4968H LINE# 148 + C:496FH LINE# 149 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 52 + + + C:4981H LINE# 150 + C:4984H LINE# 151 + C:498FH LINE# 152 + ------- ENDPROC DISPLAY_NAME + ------- ENDMOD SER_DISP + + ------- MODULE UTILITY + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + C:4CC1H PUBLIC rst_wdt + D:00A8H PUBLIC IE + C:4A77H PUBLIC _delay + D:00B8H PUBLIC IP + C:4C8AH PUBLIC _bcd2int + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00A6H PUBLIC wdt + D:00C8H PUBLIC T2CON + C:4990H PUBLIC _arr_cmp + C:4C29H PUBLIC _arr_cpy + D:00D0H PUBLIC PSW + ------- PROC _DELAY + D:0063H SYMBOL del + ------- DO + D:0065H SYMBOL j + D:0006H SYMBOL i + ------- ENDDO + C:4A77H LINE# 18 + C:4A7BH LINE# 19 + C:4A7BH LINE# 22 + C:4A8BH LINE# 23 + C:4A8BH LINE# 24 + C:4A99H LINE# 25 + C:4A9CH LINE# 26 + C:4AA6H LINE# 27 + ------- ENDPROC _DELAY + ------- PROC _ARR_CMP + D:005AH SYMBOL arr1 + D:005DH SYMBOL arr2 + D:0060H SYMBOL len + ------- DO + B:0025H.0 SYMBOL b + D:0007H SYMBOL a + ------- ENDDO + C:4990H LINE# 29 + C:4996H LINE# 30 + C:4996H LINE# 31 + C:4998H LINE# 33 + C:49A8H LINE# 34 + C:49A8H LINE# 35 + C:49CAH LINE# 36 + C:49CDH LINE# 37 + C:49CFH LINE# 38 + ------- ENDPROC _ARR_CMP + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 53 + + + ------- PROC _ARR_CPY + D:0001H SYMBOL dest + D:0005H SYMBOL src + D:0002H SYMBOL len + ------- DO + D:0007H SYMBOL a + ------- ENDDO + C:4C29H LINE# 40 + C:4C2BH LINE# 41 + C:4C2BH LINE# 43 + C:4C39H LINE# 44 + C:4C39H LINE# 45 + C:4C3FH LINE# 46 + C:4C41H LINE# 47 + C:4C44H LINE# 48 + ------- ENDPROC _ARR_CPY + ------- PROC RST_WDT + C:4CC1H LINE# 50 + C:4CC1H LINE# 51 + C:4CC1H LINE# 52 + C:4CC4H LINE# 53 + C:4CC7H LINE# 54 + ------- ENDPROC RST_WDT + ------- PROC _BCD2INT + D:0007H SYMBOL bcd + C:4C8AH LINE# 56 + C:4C8AH LINE# 57 + C:4C8AH LINE# 58 + C:4C98H LINE# 59 + ------- ENDPROC _BCD2INT + ------- ENDMOD UTILITY + + ------- MODULE EEPROM + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + C:4A0DH PUBLIC _read_eeprom + C:44C8H PUBLIC _RTC_Writelong + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + C:4C0CH PUBLIC read_data + C:4B05H PUBLIC _write_eeprom + C:4BEDH PUBLIC _write_data + C:000EH PUBLIC ack + C:4C99H PUBLIC start + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + B:00B0H.6 PUBLIC sda + B:00B0H.7 PUBLIC scl + C:4CA8H PUBLIC stop + D:00C8H PUBLIC T2CON + C:4B60H PUBLIC _read_RTC + C:4BAAH PUBLIC _write_RTC + D:00D0H PUBLIC PSW + C:3E9DH PUBLIC _RTC_Readlong + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 54 + + + ------- PROC _WRITE_EEPROM + D:005DH SYMBOL wa + D:005EH SYMBOL wd + C:4B05H LINE# 27 + C:4B09H LINE# 28 + C:4B09H LINE# 29 + C:4B0CH LINE# 30 + C:4B0FH LINE# 32 + C:4B16H LINE# 33 + C:4B19H LINE# 34 + C:4B1EH LINE# 35 + C:4B21H LINE# 36 + C:4B26H LINE# 37 + C:4B29H LINE# 38 + C:4B2CH LINE# 39 + ------- ENDPROC _WRITE_EEPROM + ------- PROC _READ_EEPROM + D:005EH SYMBOL wa + ------- DO + D:005FH SYMBOL d1 + ------- ENDDO + C:4A0DH LINE# 42 + C:4A0FH LINE# 43 + C:4A0FH LINE# 46 + C:4A12H LINE# 47 + C:4A15H LINE# 49 + C:4A1CH LINE# 50 + C:4A1FH LINE# 51 + C:4A24H LINE# 52 + C:4A27H LINE# 53 + C:4A2AH LINE# 55 + C:4A32H LINE# 56 + C:4A35H LINE# 57 + C:4A3AH LINE# 58 + C:4A3CH LINE# 59 + C:4A3FH LINE# 60 + C:4A42H LINE# 61 + C:4A44H LINE# 62 + ------- ENDPROC _READ_EEPROM + ------- PROC START + C:4C99H LINE# 64 + C:4C99H LINE# 65 + C:4C99H LINE# 66 + C:4C9BH LINE# 67 + C:4C9DH LINE# 68 + C:4CA0H LINE# 69 + C:4CA2H LINE# 70 + C:4CA5H LINE# 71 + C:4CA7H LINE# 72 + ------- ENDPROC START + ------- PROC STOP + C:4CA8H LINE# 74 + C:4CA8H LINE# 75 + C:4CA8H LINE# 76 + C:4CAAH LINE# 77 + C:4CADH LINE# 78 + C:4CAFH LINE# 79 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 55 + + + C:4CB2H LINE# 80 + C:4CB4H LINE# 81 + ------- ENDPROC STOP + ------- PROC _WRITE_DATA + D:0007H SYMBOL d + ------- DO + D:0006H SYMBOL i + ------- ENDDO + C:4BEDH LINE# 83 + C:4BEDH LINE# 84 + C:4BEDH LINE# 86 + C:4BEFH LINE# 87 + C:4BEFH LINE# 88 + C:4BF7H LINE# 89 + C:4BF9H LINE# 90 + C:4BFCH LINE# 91 + C:4BFEH LINE# 92 + C:4C01H LINE# 93 + C:4C03H LINE# 94 + C:4C07H LINE# 95 + C:4C0BH LINE# 96 + ------- ENDPROC _WRITE_DATA + ------- PROC READ_DATA + ------- DO + D:0006H SYMBOL i + D:0007H SYMBOL d2 + ------- ENDDO + C:4C0CH LINE# 98 + C:4C0CH LINE# 99 + C:4C0CH LINE# 101 + C:4C0EH LINE# 102 + C:4C0FH LINE# 103 + C:4C0FH LINE# 104 + C:4C13H LINE# 105 + C:4C15H LINE# 106 + C:4C18H LINE# 107 + C:4C1AH LINE# 108 + C:4C22H LINE# 109 + C:4C22H LINE# 110 + C:4C26H LINE# 111 + C:4C28H LINE# 112 + C:4C28H LINE# 113 + ------- ENDPROC READ_DATA + ------- PROC L?0022 + ------- ENDPROC L?0022 + ------- PROC ACK + C:000EH LINE# 115 + C:000EH LINE# 116 + C:000EH LINE# 117 + C:0010H LINE# 118 + C:0013H LINE# 119 + C:0015H LINE# 120 + C:0018H LINE# 121 + C:001AH LINE# 122 + ------- ENDPROC ACK + ------- PROC _WRITE_RTC + D:0060H SYMBOL wa + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 56 + + + D:0061H SYMBOL wd + C:4BAAH LINE# 124 + C:4BAEH LINE# 125 + C:4BAEH LINE# 126 + C:4BB1H LINE# 127 + C:4BB1H LINE# 128 + C:4BB1H LINE# 129 + C:4BB4H LINE# 130 + C:4BB9H LINE# 131 + C:4BBCH LINE# 132 + C:4BC1H LINE# 133 + C:4BC4H LINE# 134 + C:4BC7H LINE# 135 + ------- ENDPROC _WRITE_RTC + ------- PROC _READ_RTC + D:005EH SYMBOL wa + ------- DO + D:0007H SYMBOL d1 + ------- ENDDO + C:4B60H LINE# 138 + C:4B62H LINE# 139 + C:4B62H LINE# 142 + C:4B65H LINE# 143 + C:4B65H LINE# 144 + C:4B65H LINE# 145 + C:4B68H LINE# 146 + C:4B6DH LINE# 147 + C:4B70H LINE# 148 + C:4B73H LINE# 149 + C:4B78H LINE# 150 + C:4B7BH LINE# 151 + C:4B7EH LINE# 152 + C:4B80H LINE# 153 + C:4B83H LINE# 154 + ------- ENDPROC _READ_RTC + ------- PROC _RTC_WRITELONG + D:005BH SYMBOL address + D:005CH SYMBOL value + ------- DO + I:000AH SYMBOL four + I:000BH SYMBOL three + I:000CH SYMBOL two + I:000DH SYMBOL one + ------- ENDDO + C:44C8H LINE# 160 + C:44CAH LINE# 161 + C:44CAH LINE# 164 + C:44D2H LINE# 165 + C:44E4H LINE# 166 + C:44F6H LINE# 167 + C:4507H LINE# 170 + C:450EH LINE# 171 + C:4519H LINE# 172 + C:4525H LINE# 173 + ------- ENDPROC _RTC_WRITELONG + ------- PROC _RTC_READLONG + D:005DH SYMBOL address + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 57 + + + ------- DO + I:000AH SYMBOL four + I:000EH SYMBOL three + I:0012H SYMBOL two + I:0016H SYMBOL one + ------- ENDDO + C:3E9DH LINE# 178 + C:3E9FH LINE# 179 + C:3E9FH LINE# 181 + C:3EABH LINE# 182 + C:3EBBH LINE# 183 + C:3ECCH LINE# 184 + C:3EDDH LINE# 187 + C:3F59H LINE# 188 + ------- ENDPROC _RTC_READLONG + ------- ENDMOD EEPROM + + ------- MODULE 4X4_KEY + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + B:0080H.0 PUBLIC R1 + B:0080H.1 PUBLIC R2 + B:0080H.2 PUBLIC R3 + B:0080H.3 PUBLIC R4 + C:434FH PUBLIC Read_Keypad + B:0080H.4 PUBLIC C1 + B:0080H.5 PUBLIC C2 + B:0080H.6 PUBLIC C3 + B:0080H.7 PUBLIC C4 + ------- PROC READ_KEYPAD + C:434FH LINE# 20 + C:434FH LINE# 21 + C:434FH LINE# 22 + C:4351H LINE# 23 + C:4353H LINE# 24 + C:4355H LINE# 25 + C:4357H LINE# 26 + C:4359H LINE# 27 + C:435BH LINE# 28 + C:435DH LINE# 29 + C:435FH LINE# 35 + C:4365H LINE# 36 + C:436BH LINE# 37 + C:4371H LINE# 38 + C:4377H LINE# 39 + C:4379H LINE# 40 + C:437BH LINE# 41 + C:437DH LINE# 42 + C:437FH LINE# 48 + C:4385H LINE# 49 + C:438BH LINE# 50 + C:4391H LINE# 51 + C:4397H LINE# 52 + C:4399H LINE# 53 + C:439BH LINE# 54 + C:439DH LINE# 55 + C:439FH LINE# 61 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 58 + + + C:43A5H LINE# 62 + C:43ABH LINE# 63 + C:43B1H LINE# 64 + C:43B7H LINE# 65 + C:43B9H LINE# 66 + C:43BBH LINE# 67 + C:43BDH LINE# 68 + C:43BFH LINE# 74 + C:43C5H LINE# 75 + C:43CBH LINE# 76 + C:43D1H LINE# 77 + C:43D7H LINE# 79 + C:43D9H LINE# 80 + ------- ENDPROC READ_KEYPAD + ------- ENDMOD 4X4_KEY + + ------- MODULE ADC_AD7780 + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + D:00A8H PUBLIC IE + B:00B0H.4 PUBLIC PDRST + D:00B8H PUBLIC IP + C:4AA7H PUBLIC Read_Adc_AD7780 + C:4531H PUBLIC Get_Adc_Result_AD7780 + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + B:00B0H.3 PUBLIC clk + B:00B0H.2 PUBLIC dout + B:00A8H.0 PUBLIC EX0 + D:00C8H PUBLIC T2CON + D:0008H PUBLIC Adc_Value + D:00D0H PUBLIC PSW + C:4CB5H PUBLIC init_adc_AD7780 + ------- PROC INIT_ADC_AD7780 + C:4CB5H LINE# 33 + C:4CB5H LINE# 34 + C:4CB5H LINE# 35 + C:4CB7H LINE# 36 + C:4CBEH LINE# 37 + C:4CC0H LINE# 38 + ------- ENDPROC INIT_ADC_AD7780 + ------- PROC READ_ADC_AD7780 + ------- DO + D:0056H SYMBOL dat + D:0057H SYMBOL i + ------- ENDDO + C:4AA7H LINE# 40 + C:4AA7H LINE# 41 + C:4AA7H LINE# 42 + C:4AAAH LINE# 44 + C:4AACH LINE# 45 + C:4AACH LINE# 46 + C:4AB2H LINE# 47 + C:4AB4H LINE# 48 + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 59 + + + C:4AB7H LINE# 49 + C:4AB9H LINE# 50 + C:4ABCH LINE# 51 + C:4AC4H LINE# 52 + C:4AC4H LINE# 53 + C:4AC7H LINE# 54 + C:4AD2H LINE# 55 + C:4AD4H LINE# 56 + C:4AD6H LINE# 57 + ------- ENDPROC READ_ADC_AD7780 + ------- PROC GET_ADC_RESULT_AD7780 + C:4531H LINE# 59 + C:4531H LINE# 60 + C:4531H LINE# 61 + C:4534H LINE# 62 + C:4534H LINE# 63 + C:4539H LINE# 64 + C:453EH LINE# 65 + C:4543H LINE# 67 + C:454CH LINE# 68 + C:454EH LINE# 70 + C:455FH LINE# 71 + C:4570H LINE# 72 + C:457CH LINE# 73 + C:457FH LINE# 74 + C:4584H LINE# 75 + C:4586H LINE# 76 + C:4588H LINE# 77 + C:4588H LINE# 78 + C:458DH LINE# 79 + C:458DH LINE# 80 + C:4594H LINE# 82 + C:4596H LINE# 83 + C:4598H LINE# 84 + C:4598H LINE# 85 + ------- ENDPROC GET_ADC_RESULT_AD7780 + ------- ENDMOD ADC_AD7780 + + ------- MODULE ADC_HX711 + C:0000H SYMBOL _ICE_DUMMY_ + ------- ENDMOD ADC_HX711 + + ------- MODULE ?C?SCDIV + C:29CCH PUBLIC ?C?SCDIV + ------- ENDMOD ?C?SCDIV + + ------- MODULE ?C?CLDOPTR + C:29EEH PUBLIC ?C?CLDOPTR + ------- ENDMOD ?C?CLDOPTR + + ------- MODULE ?C?IMUL + C:2A1BH PUBLIC ?C?IMUL + ------- ENDMOD ?C?IMUL + + ------- MODULE ?C?UIDIV + C:2A2DH PUBLIC ?C?UIDIV + ------- ENDMOD ?C?UIDIV + BL51 BANKED LINKER/LOCATER V6.22.4.0 07/10/2026 17:02:32 PAGE 60 + + + + ------- MODULE ?C?LMUL + C:2A82H PUBLIC ?C?LMUL + ------- ENDMOD ?C?LMUL + + ------- MODULE ?C?ULDIV + C:2B0DH PUBLIC ?C?ULDIV + ------- ENDMOD ?C?ULDIV + + ------- MODULE ?C?ULCMP + C:2B9FH PUBLIC ?C?ULCMP + ------- ENDMOD ?C?ULCMP + + ------- MODULE ?C?ULSHR + C:2BB0H PUBLIC ?C?ULSHR + ------- ENDMOD ?C?ULSHR + + ------- MODULE ?C?LSHL + C:2BC3H PUBLIC ?C?LSHL + ------- ENDMOD ?C?LSHL + + ------- MODULE ?C?LLDIDATA + C:2BD6H PUBLIC ?C?LLDIDATA + ------- ENDMOD ?C?LLDIDATA + + ------- MODULE ?C?LLDIDATA0 + C:2BE2H PUBLIC ?C?LLDIDATA0 + ------- ENDMOD ?C?LLDIDATA0 + + ------- MODULE ?C?LSTIDATA + C:2BEFH PUBLIC ?C?LSTIDATA + ------- ENDMOD ?C?LSTIDATA + + ------- MODULE ?C?LSTKIDATA + C:2BFBH PUBLIC ?C?LSTKIDATA + ------- ENDMOD ?C?LSTKIDATA + + ------- MODULE ABS + C:4C78H PUBLIC _abs + ------- ENDMOD ABS + +Program Size: data=189.1 xdata=0 code=19656 +LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.hex b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.hex new file mode 100644 index 0000000..3174dbf --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.hex @@ -0,0 +1,1303 @@ +:1047E3000306060301090901020808020505010180 +:1047F3000202070706060303040401000200030084 +:1048030004000500060007000800090009090A045E +:10481300020A10080A180C0A20100A2C160A402053 +:0C4823000A542A0A68320A68340A683E07 +:103DC10001810001C20401920001980001BB0001C0 +:103DD100840001B90A01960001AA1201BA01019DEC +:103DE1000101BF0102A8000002A60000018200013A +:103DF100745001830002C0000002900000027C00A8 +:103E01000002850000028E0000027A0000027F009D +:103E110000024A0000029B000002940000027600AA +:103E2100000AAB0000000000000000000002880052 +:103E3100000299271002BC0064043600000000044F +:103E41002600000000048A00000000026F0000024A +:103E510078000002720000C11BC10AC11CC118C157 +:103E61001DC123C111C195C109C107C110C105C13E +:103E710006C10BC11AC108C100C120C121C114C1B1 +:103E81009FC10EC119C125C113C117C124C101C1EF +:0B3E910012C103C10DC116C102C10C1B +:1034FA00124AD7124CC17871E6B44302C21FC218ED +:10350A0075620075631175640075651175660075DD +:10351A006711756800756911756A00756B117B1101 +:10352A007A007D117C007F11124C601249501220E2 +:10353A00CCC218E4FF124A0D78BEEFF678AAE66FFD +:10354A0070030235D075620075630A75640075658B +:10355A001B756600756716756800756914756A00CB +:10356A00756B057B0F7A007D0E7C007F0D124C6017 +:10357A007871E6FF64446013EF6442600EEF6441C1 +:10358A0060097F027E00124A7780E57871E6B444CA +:10359A003575620075630A75640075650D75660098 +:1035AA00756701756800756918756A00756B097B1E +:1035BA00177A007D167C007F11124C60122C147F42 +:1035CA00F47E01124A77124CB5124C45301F401254 +:1035DA0049D0122E59124C45D20575620075630AFC +:1035EA0075640075651375660075670E75680075F4 +:1035FA006911756A00756B117B147A007D117C0064 +:10360A007F11124C607FE87E03124A77124C45D232 +:10361A00181240CF12434F7871A60712001E121DCE +:10362A0079124CC11210BD78830620041020050DB2 +:10363A00E6D3940240071238C3E47883F6787176A9 +:03364A007880CEB7 +:104AD70075A0FF7590FF75891DE4F58CF58A7588BB +:104AE7005575A88975B801758DFC758B66F598C2E3 +:0E4AF70088D2A8D2AFC294C291C292C29322BA +:030003000246654D +:10466500C0E0C0F0C083C082C0D075D000C000C01B +:1046750001C002C003C004C005C006C007D20F12A6 +:104685004531D20A30021EC202124BCE7896067907 +:1046950096E7C378B996400D78967600124B86203A +:1046A5000703124015D2A8D007D006D005D004D0F4 +:1046B50003D002D001D000D0D0D082D083D0F0D0AA +:0246C500E032E1 +:03001B000248791F +:10487900C0E0C0F0C083C082C0D075D000C000C005 +:1048890001C002C003C004C005C006C007C28E1221 +:10489900434F7871A607758B66758D32D28ED00716 +:1048A900D006D005D004D003D002D001D000D0D09A +:0948B900D082D083D0F0D0E032AF +:1020CC00C20C7F09124B608F5DE55DB40104D21721 +:1020DC008002C2177F0B124B608F5DE55DB401046B +:1020EC00D2258002C2257F0E124B608F5DE55DB458 +:1020FC000104D20D8002C20D2025077D017F08123C +:10210C004BAA7F08124B6078BAA6077F0C124B6063 +:10211C008F5DE55DB40104D2138002C2137F0A12F5 +:10212C004B607874A6077F36124B608F5DE55DB40B +:10213C000104D2248002C2247F34124B60EF75F06C +:10214C0064A4FFAEF0C006C0077F35124B60EFFDF4 +:10215C00D0E02D7879F6D0E0340018F6124CC17826 +:10216C00BAE6FFD39400400EEFD39409500878815F +:10217C0076A08F5D8043EFD394094011EFD3941276 +:10218C00500B788176A2EF24F7F55D802CEFD39479 +:10219C00124011EFD3941B500B788176A4EF24EEF0 +:1021AC00F55D8015EFD3941B400FEFD394245009A9 +:1021BC00788176A6EF24E5F55D300D147F39124B4E +:1021CC0060EF7F00FEC006C0077F3A124B60801B99 +:1021DC00E55DC454F0FF124A0DEF7F00FEC006C04F +:1021EC0007E55DC454F004FF124A0DEFFDD0E02D5D +:1021FC0078C1F6D0E0340018F6E55DC454F0240242 +:10220C00FF124A0DEF7F00FEC006C007E55DC45407 +:10221C00F02403FF124A0DEFFDD0E02D7891F6D09B +:10222C00E0340018F6E55DC454F02404FF124A0DA6 +:10223C00EF7F00FEC006C007E55DC454F02405FF27 +:10224C00124A0DEFFDD0E02D787DF6D0E034001869 +:10225C00F6E55DC454F02406FF124A0DEF7F00FE34 +:10226C00C006C007E55DC454F02407FF124A0DEF09 +:10227C00FDD0E02D7886F6D0E0340018F6E55DC48C +:10228C0054F02408FF124A0DEF7F00FEC006C00771 +:10229C00E55DC454F02409FF124A0DEFFDD0E02D8A +:1022AC00787BF6D0E0340018F6E55DC454F0240ACF +:1022BC00FF124A0DEF7F00FEC006C007E55DC45457 +:1022CC00F0240BFF124A0DEFFDD0E02D7880F6D0F4 +:1022DC00E0340018F6E55DC454F0240CFF124A0DEE +:1022EC008F5DE55D7004C2158002D215788176A0F1 +:1022FC007F01124A0DEF7F00FEC006C0077F02125D +:10230C004A0DEFFDD0E02D789AF6D0E0340018F6A7 +:10231C007F03124A0DEF7F00FEC006C0077F041238 +:10232C004A0DEFFDD0E02D788FF6D0E0340018F692 +:10233C007F05124A0D78BBA6077F06124A0D7893CB +:10234C00A6077F07124A0D7887A6077F08124A0D49 +:10235C007897A6077F09124A0D78C2A6077F0A1242 +:10236C004A0D7884EFF6C3740A9F75F003A478B90C +:10237C00F6124CC178BBE6FF75F003A42411F5826C +:10238C00E43448F583E4937875F6EF75F003A424F0 +:10239C0012F582E43448F583E493787EF678BBE654 +:1023AC0075F003A42413F582E43448F583E493FF19 +:1023BC007E007C037DE8122A1BAC06AD077893E601 +:1023CC0075F009A4AEF02DF549EC3EF5487F0B12E3 +:1023DC004A0D789DA6077F0C124A0D78BFA6077F81 +:1023EC000D124A0DEF75F00AA478BCA6F008F6C3DE +:1023FC0079C1E7787D96FF19E7189678A2F608A6BA +:08240C000708F608A607C2123A +:0124140022A5 +:102E5900C22875620075630F75640075651475661F +:102E69000075670E756800756905756A00756B14DC +:102E79007B167A007D0E7C007F05124C607FF47E04 +:102E890001124A7775620075631A756400756517D2 +:102E990075660075671375680075691C756A007534 +:102EA9006B117B0E7A007D1A7C007F11124C607FBA +:102EB900F47E01124A77E4FF124A0D8F58E55878DB +:102EC900AA667021F56275630CF56475650CF56683 +:102ED90075670EF568756905F56A756B057B1BFAEB +:102EE9007D05FC802675620075630A756400756549 +:102EF90001756600756716756800756911756A0050 +:102F0900756B117B0F7A007D117C007F11124C606B +:102F19007FF47E01124A7775620075631475640047 +:102F290075650C75660075671175680075691175A9 +:102F39006A00756B117B137A007D117C007F111279 +:102F49004C607FF47E01124A777F0F124B608F58D5 +:102F5900E55878AA667021F56275630CF5647565A4 +:102F69000CF56675670EF568756905F56A756B0583 +:102F79007B1BFA7D05FC802675620075630A756402 +:102F890000756501756600756716756800756911C4 +:102F9900756A00756B117B0F7A007D117C007F11BA +:102FA900124C607FF47E01124A7775620075630DD9 +:102FB90075640075650C756600756711756800752F +:102FC9006911756A00756B117B0A7A007D117C00A5 +:102FD9007F11124C60C20AE4F559300A04C20AD2C0 +:102FE900287F047E00124A770559E559C394FF40AA +:102FF900E930282F75620075630C75640075650CDE +:1030090075660075670E756800756905756A0075DE +:103019006B057B1B7A007D057C007F11124C60C219 +:1030290019802D75620075630A75640075650175EF +:103039006600756716756800756911756A00756BA4 +:10304900117B0F7A007D117C007F11124C60D2191F +:073059007FF47E01024A77BB +:1049D000E4F558E558FB3395E0FAAD03FCAF58EF2A +:1049E0003395E0F5628F63F5648F65F5668F67F543 +:1049F000688F69F56A8F6B124C607FC87E00124A1F +:0C4A0000770558C3E5586480948A40C7CD +:014A0C002287 +:103F5A0078C076030876E8789076000876C8787C88 +:103F6A007600087632E47885F608F6788EF60876D2 +:103F7A000A787AF6087664787FF608F6D215788495 +:103F8A007609C3740A940975F003A478B9F678BB64 +:103F9A00760178937605788776017897760178C2E4 +:103FAA00760478BBE6FF75F003A42411F582E434A5 +:103FBA0048F583E4937875F6EF75F003A42412F5B7 +:103FCA0082E43448F583E493787EF678BBE675F0AC +:103FDA0003A42413F582E43448F583E493FF7E00B6 +:103FEA007C037DE8122A1BAC06AD077893E675F0D0 +:103FFA0009A4AEF02DF549EC3EF548789D76037894 +:0B400A00BF760278BC760008761E220C +:102C1400E4F55B755C01F56275630AF56475651B23 +:102C2400F566756716F568756914F56A756B057B45 +:102C34000FFA7D0EFC7F0D124C607FB87E0B124A9A +:102C440077123F5A75620075630D756400756501EE +:102C5400756600756718756800756909756A007589 +:102C64006B107B0A7A007D177C007F16124C60780B +:102C7400AAE6FDE4FF124B057D017F08124BAA75FD +:102C84005B01E55BD394004010E55BD394095009E4 +:102C9400788176A0855B5C804CE55BD39409401316 +:102CA400E55BD39412500C788176A2E55B24F7F5AA +:102CB4005C8032E55BD394124013E55BD3941B50E4 +:102CC4000C788176A4E55B24EEF55C8018E55BD393 +:102CD400941B4011E55BD39424500A788176A6E5D1 +:102CE4005B24E5F55CE55CC454F0FF78C0E6FD12B6 +:102CF4004B05E55CC454F004FF78C1E6FD124B05B6 +:102D0400E55CC454F02402FF7890E6FD124B05E51F +:102D14005CC454F02403FF7891E6FD124B05E55C96 +:102D2400C454F02404FF787CE6FD124B05E55CC432 +:102D340054F02405FF787DE6FD124B05E55CC45490 +:102D4400F02406FF7885E6FD124B05E55CC454F0DB +:102D54002407FF7886E6FD124B05E55CC454F02495 +:102D640008FF787AE6FD124B05E55CC454F02409AB +:102D7400FF787BE6FD124B05E55CC454F0240AFFA2 +:102D8400787FE6FD124B05E55CC454F0240BFF7814 +:102D940080E6FD124B05E55CC454F0240CFF7D0174 +:102DA400124B05124788124CC1055BE55BD3942492 +:102DB4005003022C86788176A0788EE6FD7F03127C +:102DC4004B05788FE6FD7F04124B0578BBE6FD7F4B +:102DD40005124B057893E6FD7F06124B057887E6CE +:102DE400FD7F07124B057897E6FD7F08124B0578A7 +:102DF400C2E6FD7F09124B057884E6FD7F0A124B7B +:102E040005789DE6FD7F0B124B0578BFE6FD7F0C30 +:102E1400124B0578BDE6FD7F0D124B05E4FD7F09DD +:102E2400124BAAE4FD7F0B124BAAE4FD7F0C124B5C +:102E3400AA7D377F0A124BAAE4FD7F36124BAA788B +:102E4400AAE6FD7F0F124BAAE4FD7F0E124BAA12D5 +:052E540020CC024C45FA +:104BCE007894E6FE08E6FFE4FCFDE5392FF539E5BD +:0F4BDE00383EF538ED3537F537EC3536F53622FC +:104B860078B9E6FBE4FAF9F8AF39AE38AD37AC36AA +:104B9600122B0D7876A60608A607E4F539F538F542 +:044BA60037F5362287 +:10401500D227755604E55625E024A9F8E6FE08E6FC +:10402500FFE55625E024ABF8A60608A607D556E514 +:104035007876E6FE08E6FF78ABA60608A607E4F55F +:1040450056E55625E024AEF9E55625E024ACF8C33F +:10405500E697FF18E61997FE124C78D3EF9405EE14 +:10406500648094804002C2270556E556C3940440F7 +:10407500D0302755E4F545F544F543F542F556E5C9 +:104085005625E024ABF8E6FE08E6FFE4FCFDE54531 +:104095002FF545E5443EF544ED3543F543EC354212 +:1040A500F5420556E556B405D6AF45AE44AD43AC2D +:1040B50042E47B05FAF9F8122B0D8F458E448D43AA +:0940C5008C427876A60608A607D5 +:0140CE0022CF +:1040CF007876E6F53408E6F535124599124CC112AB +:1040DF004B33201D061239D91248C2D3789CE6956E +:1040EF004918E695484043301F40C218124CC1D2C0 +:1040FF000475620075630E7564007565167566004C +:10410F00756712756800756911756A00756B117B9B +:10411F00157A007D117C007F11124C607D087C00A8 +:10412F00E4FFFE124790D2188002C20430193EC23B +:10413F0018124CC1D20475620075630C756400755A +:10414F00651175660075670E756800756913756A78 +:10415F0000756B137B0D7A007D0A7C007F11124C6A +:0E416F00607D087C00E4FFFE124790D218220B +:1045990030051785344A85354BA21B921C7898063D +:1045A900E6D394034004C205E4F6A21C301B01B310 +:1045B9005012E535254B789CF6E534354A18F6A2B4 +:1045C9001B921E22D3E535954BE534954A4013A23B +:1045D9001B921EC3E535954B789CF6E534954A1830 +:1045E900F622A21BB3921EC3E54B9535789CF6E5DE +:0645F9004A953418F62279 +:104B33007897E6FFD3789CE69F18E69400500578B3 +:104B430092068004E47892F67892E6D39403400CBC +:0D4B530085344A85354BA21B921CE4F622E6 +:09490B0078C0E6FE08E6FF7D0518 +:064914008E5D8F5EAB0515 +:10491A007A07C374089BC36480F8EA6480984023CA +:10492A00AE5DAF5E7C007D0A122A2D742C2AF8A691 +:10493A0005AE5DAF5E7C007D0A122A2D8E5D8F5E0C +:06494A001A80CF0246C7EF +:1038C3007893E6FB789BE6FE08E6FFAD037C0012E7 +:1038D3002A2DAD037C00122A1B8E588F597B07AE0D +:1038E30058AF597C007D0A122A2D742C2BF8A6059B +:1038F300AE58AF597C007D0A122A2D8E588F591B62 +:10390300BB02DCE52F7003752F11301E03752F10DA +:103913007893E6FFE5338FF0848FF0A4F533E6FF69 +:103923007887E68FF0A4FF789BE6FC08E6FDD39F3B +:10393300EC95F0500AE4F533F532752F11C21EED04 +:103943004C700C752C11752D11752E11752F1130AE +:103953002008752C0C752D018062302108752C0C04 +:10396300752D028057301408752C0F752D0F804C60 +:1039730030120B201A08752C0A752D05800F301A8A +:103983001930130E30010B752C19752D1D752E145E +:103993008041752C05752D0A802220250B752C136B +:1039A300752D0D752E1C802B78BAE6FFD394095024 +:1039B30010752C0FEF75F00A8485F02D752E11808C +:1039C30012EF75F00A8485F02DEF75F00A84F52C5B +:0639D300752E0F0246C72D +:10001E00E4F558F55930030302039B7871E6644109 +:10002E00600302039B30000302039BC218124CC1F3 +:10003E001243DA124CC17FB57D327B027A00124C2C +:10004E0029755D00755E00755FB57560007561029E +:10005E007BFF7A4779E3124990502E302503123AEE +:10006E00E77871E6B442107871E6644260030208E4 +:10007E00BD7658D21880F01208BE2025030208BDA6 +:10008E007871E6B442D502038F755D00755E00751A +:10009E005FB57560007561027BFF7A4779E512499D +:1000AE0090500612306002038F755D00755E00750C +:1000BE005FB57560007561027BFF7A4779E9124979 +:1000CE0090500612175202038F755D00755E007513 +:1000DE005FB57560007561027BFF7A4779EB124957 +:1000EE0090500612241502038F755D00755E007523 +:1000FE005FB57560007561027BFF7A4779ED124935 +:10010E00905006122C1402038F755D00755E0075FB +:10011E005FB57560007561027BFF7A4779EF124912 +:10012E0090500612275C02038F755D00755E007598 +:10013E005FB57560007561027BFF7A4779F11249F0 +:10014E00905006123CE502038F755D00755E0075DA +:10015E005FB57560007561027BFF7A4779F31249CE +:10016E009050061233A002038F755D00755E007508 +:10017E005FB57560007561027BFF7A4779F51249AC +:10018E0090500612323502038F755D00755E007554 +:10019E005FB57560007561027BFF7A4779F712498A +:1001AE00905006123BE602038F755D00755E00757A +:1001BE005FB57560007561027BFF7A4779F9124968 +:1001CE0090500612378802038F755D00755E0075BC +:1001DE005FB57560007561027BFF7A4779FB124946 +:1001EE0090500612364D02038F755D00755E0075D8 +:1001FE005FB57560007561027BFF7A4779FD124924 +:10020E0090500B20250302038F7D0102035A755D6A +:10021E0000755E00755FB57560007561027BFF7AD3 +:10022E004779FF124990500B20250302038F7D0260 +:10023E0002035A755D00755E00755FB575600075D9 +:10024E0061027BFF7A487901124990500B202503F9 +:10025E0002038F7D0302035A755D00755E00755FA4 +:10026E00B57560007561027BFF7A4879031249907B +:10027E00500B20250302038F7D0402035A755D0087 +:10028E00755E00755FB57560007561027BFF7A481B +:10029E007905124990500B20250302038F7D05022C +:1002AE00035A755D00755E00755FB575600075610A +:1002BE00027BFF7A487907124990500B20250302E2 +:1002CE00038F7D0602035A755D00755E00755FB57E +:1002DE007560007561027BFF7A487909124990506A +:1002EE000A20250302038F7D078061755D00755E10 +:1002FE0000755FB57560007561027BFF7A48790BFA +:10030E0012499050073025797D088040755D007543 +:10031E005E00755FB57560007561027BFF7A487986 +:10032E000D12499050073025587D09801F755D00CC +:10033E00755E00755FB57560007561027BFF7A486A +:10034E00790F124990500F3025377D0A7F08124BD6 +:10035E00AA1208BE802B7562007563137564007552 +:10036E006513756600756717756800756913756A8C +:10037E0000756B117B0E7A007D117C007F11124C83 +:10038E00607FE87E03124A77124C45D218124CC198 +:10039E007871E664437038200035F562756310F5A8 +:1003AE0064756510F566756710F568756910F56A00 +:1003BE00756B107B11FA7D11FC7F11124C607871F8 +:1003CE00E6B443097F027E00124A7780F1D20530EF +:1003DE0003030204DD7871E6642360030204DD305A +:1003EE0000030204DDC203200D030204DDF562F5F5 +:1003FE0063F564F565F566F567F568F569F56AF513 +:10040E006B7B16FA7D01FC7F0F124C6012490B7F3D +:10041E00F47E01124A777F051244587F0512482F49 +:10042E00E48F458E44F543F54278BBE675F003A4A0 +:10043E002413F582E43448F583E493FF7E007C03B5 +:10044E007DE8122A1BE4FCFDAB45AA44A943A84251 +:10045E00D3122B9F40377562007563137564007558 +:10046E006513756600756717756800756913756A8B +:10047E0000756B117B0E7A007D117C007F11124C82 +:10048E00607FE87E03124A77124C458042C20C7898 +:10049E0093E6FBE4FAF9F8AF45AE44AD43AC421235 +:1004AE002B0DC004A905AA06AB077893E6FFE4FC62 +:1004BE00FDFED000122A8278C0A60608A60718E60E +:1004CE00FD7F39124BAA78C1E6FD7F3A124BAA780E +:1004DE0071E6B42A17200014200311D2037871E6B6 +:1004EE00B42A097F027E00124A7780F130031D780C +:1004FE0071E6B441172000147871E6B441097F0209 +:10050E007E00124A7780F1C20312241520030302E3 +:10051E0005E37871E6644460030205E330000302EC +:10052E0005E32024030205E3C203C218F5627563D6 +:10053E0014F564756511F566756711F568756911C1 +:10054E00F56A756B117B0EFA7D05FC7F0B124C6004 +:10055E007F34124B60EF7F00FEC006C0077F35125E +:10056E004B60EFFDD0E02DFFD0E03400FE7878F642 +:10057E0008EFF67D041249147FF47E01124A777F4C +:10058E00041244587F0412482F7878A60608A6074E +:10059E007871E6FF644270030208BDEF6444702474 +:1005AE007878E6FD7F34124BAA7879E6FD7F351216 +:1005BE004BAA7878E6FD7F37124BAA7879E6FD7F55 +:1005CE0038124BAAD2187871E6B444097F027E0025 +:1005DE00124A7780F17871E6644260030208363081 +:1005EE000003020836202503020836300C030208E9 +:1005FE00367F08124B6078BAEFF6C203C3940150EF +:10060E0002760178BAE6FE75F00A84FFEE75F00AFE +:10061E0084E5F0FD7C0075620075631175640075EC +:10062E006511756600756711756800756911756AD3 +:10063E0000756B117B0F7A00124C607FF47E0112F5 +:10064E004A77755901D2187871E6FF644470030237 +:10065E0007C1EF644170030207C1AF597E007D01EF +:10066E007C00124790742C2559124728742C25595A +:10067E00F8A607E52C540FC454F0FFE52D540F2FA8 +:10068E00F558FF124C8A8F587871E6FF6453600458 +:10069E00EFB443100559E559D394014003E4F559DD +:1006AE0078717658E558D394244035756200756399 +:1006BE0013756400756517756600756713756800A8 +:1006CE00756911756A00756B117B137A007D0E7C4E +:1006DE00007F11124C607FF47E01124A7775582408 +:1006EE007F647E00124A77E558D394004025E55882 +:1006FE00D39409501E788176A0E558C454F0FF12A9 +:10070E004A0DEF7F00FEC006C007E558C454F00442 +:10071E000207A9E558D394094027E558D3941250FF +:10072E0020788176A2E55824F7C454F0FF124A0DC2 +:10073E00EF7F00FEC006C007E558C454F024718058 +:10074E005AE558D394124027E558D3941B5020787D +:10075E008176A4E55824EEC454F0FF124A0DEF7FC3 +:10076E0000FEC006C007E558C454F024E1802CE515 +:10077E0058D3941B4037E558D39424503078817663 +:10078E00A6E55824E5C454F0FF124A0DEF7F00FE93 +:10079E00C006C007E558C454F02451FF124A0DEFAD +:1007AE00FDD0E02D78C1F6D0E0340018F612490BDA +:1007BE000206557871E66444705FE558D394245070 +:1007CE0007E558C39401503875620075631375645C +:1007DE000075651775660075671375680075691184 +:1007EE00756A00756B117B137A007D0E7C007F118C +:1007FE00124C607FF47E01124A777558240205FF71 +:10080E00AD587F08124BAA7F08124B6078BAA60724 +:10081E001220CC7FF47E01800A7871E6B444097F01 +:10082E00027E00124A7780F130036F7871E66423FE +:10083E007068200065302462C2187F37124B60EF5B +:10084E007F00FEC006C0077F38124B60EFFDD0E080 +:10085E002D7873F6D0E0340018F6756200756314C7 +:10086E00756400756511756600756711756800759C +:10087E006911756A00756B117B187A007D0C7C000E +:10088E007F0B124C607872E6FE08E6FF7D0412497B +:10089E00147FB87E0B124A77D2182003127871E6B5 +:0F08AE00B4230C200009200D063024031233A0C0 +:0108BD002218 +:101D7900E4F558F5593016051220CCC2162007068D +:101D8900200C03021E697871E664426003021E6931 +:101D9900E5292401F529E43528F528E43527F5272F +:101DA900E43526F526E47FB07E04FDFCAB29AA289C +:101DB900A927A826C3122B9F50030220CBC218754E +:101DC900620075631375640075651475660075673F +:101DD90011756800756911756A00756B117B177A41 +:101DE900007D0B7C007F0A124C60C292C294C291A2 +:101DF900C293C220C221C214C21AC207C2098546AF +:101E09004A85474BC3740A78849675F003A478B958 +:101E1900F6E47896F6F539F538F537F536C200C2A5 +:101E29000CF562756313F564756514F56675670ECF +:101E3900F56875690DF56A756B117B17FA7D0BFCF1 +:101E49007F0A124C607FD07E07124A77D21812435C +:101E59004FEF644260F8E4F529F528F527F52622C5 +:101E6900E4F529F528F527F52630174A20004720FB +:101E79000C44D21220903F1220CC3024207F3712FC +:101E89004B60EF7F00FEC006C0077F38124B60EF42 +:101E9900FDD0E02D7873F6D0E0340018F6C37873DE +:101EA900E6940118E694005006302403021F6CC220 +:101EB90012D20C021F9E301763200060300C5D782F +:101EC9009BE6FE08E6FFD3787B96EE1896504DC345 +:101ED900EF788096EE18964043201E407882E6708F +:101EE900077888A60608A6077989E7789C667004AA +:101EF90019E7186670057882068004E47882F67816 +:101F090074E675F004A4FF7882E6C39FE5F0648067 +:101F1900F87480984006E47882F68079309003025C +:101F290020CB3000030220CB301E030220CB12202D +:101F3900CC3024207F37124B60EF7F00FEC006C0F3 +:101F4900077F38124B60EFFDD0E02D7873F6D0E0B3 +:101F5900340018F6C37873E6940118E694005035F6 +:101F690030243275620075630E75640075651375EA +:101F79006600756713756800756911756A00756B78 +:101F8900117B117A007D117C007F0B124C607FE878 +:101F99007E03024A77787CE6FE08E6FFC378C1969D +:101FA900EE18965024C37886E69F18E69E501AC309 +:101FB900798FE778C19619E71896500DC37980E7AC +:101FC900787B9619E71896403E124CC1C218756283 +:101FD9000075631175640075650E75660075671384 +:101FE900756800756913756A00756B117B147A0041 +:101FF9007D0E7C007F05124C607FF47E01124A77CA +:10200900D218C20C021D8630152D789BE6FE08E613 +:10201900FFD3787B96EE1896501DC3EF788096EE25 +:1020290018964013201E10D20E854A46854B4785C7 +:10203900344A85354B801220150D201E0AD20E8593 +:102049004A46854B478002C20E1240CF300E3DC230 +:102059000ED207D2007F647E00124A77D2927F3275 +:102069007E00124A77D2917F327E00124A77D2944B +:10207900D220D221D214C3740A78849679B9F7E4AC +:102089007896F6F539F538F537F53622C2187562BE +:102099000075630E75640075651175660075670EC8 +:1020A900756800756913756A00756B137B137A007F +:1020B9007D0A7C007F14124C607FF47E01124A77FE +:0220C900D2182B +:0120CB0022F2 +:1010BD0020000302175130075B200958201E557878 +:1010CD009BE6FE08E6FFC378A396EE18964004C291 +:1010DD0094C220C3EF78A596EE1896401D302114CA +:1010ED00740A78849679B9F7E47896F6F539F53877 +:1010FD00F537F536C294C291C221799CE7788626E0 +:10110D00FF19E71836FEC3EF78C196EE1896400426 +:10111D00C292D20830082378A906E6187001067825 +:10112D009DE675F064A4FFC378A9E69F18E695F0D7 +:10113D004008E4F608F6D209C20820090302166633 +:10114D00301E03021666799CE7788626FF19E7188C +:10115D0036FE78C0E6FC08E6FDC3EF9DEE9C500719 +:10116D00D292C209021666C3789CE69D18E69C5081 +:10117D003378A706E61870010678BFE675F064A40B +:10118D00FFC378A7E69F18E695F05003021666E4B4 +:10119D00F608F6D29278BCE6FE08E6FF124A77C250 +:1011AD0092021666D293D21AC207E478A6F608F612 +:1011BD00C209C294C220C291C221C292C21408F6C1 +:1011CD0008F6C208C3740A78849675F003A478B93A +:1011DD00F6E47896F6F539F538F537F5367F3712AA +:1011ED004B60EF7F00FEC006C0077F38124B60EFEB +:1011FD00FDD0E02D7873F6D0E0340018F608E61631 +:10120D00187001167872E6FD7F37124BAA7873E6D7 +:10121D00FD7F38124BAA78BAE6640160030212D73B +:10122D007F1A123E9D788A122BEF788A122BE2C01C +:10123D0000C0037893E6FB789BE6FE08E6FFAD035E +:10124D007C00122A2DAD037C00122A1BE4FDD00375 +:10125D00D000EB2FFFEA3EFEED39FDEC38FC788A2D +:10126D00122BEF7FFF7EE07DF57C05788A122BE255 +:10127D00D3122B9F4009788A122BFB0000000078B7 +:10128D008A122BD68F5F8E5E8D5D8C5C7F1A124419 +:10129D00C87F10124B60EF7F00FEC006C0077F11A4 +:1012AD00124B60EFFDD0E02D7870F6D0E0340018D1 +:1012BD00F60806E618700106786FE6FD7F10124BF2 +:1012CD00AA7870E6FD7F1102166378BAE6640260B3 +:1012DD000302138B7F1E123E9D788A122BEF788AA4 +:1012ED00122BE2C000C0037893E6FB789BE6FE0864 +:1012FD00E6FFAD037C00122A2DAD037C00122A1BE4 +:10130D00E4FDD003D000EB2FFFEA3EFEED39FDECFE +:10131D0038FC788A122BEF7FFF7EE07DF57C057817 +:10132D008A122BE2D3122B9F4009788A122BFB00D5 +:10133D00000000788A122BD68F5F8E5E8D5D8C5CDF +:10134D007F1E1244C87F12124B60EF7F00FEC00655 +:10135D00C0077F13124B60EFFDD0E02D7870F6D0F3 +:10136D00E0340018F60806E618700106786FE6FD01 +:10137D007F12124BAA7870E6FD7F1302166378BABE +:10138D00E66403600302143F7F22123E9D788A12A9 +:10139D002BEF788A122BE2C000C0037893E6FB781E +:1013AD009BE6FE08E6FFAD037C00122A2DAD037C03 +:1013BD0000122A1BE4FDD003D000EB2FFFEA3EFE06 +:1013CD00ED39FDEC38FC788A122BEF7FFF7EE07D46 +:1013DD00F57C05788A122BE2D3122B9F4009788A6F +:1013ED00122BFB00000000788A122BD68F5F8E5EC9 +:1013FD008D5D8C5C7F221244C87F14124B60EF7F91 +:10140D0000FEC006C0077F15124B60EFFDD0E02D2A +:10141D007870F6D0E0340018F60806E6187001066C +:10142D00786FE6FD7F14124BAA7870E6FD7F1502EA +:10143D00166378BAE6640460030214F37F26123E45 +:10144D009D788A122BEF788A122BE2C000C00378A8 +:10145D0093E6FB789BE6FE08E6FFAD037C00122ABF +:10146D002DAD037C00122A1BE4FDD003D000EB2F21 +:10147D00FFEA3EFEED39FDEC38FC788A122BEF7F4A +:10148D00FF7EE07DF57C05788A122BE2D3122B9F2F +:10149D004009788A122BFB00000000788A122BD6A7 +:1014AD008F5F8E5E8D5D8C5C7F261244C87F161219 +:1014BD004B60EF7F00FEC006C0077F17124B60EF39 +:1014CD00FDD0E02D7870F6D0E0340018F60806E671 +:1014DD0018700106786FE6FD7F16124BAA7870E63C +:1014ED00FD7F1702166378BAE6640560030215A73F +:1014FD007F2A123E9D788A122BEF788A122BE2C03A +:10150D0000C0037893E6FB789BE6FE08E6FFAD038B +:10151D007C00122A2DAD037C00122A1BE4FDD003A2 +:10152D00D000EB2FFFEA3EFEED39FDEC38FC788A5A +:10153D00122BEF7FFF7EE07DF57C05788A122BE282 +:10154D00D3122B9F4009788A122BFB0000000078E4 +:10155D008A122BD68F5F8E5E8D5D8C5C7F2A124436 +:10156D00C87F18124B60EF7F00FEC006C0077F19C1 +:10157D00124B60EFFDD0E02D7870F6D0E0340018FE +:10158D00F60806E618700106786FE6FD7F18124B17 +:10159D00AA7870E6FD7F1902166378BAE6FFC39448 +:1015AD00065003021666EFD3942440030216667F9D +:1015BD0030123E9D788A122BEF788A122BE2C000F2 +:1015CD00C0037893E6FB789BE6FE08E6FFAD037C4F +:1015DD0000122A2DAD037C00122A1BE4FDD003D08E +:1015ED0000EB2FFFEA3EFEED39FDEC38FC788A1258 +:1015FD002BEF7FFF7EE07DF57C05788A122BE2D301 +:10160D00122B9F4009788A122BFB00000000788A6C +:10161D00122BD68F5F8E5E8D5D8C5C7F301244C831 +:10162D007F2E124B60EF7F00FEC006C0077F2F128A +:10163D004B60EFFDD0E02D7870F6D0E0340018F659 +:10164D000806E618700106786FE6FD7F2E124BAA8C +:10165D007870E6FD7F2F124BAA301A2D30132A20F9 +:10166D00012778A906E618700106789DE675F03C0D +:10167D00A4FFC378A9E69F18E695F0400CD201852A +:10168D00464A85474BE4F608F6C37873E69401188D +:10169D00E694005075302472301A6F30130D3001FE +:1016AD000A78A906E618701106800E20130B20018A +:1016BD000878A906E618700106789DE675F032A443 +:1016CD00FFC378A9E69F18E695F0403EE4F608F6CC +:1016DD00C218F56275630EF564756513F566756769 +:1016ED0013F568756911F56A756B117B11FA7D112A +:1016FD00FC7F0B124C60C20C7871E66444600B7F6A +:10170D00147E00124A77D21880EED3799CE7788F39 +:10171D009619E718964003301E2A301A27C293C235 +:10172D001A85464A85474BC3740A78849675F0032B +:10173D00A478B9F6E47896F6F539F538F537F53637 +:05174D00C200C20122F0 +:1043DA00755A067871765875620075630E756400B1 +:1043EA00756511756600756711E4F568F569F56A12 +:1043FA00F56B7B0DFA7D17FC7F0C124C60124CC1D9 +:10440A007871E664446037AF5A7E007D017C001201 +:10441A004790742C255A124728742C255AF8A60757 +:10442A007871E6FF64536004EFB443D4055AE55A41 +:10443A00D394074003755A067871765880C278710A +:0D444A00E6B444097F027E00124A7780F13B +:014457002242 +:024458008F5D76 +:10445A00C37408955DF55E7871E6FF64446044EFC5 +:10446A006441603FEF6442603AAF5E7E007D017C4A +:10447A0000124790742C255E124728742C255EF88A +:10448A00A6077871E6FF64536004EFB443C9055E7A +:10449A00E55ED3940740067408955DF55E787176FB +:1044AA005880B47871E6B442127871E6B442097F52 +:0D44BA00027E00124A7780F1D20B22C20B65 +:0144C70022D2 +:084788007D017F077C007E002B +:084790008E5F8F608C618D6269 +:104798007F3A7D2C7B087A00124C29AF60E56025B2 +:1047A80062FDE55F3561FCEFC39DEC6480F87480C1 +:1047B800985009742C2FF876110F80E11246C77FA4 +:1047C800967E00124A777F2C7D3A7B087A00124C3D +:0B47D800291246C77F967E00024A7738 +:103AE700755A07C2187F08124B6078BAA607756225 +:103AF7000075630175640075651275660075670E5C +:103B0700E6FF75F00A84756800F569EF75F00A84B9 +:103B1700AFF0756A008F6B7B0C7A007D0E7C007F9F +:103B270013124C60124CC17871E6FF64446041EF98 +:103B37006442603CAF5A7E007D017C00124790745E +:103B47002C255A124728742C255AF8A6077871E6AF +:103B5700FF64536004EFB44310055AE55AD3940742 +:103B67004003755A06787176587871E6B442B822E0 +:103B77007871E664447058E532540FC454F0FFE599 +:103B870033540F2FF55AFF124C8A8F5AE55AD394A4 +:103B97002440357562007563137564007565177584 +:103BA7006600756713756800756911756A00756B2E +:103BB700117B137A007D0E7C007F11124C607FF41D +:103BC7007E01124A77023AECAD5A7F08124BAA7867 +:0E3BD70071E6B444097F027E00124A7780F145 +:013BE50022BD +:1008BE00C2281220CCD218D21678BAE6FFD39400F2 +:1008CE00400CEFD394095006788176A08034EFD394 +:1008DE009409400CEFD394125006788176A28022B0 +:1008EE00EFD39412400CEFD3941B5006788176A46C +:1008FE008010EFD3941B400AEFD3942450047881D8 +:10090E0076A6202521756200756311E4F564F56500 +:10091E00F566F567F568F569F56AF56B7B16FA7D90 +:10092E0001FC7F0F802D78BAE6FE75F00A84FFEE8B +:10093E0075F00A84E5F0FD7C00756200756311E4C4 +:10094E00F564F565F566F567F568F569F56AF56BB5 +:10095E007B0FFA124C6012490B7FF47E01124A771C +:10096E007F05124458300B030210BC7871E66444C4 +:10097E006003020A557F0512482F8E5B8F5C78BB91 +:10098E00E675F003A42413F582E43448F583E4936A +:10099E00FF7E007C037DE8122A1BD3E55C9FE55B9E +:1009AE009E4036D2287562007563137564007565B6 +:1009BE0017756600756713756800756911756A009D +:1009CE00756B117B137A007D0E7C007F11124C60CB +:1009DE007FF47E01124A77806E78C0A65B08A65C13 +:1009EE0078BAE6FFD39400400AEFD3940950048FEF +:1009FE005A8037EFD39409400DEFD394125007EF7E +:100A0E0024F7F55A8024EFD39412400DEFD3941BA4 +:100A1E005007EF24EEF55A8011EFD3941B400BEFE5 +:100A2E00D394245005EF24E5F55AE55AC454F0FF4B +:100A3E0078C0E6FD124B05E55AC454F004FF78C1A8 +:100A4E00E6FD124B05C2283028030209102025238B +:100A5E00756200756311756400756511E4F566F5D0 +:100A6E0067F568F569F56AF56B7B11FA7D0FFC7F0A +:100A7E000F802F78BAE6FE75F00A84FFEE75F00A45 +:100A8E0084E5F0FD7C007562007563117564007578 +:100A9E006511E4F566F567F568F569F56AF56B7B42 +:100AAE000DFA124C60787CE6FE08E6FF7D041249D2 +:100ABE00147FF47E01124A777F04124458300B03E0 +:100ACE000210BC7871E664446003020B977F041237 +:100ADE00482F8E5B8F5CC3E55C78C196E55B1896FC +:100AEE004036D228756200756313756400756517FC +:100AFE00756600756713756800756911756A0075FE +:100B0E006B117B137A007D0E7C007F11124C607F7F +:100B1E00F47E01124A778071787CA65B08A65C7819 +:100B2E00BAE6FFD39400400AEFD3940950048F5ACB +:100B3E008037EFD39409400DEFD394125007EF2472 +:100B4E00F7F55A8024EFD39412400DEFD3941B5037 +:100B5E0007EF24EEF55A8011EFD3941B400BEFD321 +:100B6E0094245005EF24E5F55AE55AC454F02404B4 +:100B7E00FF787CE6FD124B05E55AC454F02405FFC0 +:100B8E00787DE6FD124B05C228302803020A5B2051 +:100B9E002523756200756311756400756511E4F5A2 +:100BAE0066F567F568F569F56AF56B7B16FA7D0FE4 +:100BBE00FC7F18802F78BAE6FE75F00A84FFEE757A +:100BCE00F00A84E5F0FD7C007562007563117564B2 +:100BDE0000756511E4F566F567F568F569F56AF572 +:100BEE006B7B18FA124C607885E6FE08E6FF7D03F3 +:100BFE001249147FF47E01124A777F031244583053 +:100C0E000B030210BC7871E664446003020CE27FB1 +:100C1E000312482F8E5B8F5CE55C787D26FFE55BCB +:100C2E001836FED3EF78C196EE18964036D2287558 +:100C3E0062007563137564007565177566007567D8 +:100C4E0013756800756911756A00756B117B137ADF +:100C5E00007D0E7C007F11124C607FF47E01124AE3 +:100C6E007780717885A65B08A65C78BAE6FFD39488 +:100C7E0000400AEFD3940950048F5A8037EFD39473 +:100C8E0009400DEFD394125007EF24F7F55A802444 +:100C9E00EFD39412400DEFD3941B5007EF24EEF5D3 +:100CAE005A8011EFD3941B400BEFD394245005EFD1 +:100CBE0024E5F55AE55AC454F02406FF7885E6FD7E +:100CCE00124B05E55AC454F02407FF7886E6FD1250 +:100CDE004B05C228302803020B9D20252375620088 +:100CEE00756311756400756511E4F566F567F56851 +:100CFE00F569F56AF56B7B13FA7D14FC7F15802F71 +:100D0E0078BAE6FE75F00A84FFEE75F00A84E5F017 +:100D1E00FD7C00756200756311756400756511E4E4 +:100D2E00F566F567F568F569F56AF56B7B15FA12E8 +:100D3E004C60787A12490D7FF47E01124A777F0556 +:100D4E00124458300B030210BC7871E66444600301 +:100D5E00020E3F7F0512482F8E5B8F5C78BBE675C7 +:100D6E00F003A42413F582E43448F583E493FF7E64 +:100D7E00007C037DE8122A1BE55C78C126FDE55B4D +:100D8E001836FCD3ED9FEC9E4036D2287562007566 +:100D9E00631375640075651775660075671375685E +:100DAE0000756911756A00756B117B137A007D0EE3 +:100DBE007C007F11124C607FF47E01124A778071A5 +:100DCE00787AA65B08A65C78BAE6FFD39400400A50 +:100DDE00EFD3940950048F5A8037EFD39409400D06 +:100DEE00EFD394125007EF24F7F55A8024EFD394E3 +:100DFE0012400DEFD3941B5007EF24EEF55A8011DD +:100E0E00EFD3941B400BEFD394245005EF24E5F55C +:100E1E005AE55AC454F02408FF787AE6FD124B05C1 +:100E2E00E55AC454F02409FF787BE6FD124B05C247 +:100E3E0028302803020CE820252375620075631103 +:100E4E00756400756511E4F566F567F568F569F585 +:100E5E006AF56B7B13FA7D14FC7F16802F78BAE649 +:100E6E00FE75F00A84FFEE75F00A84E5F0FD7C0055 +:100E7E00756200756311756400756511E4F566F5AC +:100E8E0067F568F569F56AF56B7B16FA124C6078B2 +:100E9E007FE6FE08E6FF7D031249147FF47E011201 +:100EAE004A777F03124458300B030210BC7871E668 +:100EBE0064446003020F817F0312482F8E5B8F5CA8 +:100ECE00C3E55C787B96E55B18964036D228756252 +:100EDE000075631375640075651775660075671385 +:100EEE00756800756911756A00756B117B137A0050 +:100EFE007D0E7C007F11124C607FF47E01124A77CA +:100F0E008071787FA65B08A65C78BAE6FFD3940062 +:100F1E00400AEFD3940950048F5A8037EFD39409C7 +:100F2E00400DEFD394125007EF24F7F55A8024EFBB +:100F3E00D39412400DEFD3941B5007EF24EEF55AC5 +:100F4E008011EFD3941B400BEFD394245005EF2464 +:100F5E00E5F55AE55AC454F0240AFF787FE6FD12EF +:100F6E004B05E55AC454F0240BFF7880E6FD124B76 +:100F7E0005C228302803020E45C21820252A7562A4 +:100F8E0000756314756400756513756600756711D9 +:100F9E00756800756911756A00756B117B117A00A1 +:100FAE007D147C007F0A803578BAE6FE75F00A84DF +:100FBE00FFEE75F00A84E5F0FD7C00756200756346 +:100FCE001175640075651175660075671175680099 +:100FDE00756911756A00756B117B0A7A00124C6087 +:100FEE007FF47E01124A77201505E4F55A800375C9 +:100FFE005A017871E6FF64416025EF644460201267 +:10100E004788E4FB7D01AF5A12472F8F5AE55A707D +:10101E000775330DC21580DA75330ED21580D3786D +:10102E0071E66444706078BAE6FFD39400400EEF28 +:10103E00D394095008EFC454F0240C804378BAE6D8 +:10104E00FFD39409400EEFD394125008EFC454F01E +:10105E00247C802C78BAE6FFD39412400EEFD39402 +:10106E001B5008EFC454F024EC801578BAE6FFD379 +:10107E00941B4012EFD39424500CEFC454F0245C14 +:10108E00FFAD5A124B057871E6B444097F147E0009 +:10109E00124A7780F1D218E4FF124A0D8F5A78AABD +:0E10AE00E6FD655A6005E4FF124B051220CCEA +:0110BC002211 +:101752001220CC788176A0D216789DE6F55B756270 +:101762000075630D75640075651675660075671101 +:1017720075F00A1229CCFF3395E0F5688F69E55BB5 +:1017820075F00A1229CCAFF0EF3395E0F56A8F6B52 +:101792007B107A007D0A7C007F05124C60AF5BEF04 +:1017A2003395E0FE7D021249147FF47E01124A77DE +:1017B2007F02124458300B03021D787F0212482F19 +:1017C200789DA6077871E6B44409789DE6FD7F0B03 +:1017D200124B057F0C124A0D8F5B75620075630D0B +:1017E200756400756516756600756711E55B75F0C1 +:1017F2000A1229CCFF3395E0F5688F69E55B75F035 +:101802000A1229CCAFF0EF3395E0F56A8F6B7B12A9 +:101812007A007D137C007F0D124C60AF5BEF339535 +:10182200E0FE7D021249147FF47E01124A777F02A4 +:10183200124458300B03021D787F0212482F78BFE2 +:10184200A6077871E6FF64427003021D78EFB44484 +:101852000978BFE6FD7F0C124B057F0D124A0D8FF2 +:101862005B75620075630175640075651A756600C3 +:1018720075670EE55B75F00A1229CCFF3395E0F52A +:10188200688F69E55B75F00A1229CCAFF0EF3395EA +:10189200E0F56A8F6B7B147A007D187C00E4FF12FE +:1018A2004C60AF5BEF3395E0FE7D021249147FF48A +:1018B2007E01124A777F02124458300B03021D78D0 +:1018C2007F0212482F8F5B7871E6FF644270030239 +:1018D2001D78EFB44407AD5B7F0D124B05756200B6 +:1018E20075630E756400756514E4F566F567F56851 +:1018F200F569F56AF56B7B05FA7D10FCFF124C6009 +:10190200788EE6FE08E6FF7D031249147FF47E011D +:10191200124A777F031244587F0312482F788EA60B +:101922000608A607300B03021D787871E6B444124C +:10193200788EE6FD7F03124B05788FE6FD7F041259 +:101942004B057562007563117564007565117566E6 +:10195200007567117568007569117884E6756A000B +:10196200F56B7B0D7A007D127C007F05124C607F47 +:10197200F47E01124A777871E6FF64446020EF64D6 +:1019820041601BEF644260161247887884E6FF7B51 +:10199200017D0912472F7884EFF6F53380D87871EC +:1019A200E6FF64427003021D78EFB444167884E6C1 +:1019B200FD7F0A124B05C3740A78849675F003A45E +:1019C20078B9F630972C75620075631475640075EA +:1019D200650E75660075670C756800756914756A21 +:1019E20000756B0DE4FBFA7D13FC7F12124C600252 +:1019F2001D6175620075630A75640075651275660E +:101A020000756711E4F568F569F56AF56B7B0CFA08 +:101A12007D10FC7F05124C6078BBE675F003A424B0 +:101A220013F582E43448F583E493FF7E007D0212CD +:101A320049147FF47E01124A777871E6FF644460AC +:101A420047EF64416042EF6442603D7D027F0612CF +:101A5200478C78BB12472978BBA6077871E6B44356 +:101A62000B78BB06E6D394094002E4F678BBE67530 +:101A7200F003A42413F582E43448F583E493FF7E53 +:101A8200007D0212491480B17871E6FF644270034E +:101A9200021D78EFB4440978BBE6FD7F05124B05C1 +:101AA2007562007563117564007565117566007560 +:101AB20067117893E6FF75F00A84756800F569EF9F +:101AC20075F00A84AFF0756A008F6B7B057A007D32 +:101AD2000E7C007F13124C607FF47E01124A7778ED +:101AE20093E6FFF55BB40503755B03EFB40A03E409 +:101AF200F55B7871E6FF6444605BEF64416056EF2A +:101B0200644260517D027C007F067E00124790E4B1 +:101B1200FB7D03AF5B12472F8F5B7871E6B4430EF8 +:101B2200055BD3E55B648094834003E4F55B7893C3 +:101B3200A65BE55BB403027605E55B7004789376F9 +:101B42000A7893E6FF75F00A8485F033EF75F00AA0 +:101B520084F532809D7871E6FF64427003021D783D +:101B6200EFB444097893E6FD7F06124B0578BBE695 +:101B7200FF75F003A42411F582E43448F583E4935D +:101B82007875F6EF75F003A42412F582E43448F573 +:101B920083E493787EF678BBE675F003A42413F50C +:101BA20082E43448F583E493FF7E007C037DE812EF +:101BB2002A1BAC06AD077893E675F009A4AEF02DAA +:101BC200F549EC3EF5487562007563117564007560 +:101BD20065117566007567117568007569117887FA +:101BE200E6756A00F56B7B057A007D0A7C007F1A38 +:101BF200124C607FF47E01124A777871E6FF6444EA +:101C02006034EF6441602FEF6442602A12478878A3 +:101C120087E6FFE4FB7D0512472F7887A6077871D8 +:101C2200E6B4430B788706E6D394054002E4F678DF +:101C320087E6F53380C47871E6FF64427003021DC3 +:101C420078EFB444097887E6FD7F07124B05756289 +:101C52000075631375640075650A75660075670C17 +:101C62007568007569117897E6756A00F56B7B14E3 +:101C72007A007D107C00E4FF124C607FF47E01123A +:101C82004A777871E6FF64446034EF6441602FEF75 +:101C92006442602A1247887897E6FFE4FB7D0512CA +:101CA200472F7897A6077871E6B4430B789706E634 +:101CB200D394054002E4F67897E6F53380C4787150 +:101CC200E6FF64427003021D78EFB444097897E698 +:101CD200FD7F08124B05D218756200756311756499 +:101CE2000075651175660075671175680075691173 +:101CF20078C2E6756A00F56B7B0C7A007D0E7C007B +:101D02007F0D124C607FF47E01124A777871E6FFF4 +:101D120064446034EF6441602FEF6442602A1247EA +:101D22008878C2E6FF7B037D0712472F78C2A60799 +:101D32007871E6B4430B78C206E6D3940740027684 +:101D42000378C2E6F53380C47871E6FF6442602608 +:101D5200EFB4440978C2E6FD7F09124B05C218E4CC +:101D6200FF124A0D8F5B78AAE6FD655B6005E4FF12 +:061D7200124B051220CC0B +:011D78002248 +:102415001220CCC218D2167562007563147564005B +:1024250075651875660075671475680075691175A9 +:102435006A00756B117B057A007D187C007F01129F +:102445004C607F0E124B608F5B7FF47E01124A77E2 +:10245500E55B7004C20D8002D20D7871E6FF64441D +:10246500602DEF64416028EF64426023124788E4E1 +:10247500FB7D01AF5B12472F8F5BE55B7007753303 +:102485000DC20D80D5755B0175330ED20D80CB78ED +:1024950071E6FF6442700302275BEFB44407AD5B4E +:1024A5007F0E124BAA75620075630575640075652C +:1024B50011756600756711756800756911756A0093 +:1024C500756B117B147A007D1B7C007F0A124C60B2 +:1024D5007F09124B608F5B7FF47E01124A77E55BC3 +:1024E5007004C2178002D2177871E6FF6444602D2C +:1024F500EF64416028EF64426023124788E4FB7D66 +:1025050001AF5B12472F8F5BE55B700775330DC21B +:102515001780D5755B0175330ED21780CB7871E6C0 +:10252500FF6442700302275BEFB44407AD5B7F098C +:10253500124BAA75620075630D7564007565167595 +:102545006600756711756800756911756A00756BA8 +:10255500117B057A007D147C007F0A124C607F0A8E +:10256500124B607874EFF67E007D021249147FF4F9 +:102575007E01124A777F02124458300B0302275B13 +:102585007F0212482F7874A6077871E6FF644270BF +:102595000302275BEFB444097874E6FD7F0A124B0A +:1025A500AA7562007563017564007565127566002C +:1025B50075670E756800756911756A00756B117B15 +:1025C5000C7A007D0E7C007F13124C607F0B124B42 +:1025D500608F5B7FF47E01124A77E55B7004C2254C +:1025E5008002D2257871E6FF6444602DEF64416076 +:1025F50028EF64426023124788E4FB7D01AF5B123C +:10260500472F8F5BE55B700775330DC22580D57548 +:102615005B0175330ED22580CB7871E6FF6442707D +:102625000302275BEFB44407AD5B7F0B124BAA7522 +:1026350062007563147564007565107566007567CD +:102645000F756800756911756A00756B117B0E7AD7 +:10265500007D057C007F0B124C607F36124B608F2E +:102665005B7FF47E01124A77E55B7004C224800229 +:10267500D2247871E6FF6444602DEF64416028EF51 +:1026850064426023124788E4FB7D01AF5B12472F4C +:102695008F5BE55B700775330DC22480D5755B01D3 +:1026A50075330ED22480CB7871E6FF644270030245 +:1026B500275BEFB44407AD5B7F36124BAA7562000A +:1026C5007563147564007565117566007567117518 +:1026D5006800756911756A00756B117B1D7A007D3F +:1026E500137C007F19124C607F0C124B608F5B7F4F +:1026F500F47E01124A77E55B7004C2138002D2139F +:102705007871E6FF6444602DEF64416028EF644210 +:102715006023124788E4FB7D01AF5B12472F8F5B77 +:10272500E55B700775330DC21380D5755B01753395 +:102735000ED21380CB7871E6FF64426019EFB44482 +:1027450007AD5B7F0C124BAA78AAE6FD7F0F124BF3 +:06275500AA1220CCD218EC +:01275B00225B +:02482F00AB07D5 +:10483100900001E4F55DF55E7A07C374089BC364DB +:1048410080F8EA648098402B742C2AF8E6FF7E00F9 +:10485100AD82AC83122A1BEF255EF55EEE355DF568 +:104861005D7C007D0AAF82AE83122A1B8E838F820C +:074871001A80C7AE5DAF5EC7 +:01487800221D +:07472800F8E6FFE4FB7D0948 +:10472F00A9057871E6FEB42A0F0FD3E96480F8EF7C +:10473F006480984043AF0322EEB4230F1FC3EB6492 +:10474F0080F8EF6480985030AF0122EBFD3395E095 +:10475F00FC7871E6FBC39DEC6480F8748098401878 +:10476F00E9FD3395E0FCD3EB9DEC6480F874809801 +:09477F0050067871E6FF76532222 +:1030600030972B7562007563117564007565167570 +:10307000660075671775680075690C756A00756B71 +:10308000117B0A7A007D0C7C007F11024C60756216 +:103090000075630C75640075650A756600756716C2 +:1030A000756800756911756A00756B117B117A007E +:1030B0007D117C007F11124C607FE87E03124A77FD +:1030C0007562007563017564007565197566007534 +:1030D0006715756800756914756A00756B117B0E4C +:1030E0007A007D1D7C007F11124C607FE87E03809A +:1030F000117871E6FF6444600EEF644260097F025C +:103100007E00124A7780EA7871E6B442127871E65E +:10311000644260030232347F02FE124A7780EE7806 +:1031200071E6B444097F027E00124A7780F175622D +:10313000007563117564007565117566007567111A +:10314000756800756911756A00756B117B167A00D8 +:103150007D0A7C007F0C124C60D218D21DC2053053 +:103160000AFDC20A1240CF789BE6FE08E6FF789E71 +:10317000A60608A607C21D755B07789EE6FA08E654 +:10318000FB7C007D0AFFAE02122A2D742C255BF811 +:10319000A6057C007D0AAF03AE02122A2D789EA6FA +:1031A0000608A607155BE55BB402CF803B7871E6A5 +:1031B000FF64446038EF64426033AF5B7E007D01A2 +:1031C0007C00124790742C255B124728742C255BD9 +:1031D000F8A6077871E6FF64536004EFB443CE05A8 +:1031E0005BE55BD3940740C5755B0380C07871E6EF +:1031F000B4420F7871E66442703A7F02FE124A7759 +:1032000080F17871E6B444097F027E00124A77802B +:10321000F1D2067F0512482F78A0A60608A60778E7 +:1032200093E6FF78A17004740A8001EF26F618E493 +:0432300036F6C21894 +:013234002277 +:1039D900200603023AE6C20678A0E6FA08E6FBFFEB +:1039E900AE02E48F4F8E4EF54DF54C789BE6FE08FE +:1039F900E6FFE48F538E52F551F55018E6FE08E6BE +:103A0900FFD39BEE9A400EEF78A196799FF7EE18B7 +:103A19009619F78012C379A1E7789C96FF19E718E0 +:103A290096789EF608A607789FE618466077E47FA1 +:103A3900107E27FDFCAB4FAA4EA94DA84C122A8235 +:103A4900AB53AA52A951A850122B0D8F458E448D04 +:103A5900438C427899A60608A607788176A07899BA +:103A6900E6FD7F01124B05789AE6FD7F02124B05B0 +:103A790075620075630C75640075650C7566007573 +:103A8900670E756800756905756A00756B057B1B9E +:103A99007A007D057C007F11124C607FE87E03125D +:103AA9004A77024C4575620075630A75640075654D +:103AB90001756600756716756800756911756A0084 +:103AC900756B117B0F7A007D117C007F11124C60A0 +:0E3AD9007FE87E03124A77124C451248C22243 +:1048C200789BE6FE08E6FFE48F4F8E4EF54DF54CE1 +:1048D2007899E6FE08E6FFE48F538E52F551F550C3 +:1048E200AD51AC50AB4FAA4EA94DA84C122A82E44E +:1048F2007B107A27F9F8122B0D8F458E448D438C4D +:0949020042789BA60608A60722D4 +:10417D0030972B7562007563117564007565167542 +:10418D00660075671775680075690C756A00756B43 +:10419D00117B0A7A007D0C7C007F11024C607562E8 +:1041AD000075630575640075650E75660075671499 +:1041BD00756800756911756A00756B117B0E7A0053 +:1041CD007D137C007F11124C607871E6FF644460B2 +:1041DD000EEF644260097F027E00124A7780EA7812 +:1041ED0071E6B4420F7871E66442702F7F02FE12C1 +:1041FD004A7780F17871E6B444097F027E00124A55 +:10420D007780F1124C45788176A07D277F01124B86 +:0C421D00057D107F02124B051220CC2200 +:10275C00755A01124C457871E6FF644470030229E6 +:10276C0075EF644270030229757D087C00E4FFFE5E +:10277C001247907B017D09AF5A12472F8F5A124C8A +:10278C00C1E55A14B4090050CD9027A375F003A4E9 +:10279C00C58325F0C583730227BE0227E9022814DE +:1027AC0002283F02286A0228950228C00228EB0260 +:1027BC00291575620075631175640075651275666F +:1027CC000075670A756800756913756A00756B0A80 +:1027DC007B167A007D017C007F0F02296F756200E9 +:1027EC0075631175640075650575660075670E7502 +:1027FC006800756914756A00756B117B167A007D1B +:10280C000C7C007F0502296F756200756316756478 +:10281C00007565117566007567117568007569112D +:10282C00756A00756B117B0A7A007D0C7C007F1138 +:10283C0002296F75620075631175640075651375F7 +:10284C006600756705756800756914756A00756BA7 +:10285C00117B167A007D0A7C007F0C02296F756251 +:10286C000075630A75640075651B756600756716DF +:10287C00756800756914756A00756B057B0F7A00B5 +:10288C007D0E7C007F0D02296F75620075631B75D0 +:10289C00640075651675660075670A75680075695C +:1028AC0014756A00756B0E7B1A7A007D1B7C007F99 +:1028BC000C02296F75620075630C756400756515E3 +:1028CC00756600756711756800756911756A007514 +:1028DC006B117B147A007D0A7C007F0B02296F75CB +:1028EC00620075630C756400756515756600756717 +:1028FC0014756800756917756A00756B147B147A0A +:10290C00007D0A7C007F0B805A756200756315751B +:10291C00640075651175660075670C7568007569DE +:10292C001B756A00756B1A7B147A007D0A7C007F1C +:10293C000B124C607FF47E01124A7775620075634E +:10294C000A75640075651375660075671175680006 +:10295C00756911756A00756B117B0E7A007D167C9A +:10296C00007F0C124C600227627871E66442604F63 +:10297C00E55A14B40900504790299275F003A4C588 +:10298C008325F0C583730229AD0229B30229B6024F +:10299C0029B90229BC0229BF0229C20229C5022970 +:1029AC00C8122415024CC102175202306002417D3C +:0F29BC00022C14023BE60233A002364D1237887C +:0129CB0022E9 +:103CE500788A122BFB00000000D2187F1E123E9D21 +:103CF500C004C005C006C0077F1A123E9DD003D080 +:103D050002D001D000EF2BFFEE3AFEED39FDEC3885 +:103D1500FCC004C005C006C0077F22123E9DD0032B +:103D2500D002D001D000EF2BFFEE3AFEED39FDECCD +:103D350038FCC004C005C006C0077F26123E9DD0D2 +:103D450003D002D001D000EF2BFFEE3AFEED39FD96 +:103D5500EC38FCC004C005C006C0077F2A123E9D92 +:103D6500D003D002D001D000EF2BFFEE3AFEED39A3 +:103D7500FDEC38FCC004C005C006C0077F30123E0C +:103D85009DD003D002D001D000EF2BFFEE3AFEED1F +:103D950039FDEC38FC788A122BEF788A122BD67510 +:103DA5005E081242297871E6FF6444600EEF6442B2 +:0C3DB50060097F027E00124A7780EA223B +:10364D007F12124B60EF7F00FEC006C0077F131282 +:10365D004B60EFFDD0E02DFFD0E03400FEC006C082 +:10366D00077F10124B60EF7F00FEC006C0077F1171 +:10367D00124B60EFFDD0E02DFDD0E03400FCD0E02A +:10368D002DFFD0E03CFEC006C0077F14124B60EF4B +:10369D007F00FEC006C0077F15124B60EFFDD0E026 +:1036AD002DFDD0E03400FCD0E02DFFD0E03CFEC07D +:1036BD0006C0077F16124B60EF7F00FEC006C007E5 +:1036CD007F17124B60EFFDD0E02DFDD0E03400FCF4 +:1036DD00D0E02DFFD0E03CFEC006C0077F18124B96 +:1036ED0060EF7F00FEC006C0077F19124B60EFFD33 +:1036FD00D0E02DFDD0E03400FCD0E02DFFD0E03C3B +:10370D00FEC006C0077F2E124B60EF7F00FEC00685 +:10371D00C0077F2F124B60EFFDD0E02DFDD0E034C0 +:10372D0000FCD0E02D7870F6D0E03C18F675620004 +:10373D007563117564007565117566007567117592 +:10374D006800756911756A00756B117B117A007DC2 +:10375D00117C007F11124C60786FE6FE08E6FF7D4C +:10376D00051245FF7871E6FF6444600EEF64426018 +:0B377D00097F027E00124A7780EA22DA +:103BE600755B01E4F55C7F08124B6078BAEFF6C2AC +:103BF60003D394064005755B01800578BAE6F55B4C +:103C06007871E6B444097F027E00124A7780F17526 +:103C160062007563117564007565117566007567D8 +:103C260011756800756911756A00756B117B117ADB +:103C3600007D0C7C00AF5B124C607FF47E01124A63 +:103C460077E4F55CD2187871E6FF64447003023CB1 +:103C5600D5EF64416079EF64426074AF5C7E007DAD +:103C6600017C00124790742C255CF8E6FF7B017DF1 +:103C76000612472F742C255CF8A607E52CF55BAFDA +:103C86005B124C8A8F5BE55BB401047F1A802BE5DF +:103C96005BB402047F1E8022E55BB403047F2280AE +:103CA60019E55BB404047F268010E55BB405047F48 +:103CB6002A8007E55BB4060A7F30123E9D788A1299 +:103CC6002BEF788A122BD67D06124914023C4C78CB +:0E3CD60071E6B444097F027E00124A7780F145 +:013CE40022BD +:1033A000755B01E4F55C7F08124B6078BAEFF6C2FA +:1033B00003D394064005755B01800578BAE6F55B9A +:1033C0007871E6B444097F027E00124A7780F1E505 +:1033D0005BFD7C0075620075631175640075651195 +:1033E000756600756711756800756911756A0075F5 +:1033F0006B117B1E7A007F0B124C607FF47E0112F2 +:103400004A77755C01C2187871E6FF644470030264 +:1034100034E8EF644170030234E8EF644270030261 +:1034200034E8AF5C7E007D017C00124790742C254F +:103430005CF8E6FF7B017D0612472F742C255CF8B3 +:10344000A607E52DF55BAF5B124C8A8F5BE55BB49D +:1034500001117F10124B60EF7F00FEC006C0077F96 +:1034600011806CE55BB402117F12124B60EF7F009C +:10347000FEC006C0077F138056E55BB403117F14BE +:10348000124B60EF7F00FEC006C0077F158040E54D +:103490005BB404117F16124B60EF7F00FEC006C0C4 +:1034A000077F17802AE55BB405117F18124B60EF88 +:1034B0007F00FEC006C0077F198014E55BB40620BC +:1034C0007F2E124B60EF7F00FEC006C0077F2F12D9 +:1034D0004B60EFFDD0E02D7870F6D0E0340018F6A8 +:1034E000786F12490D0234077871E6B444097F02FF +:0934F0007E00124A7780F1D21827 +:0134F90022B0 +:1032350075620075630E75640075650A75660075BF +:103245006713756800756911756A00756B117B16D2 +:103255007A007D0C7C007F11124C607871E6FF646A +:10326500436016EF64416011EF6442600C7D087C99 +:1032750000E4FFFE12479080E27871E66443600344 +:1032850002339F788A122BFB00000000E4786FF66A +:1032950008F678BAE664017024788A122BD68F5F17 +:1032A5008E5E8D5D8C5C7F1A1244C8786FE6FD7F5B +:1032B50010124BAA7870E6FD7F1102339C78BAE6AE +:1032C50064027024788A122BD68F5F8E5E8D5D8C9A +:1032D5005C7F1E1244C8786FE6FD7F12124BAA78F8 +:1032E50070E6FD7F1302339C78BAE6640370247898 +:1032F5008A122BD68F5F8E5E8D5D8C5C7F22124489 +:10330500C8786FE6FD7F14124BAA7870E6FD7F152D +:1033150002339C78BAE664047023788A122BD68F20 +:103325005F8E5E8D5D8C5C7F261244C8786FE6FDEE +:103335007F16124BAA7870E6FD7F17805A78BAE699 +:1033450064057023788A122BD68F5F8E5E8D5D8C17 +:103355005C7F2A1244C8786FE6FD7F18124BAA7865 +:1033650070E6FD7F19803078BAE6FFC39406402ADF +:10337500EFD394245024788A122BD68F5F8E5E8DDE +:103385005D8C5C7F301244C8786FE6FD7F2E124B52 +:0B339500AA7870E6FD7F2F124BAA22E1 +:1037880075620075630E75640075650A7566007567 +:103798006713756800756911756A00756B117B167A +:1037A8007A007D0C7C007F11124C607871E6FF6412 +:1037B800436016EF64416011EF6442600C7D087C41 +:1037C80000E4FFFE12479080E27871E664436003EC +:1037D8000238C2788A122BFB00000000E4786FF6EA +:1037E80008F6788A122BD68F5F8E5E8D5D8C5C7F93 +:1037F8001A1244C8786FE6FD7F10124BAA7870E65B +:10380800FD7F11124BAA788A122BD68F5F8E5E8DA0 +:103818005D8C5C7F1E1244C8786FE6FD7F12124BE8 +:10382800AA7870E6FD7F13124BAA788A122BD68FDE +:103838005F8E5E8D5D8C5C7F221244C8786FE6FDDA +:103848007F14124BAA7870E6FD7F15124BAA788A6E +:10385800122BD68F5F8E5E8D5D8C5C7F261244C8DE +:10386800786FE6FD7F16124BAA7870E6FD7F171277 +:103878004BAA788A122BD68F5F8E5E8D5D8C5C7F0B +:103888002A1244C8786FE6FD7F18124BAA7870E6B2 +:10389800FD7F19124BAA788A122BD68F5F8E5E8D08 +:1038A8005D8C5C7F301244C8786FE6FD7F2E124B2A +:0B38B800AA7870E6FD7F2F124BAA22B9 +:104A4500C0F9A4B0999282F880908883C6A1868E19 +:104A5500BFFF8CAF8789C7A3ABC2AAC19195F60FDB +:104A650001161614131718010C0511111111111146 +:024A750011111D +:1046C700C2AFE4F56CE56C78C266701330181074ED +:1046D7002C256CF8E6904A4593547FF56E800C7450 +:1046E7002C256CF8E6904A4593F56EE4F56DE56E7A +:1046F70030E704D2A78002C2A7D2A6000000C2A654 +:10470700E56E25E0F56E000000124CC1056DE56D04 +:10471700D3940740D9056CE56CC3940840A7D2AF82 +:01472700226F +:104C60008F2C8D2D8B2E85632F8565308567318543 +:084C70006932856B330246C76F +:104C4500752C11752D11752E11752F117530117566 +:0B4C550031117532117533110246C792 +:084229008F5D8E5C8D5B8C5AE9 +:10423100755F07C37408955EC36480F8E55F6480A9 +:1042410098406CE47B0AFAF9F8AF5DAE5CAD5BAC0B +:104251005A122B0DAF03742C255FF8A607E4FFFE5D +:10426100FDFCAB5DAA5CA95BA85AC3122B9F701F12 +:1042710078C2E6FFAD5FED3395E0FCC3ED9F74803E +:10428100F86C98500A742C255FF8E670027611AF2D +:104291005DAE5CAD5BAC5AE47B0AFAF9F8122B0D0A +:1042A1008F5D8E5C8D5B8C5A124CC1155F8084E5ED +:1042B1002CB4110BE52DB41106752C0C752D1B02B8 +:0242C10046C7EE +:0645FF008E5B8F5C8D5DF8 +:10460500755E07C37408955DC36480F8E55E6480D4 +:10461500984041AE5BAF5C7C007D0A122A2D742C5C +:10462500255EF8A605E55C455B7013C3E55E648011 +:104635009487500A742C255EF8E670027611AE5BFD +:10464500AF5C7C007D0A122A2D8E5B8F5C124CC1FB +:10465500155E80AF752C0B752D0A752E140246C795 +:10495000E4F558AF58EF3395E0FE74642FF5827498 +:104960004A3EF583E493F5347FC87E00124A77E42B +:10497000FF742D2FF8E6FE742C2FF8A6060FBF0843 +:0F498000F01246C70558C3E5586480949340C4AD +:01498F002205 +:044A77008E638F6457 +:104A7B00E4F565F566C3E5669564E5659563501BDE +:104A8B00E4FFFE0FBF00010EEF64694E70F5124C90 +:0B4A9B00C10566E56670DE056580DA87 +:014AA60022ED +:064990008B5A8A5B895C72 +:10499600D228E4FFEFC39561E5606480F8748098DF +:1049A6005025AB5DAA5EA95F8F827583001229EE42 +:1049B600FEAB5AAA5BA95C8F827583001229EE6E44 +:0949C6006002C2280F80CDA22876 +:0149CF0022C5 +:024C2900A907D9 +:104C2B00E4FFEFC39BEA6480F8748098500BA805EF +:094C3B00E6A801F6090D0F80E95D +:014C4400224D +:074CC10075A61E75A6E12295 +:0F4C8A00EFC4540F75F00AA4FEEF540F2EFF2253 +:104B05008F5D8D5E124CC1124C997881E6FF124B78 +:104B1500ED12000EAF5D124BED12000EAF5E124BA3 +:0E4B2500ED12000E124CA87F147E00024A779B +:024A0D008F5EBA +:104A0F00124CC1124C997881E6FF124BED12000E39 +:104A1F00AF5E124BED12000E124C997881E604FF37 +:104A2F00124BED12000E124C0C8F5FD2B612000E0D +:054A3F00124CA8AF5F5E +:014A4400224F +:0F4C9900D2B6D2B7000000C2B6000000C2B722E8 +:0D4CA800C2B6000000D2B7000000D2B62254 +:104BED00E4FEEF30E704D2B68002C2B6000000D278 +:0E4BFD00B7000000C2B7EF25E0FF0EBE08E4CF +:014C0B002286 +:104C0C00E4FFFEEF25E0FFC2B7000000D2B730B6DC +:0C4C1C000543070180000EBE08E9C2B786 +:014C28002269 +:08000600124C997FD0124BED62 +:0D000E00D2B6000000D2B7000000C2B72239 +:104BAA008F608D61124CC1120006AF60124BED127C +:104BBA00000EAF61124BED12000E124CA87F147E4C +:044BCA0000024A7724 +:024B60008F5E66 +:104B6200124CC1120006AF5E124BED12000E124C37 +:104B7200997FD1124BED12000E124C0CD2B61200DC +:044B82000E024CA82B +:0244C8008F5B08 +:1044CA00E55FFF780AEFF6FBAF5FAE5EAD5DAC5C11 +:1044DA007808122BB0E4780BA607AF5FAE5EAD5D2D +:1044EA00AC5C7810122BB0E4780CA607AF5FAE5E16 +:1044FA00AD5DAC5C7818122BB0780DA607AD03AF92 +:10450A005B124BAAE55B04FF780BE6FD124BAAE5AA +:10451A005B2402FF780CE6FD124BAAE55B2403FF3D +:07452A00780DE6FD024BAA2B +:023E9D008F5D37 +:103E9F00124B60E4FCFDFE780A122BEFE55D04FF88 +:103EAF00124B60E4FCFDFE780E122BEFE55D240251 +:103EBF00FF124B60E4FCFDFE7812122BEFE55D2440 +:103ECF0003FF124B60E4FCFDFE7816122BEF780E09 +:103EDF00122BD67808122BC3E4FDFCC004C005C01A +:103EEF0006C007780A122BD6D003D002D001D0001B +:103EFF00EF2BFFE43AFEE439FDE438FCC004C005C3 +:103F0F00C006C0077812122BD67810122BC3E4FC10 +:103F1F00D003D002D001D000EB2FFFEA3EFEE93DE7 +:103F2F00FDEC38FCC004C005C006C0077816122B84 +:103F3F00D67818122BC3D003D002D001D000EB2FAC +:0A3F4F00FFEA3EFEE93DFDE83CFC00 +:013F59002245 +:10434F00D284D285D286D287C280D281D282D283C2 +:10435F002084037F01222085037F02222086037F92 +:10436F0003222087037F4122D280C281D282D2834F +:10437F002084037F04222085037F05222086037F6C +:10438F0006222087037F4222D280D281C282D2832B +:10439F002084037F07222085037F08222086037F46 +:1043AF0009222087037F4322D280D281D282C28307 +:1043BF002084037F2A222085037F00222086037F0B +:0B43CF0023222087037F44227F7822F6 +:0C4CB500C2B47F057E00124A77D2B42200 +:104AA700E4F556F557E55625E0F556D2B300000074 +:104AB700C2B300000030B2054356018000124CC15A +:0F4AC7000557C3E5576480948840DAD2B3AF56E1 +:014AD60022BD +:10453100300F54124AA78F2B124AA78F54124AA741 +:104541008F2AE52B30E704C21B8002D21BE55425DC +:10455100E025E0FFE52AC4131354032FF52AE52BC8 +:1045610025E025E0FFE554C4131354032FF52BFE7A +:104571007C00E4252AF509EC3EF508124CC1124AEB +:10458100A78F55C20FD2A8E555B4490B7894A60858 +:0845910008A609D226D202227D +:030000000242C3F6 +:0C42C300787FE4F6D8FD7581C202430A42 +:1029CC00C2D530F707B2D563F0FF05F030E70CB293 +:1029DC00D5F4048463F0FF05F080018430D502F453 +:0229EC000422C3 +:1029EE00BB010CE58229F582E5833AF583E022509E +:1029FE0006E92582F8E622BBFE06E92582F8E222E8 +:0D2A0E00E58229F582E5833AF583E4932201 +:102A1B00EF8DF0A4A8F0CF8CF0A428CE8DF0A42ECF +:022A2B00FE2289 +:102A2D00BC000BBE0029EF8DF084FFADF022E4CC8D +:102A3D00F875F008EF2FFFEE33FEEC33FCEE9DEC56 +:102A4D00984005FCEE9DFE0FD5F0E9E4CEFD22ED9C +:102A5D00F8F5F0EE8420D21CFEADF075F008EF2FE6 +:102A6D00FFED33FD4007985006D5F0F222C398FDD7 +:052A7D000FD5F0EA2274 +:102A8200E88FF0A4CC8BF0A42CFCE98EF0A42CFCF3 +:102A92008AF0EDA42CFCEA8EF0A4CDA8F08BF0A471 +:102AA2002DCC3825F0FDE98FF0A42CCD35F0FCEBD0 +:102AB2008EF0A4FEA9F0EB8FF0A4CFC5F02ECD3995 +:0F2AC200FEE43CFCEAA42DCE35F0FDE43CFC2202 +:102AD10075F008758200EF2FFFEE33FECD33CDCCBC +:102AE10033CCC58233C5829BED9AEC99E58298403F +:102AF1000CF582EE9BFEED9AFDEC99FC0FD5F0D61C +:102B0100E4CEFBE4CDFAE4CCF9A88222B800C1B945 +:102B11000059BA002DEC8BF084CFCECDFCE5F0CB83 +:102B2100F97818EF2FFFEE33FEED33FDEC33FCEBBC +:102B310033FB10D703994004EB99FB0FD8E5E4F977 +:102B4100FA227818EF2FFFEE33FEED33FDEC33FC64 +:102B5100C933C910D7059BE99A4007EC9BFCE99A58 +:102B6100F90FD8E0E4C9FAE4CCFB2275F010EF2F9D +:102B7100FFEE33FEED33FDCC33CCC833C810D7079D +:102B81009BEC9AE899400AED9BFDEC9AFCE899F8D8 +:0E2B91000FD5F0DAE4CDFBE4CCFAE4C8F9226B +:102B9F00EB9FF5F0EA9E42F0E99D42F0E89C45F08C +:012BAF002203 +:102BB000E8600FECC313FCED13FDEE13FEEF13FF03 +:032BC000D8F12227 +:102BC300E8600FEFC333FFEE33FEED33FDEC33FC70 +:032BD300D8F12214 +:0C2BD600E6FC08E6FD08E6FE08E6FF222B +:0D2BE200E6FB08E6F908E6FA08E6CBF82263 +:0C2BEF00ECF608EDF608EEF608EFF62212 +:102BFB00D083D082E493F608740193F608740293A1 +:092C0B00F608740393F6740473D7 +:104C7800C3EE6480948040028007C3E49FFFE49EF3 +:024C8800FE220A +:1042CF000234FAE493A3F8E493A34003F68001F2D7 +:1042DF0008DFF48029E493A3F85407240CC8C333F0 +:1042EF00C4540F4420C8834004F456800146F6DFBF +:1042FF00E4800B0102040810204080903DC1E47E51 +:10430F00019360BCA3FF543F30E509541FFEE493B3 +:10431F00A360010ECF54C025E060A840B8E493A37A +:10432F00FAE493A3F8E493A3C8C582C8CAC583CAA5 +:10433F00F0A3C8C582C8CAC583CADFE9DEE780BE5D +:013E9C000025 +:00000001FF diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.lnp b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.lnp new file mode 100644 index 0000000..495cd94 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.lnp @@ -0,0 +1,9 @@ +"main.obj", +"ser_disp.obj", +"utility.obj", +"eeprom.obj", +"4x4_key.obj", +"ADC_AD7780.obj", +"ADC_HX711.obj" +TO "Tin_fill_4x4_key_36Recipe_ad7780_55WD_default" +RAMSIZE(256) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.plg b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.plg new file mode 100644 index 0000000..7c37742 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default.plg @@ -0,0 +1,35 @@ + + +
+

µVision Build Log

+

Project:

+C:\FILES\FILLTRONICS\2025 FILLTRONIC FINAL PROGRAMS\EMBEDED PROGRAMS 2025\C51 2025\Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2\fill.uvproj +Project File Date: 01/21/2026 + +

Output:

+compiling main.c... +main.c - 0 Error(s), 0 Warning(s). +Build target 'Target 1' +linking... +Program Size: data=189.1 xdata=0 code=19656 +creating hex file from "Tin_fill_4x4_key_36Recipe_ad7780_55WD_default"... +"Tin_fill_4x4_key_36Recipe_ad7780_55WD_default" - 0 Error(s), 0 Warning(s). +compiling main.c... +main.c - 0 Error(s), 0 Warning(s). +Build target 'Target 1' +linking... +Program Size: data=189.1 xdata=0 code=19656 +creating hex file from "Tin_fill_4x4_key_36Recipe_ad7780_55WD_default"... +"Tin_fill_4x4_key_36Recipe_ad7780_55WD_default" - 0 Error(s), 0 Warning(s). +Build target 'Target 1' +compiling main.c... +compiling ser_disp.c... +compiling utility.c... +compiling eeprom.c... +compiling 4x4_key.c... +compiling ADC_AD7780.C... +compiling ADC_HX711.C... +linking... +Program Size: data=189.1 xdata=0 code=19656 +creating hex file from "Tin_fill_4x4_key_36Recipe_ad7780_55WD_default"... +"Tin_fill_4x4_key_36Recipe_ad7780_55WD_default" - 0 Error(s), 0 Warning(s). diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default_abort.hex b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default_abort.hex new file mode 100644 index 0000000..8c89d6f --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/Tin_fill_4x4_key_36Recipe_ad7780_55WD_default_abort.hex @@ -0,0 +1,1303 @@ +:1047E3000306060301090901020808020505010180 +:1047F3000202070706060303040401000200030084 +:1048030004000500060007000800090009090A045E +:10481300020A10080A180C0A20100A2C160A402053 +:0C4823000A542A0A68320A68340A683E07 +:103DC10001810001C20401920001980001BB0001C0 +:103DD100840001B90A01960001AA1201BA01019DEC +:103DE1000101BF0102A8000002A60000018200013A +:103DF100745001830002C0000002900000027C00A8 +:103E01000002850000028E0000027A0000027F009D +:103E110000024A0000029B000002940000027600AA +:103E2100000AAB0000000000000000000002880052 +:103E3100000299271002BC0064043600000000044F +:103E41002600000000048A00000000026F0000024A +:103E510078000002720000C11BC10AC11CC118C157 +:103E61001DC123C111C195C109C107C110C105C13E +:103E710006C10BC11AC108C100C120C121C114C1B1 +:103E81009FC10EC119C125C113C117C124C101C1EF +:0B3E910012C103C10DC116C102C10C1B +:1034FA00124AD7124CC17871E6B44302C21FC218ED +:10350A0075620075631175640075651175660075DD +:10351A006711756800756911756A00756B117B1101 +:10352A007A007D117C007F11124C601249501220E2 +:10353A00CCC218E4FF124A0D78BEEFF678AAE66FFD +:10354A0070030235D075620075630A75640075658B +:10355A001B756600756716756800756914756A00CB +:10356A00756B057B0F7A007D0E7C007F0D124C6017 +:10357A007871E6FF64446013EF6442600EEF6441C1 +:10358A0060097F027E00124A7780E57871E6B444CA +:10359A003575620075630A75640075650D75660098 +:1035AA00756701756800756918756A00756B097B1E +:1035BA00177A007D167C007F11124C60122C147F42 +:1035CA00F47E01124A77124CB5124C45301F401254 +:1035DA0049D0122E59124C45D20575620075630AFC +:1035EA0075640075651375660075670E75680075F4 +:1035FA006911756A00756B117B147A007D117C0064 +:10360A007F11124C607FE87E03124A77124C45D232 +:10361A00181240CF12434F7871A60712001E121DCE +:10362A0079124CC11210BD78830620041020050DB2 +:10363A00E6D3940240071238C3E47883F6787176A9 +:03364A007880CEB7 +:104AD70075A0FF7590FF75891DE4F58CF58A7588BB +:104AE7005575A88975B801758DFC758B66F598C2E3 +:0E4AF70088D2A8D2AFC294C291C292C29322BA +:030003000246654D +:10466500C0E0C0F0C083C082C0D075D000C000C01B +:1046750001C002C003C004C005C006C007D20F12A6 +:104685004531D20A30021EC202124BCE7896067907 +:1046950096E7C378B996400D78967600124B86203A +:1046A5000703124015D2A8D007D006D005D004D0F4 +:1046B50003D002D001D000D0D0D082D083D0F0D0AA +:0246C500E032E1 +:03001B000248791F +:10487900C0E0C0F0C083C082C0D075D000C000C005 +:1048890001C002C003C004C005C006C007C28E1221 +:10489900434F7871A607758B66758D32D28ED00716 +:1048A900D006D005D004D003D002D001D000D0D09A +:0948B900D082D083D0F0D0E032AF +:1020CC00C20C7F09124B608F5DE55DB40104D21721 +:1020DC008002C2177F0B124B608F5DE55DB401046B +:1020EC00D2258002C2257F0E124B608F5DE55DB458 +:1020FC000104D20D8002C20D2025077D017F08123C +:10210C004BAA7F08124B6078BAA6077F0C124B6063 +:10211C008F5DE55DB40104D2138002C2137F0A12F5 +:10212C004B607874A6077F36124B608F5DE55DB40B +:10213C000104D2248002C2247F34124B60EF75F06C +:10214C0064A4FFAEF0C006C0077F35124B60EFFDF4 +:10215C00D0E02D7879F6D0E0340018F6124CC17826 +:10216C00BAE6FFD39400400EEFD39409500878815F +:10217C0076A08F5D8043EFD394094011EFD3941276 +:10218C00500B788176A2EF24F7F55D802CEFD39479 +:10219C00124011EFD3941B500B788176A4EF24EEF0 +:1021AC00F55D8015EFD3941B400FEFD394245009A9 +:1021BC00788176A6EF24E5F55D300D147F39124B4E +:1021CC0060EF7F00FEC006C0077F3A124B60801B99 +:1021DC00E55DC454F0FF124A0DEF7F00FEC006C04F +:1021EC0007E55DC454F004FF124A0DEFFDD0E02D5D +:1021FC0078C1F6D0E0340018F6E55DC454F0240242 +:10220C00FF124A0DEF7F00FEC006C007E55DC45407 +:10221C00F02403FF124A0DEFFDD0E02D7891F6D09B +:10222C00E0340018F6E55DC454F02404FF124A0DA6 +:10223C00EF7F00FEC006C007E55DC454F02405FF27 +:10224C00124A0DEFFDD0E02D787DF6D0E034001869 +:10225C00F6E55DC454F02406FF124A0DEF7F00FE34 +:10226C00C006C007E55DC454F02407FF124A0DEF09 +:10227C00FDD0E02D7886F6D0E0340018F6E55DC48C +:10228C0054F02408FF124A0DEF7F00FEC006C00771 +:10229C00E55DC454F02409FF124A0DEFFDD0E02D8A +:1022AC00787BF6D0E0340018F6E55DC454F0240ACF +:1022BC00FF124A0DEF7F00FEC006C007E55DC45457 +:1022CC00F0240BFF124A0DEFFDD0E02D7880F6D0F4 +:1022DC00E0340018F6E55DC454F0240CFF124A0DEE +:1022EC008F5DE55D7004C2158002D215788176A0F1 +:1022FC007F01124A0DEF7F00FEC006C0077F02125D +:10230C004A0DEFFDD0E02D789AF6D0E0340018F6A7 +:10231C007F03124A0DEF7F00FEC006C0077F041238 +:10232C004A0DEFFDD0E02D788FF6D0E0340018F692 +:10233C007F05124A0D78BBA6077F06124A0D7893CB +:10234C00A6077F07124A0D7887A6077F08124A0D49 +:10235C007897A6077F09124A0D78C2A6077F0A1242 +:10236C004A0D7884EFF6C3740A9F75F003A478B90C +:10237C00F6124CC178BBE6FF75F003A42411F5826C +:10238C00E43448F583E4937875F6EF75F003A424F0 +:10239C0012F582E43448F583E493787EF678BBE654 +:1023AC0075F003A42413F582E43448F583E493FF19 +:1023BC007E007C037DE8122A1BAC06AD077893E601 +:1023CC0075F009A4AEF02DF549EC3EF5487F0B12E3 +:1023DC004A0D789DA6077F0C124A0D78BFA6077F81 +:1023EC000D124A0DEF75F00AA478BCA6F008F6C3DE +:1023FC0079C1E7787D96FF19E7189678A2F608A6BA +:08240C000708F608A607C2123A +:0124140022A5 +:102E5900C22875620075630F75640075651475661F +:102E69000075670E756800756905756A00756B14DC +:102E79007B167A007D0E7C007F05124C607FF47E04 +:102E890001124A7775620075631A756400756517D2 +:102E990075660075671375680075691C756A007534 +:102EA9006B117B0E7A007D1A7C007F11124C607FBA +:102EB900F47E01124A77E4FF124A0D8F58E55878DB +:102EC900AA667021F56275630CF56475650CF56683 +:102ED90075670EF568756905F56A756B057B1BFAEB +:102EE9007D05FC802675620075630A756400756549 +:102EF90001756600756716756800756911756A0050 +:102F0900756B117B0F7A007D117C007F11124C606B +:102F19007FF47E01124A7775620075631475640047 +:102F290075650C75660075671175680075691175A9 +:102F39006A00756B117B137A007D117C007F111279 +:102F49004C607FF47E01124A777F0F124B608F58D5 +:102F5900E55878AA667021F56275630CF5647565A4 +:102F69000CF56675670EF568756905F56A756B0583 +:102F79007B1BFA7D05FC802675620075630A756402 +:102F890000756501756600756716756800756911C4 +:102F9900756A00756B117B0F7A007D117C007F11BA +:102FA900124C607FF47E01124A7775620075630DD9 +:102FB90075640075650C756600756711756800752F +:102FC9006911756A00756B117B0A7A007D117C00A5 +:102FD9007F11124C60C20AE4F559300A04C20AD2C0 +:102FE900287F047E00124A770559E559C394FF40AA +:102FF900E930282F75620075630C75640075650CDE +:1030090075660075670E756800756905756A0075DE +:103019006B057B1B7A007D057C007F11124C60C219 +:1030290019802D75620075630A75640075650175EF +:103039006600756716756800756911756A00756BA4 +:10304900117B0F7A007D117C007F11124C60D2191F +:073059007FF47E01024A77BB +:1049D000E4F558E558FB3395E0FAAD03FCAF58EF2A +:1049E0003395E0F5628F63F5648F65F5668F67F543 +:1049F000688F69F56A8F6B124C607FC87E00124A1F +:0C4A0000770558C3E5586480948A40C7CD +:014A0C002287 +:103F5A0078C076030876E8789076000876C8787C88 +:103F6A007600087632E47885F608F6788EF60876D2 +:103F7A000A787AF6087664787FF608F6D215788495 +:103F8A007609C3740A940975F003A478B9F678BB64 +:103F9A00760178937605788776017897760178C2E4 +:103FAA00760478BBE6FF75F003A42411F582E434A5 +:103FBA0048F583E4937875F6EF75F003A42412F5B7 +:103FCA0082E43448F583E493787EF678BBE675F0AC +:103FDA0003A42413F582E43448F583E493FF7E00B6 +:103FEA007C037DE8122A1BAC06AD077893E675F0D0 +:103FFA0009A4AEF02DF549EC3EF548789D76037894 +:0B400A00BF760278BC760008761E220C +:102C1400E4F55B755C01F56275630AF56475651B23 +:102C2400F566756716F568756914F56A756B057B45 +:102C34000FFA7D0EFC7F0D124C607FB87E0B124A9A +:102C440077123F5A75620075630D756400756501EE +:102C5400756600756718756800756909756A007589 +:102C64006B107B0A7A007D177C007F16124C60780B +:102C7400AAE6FDE4FF124B057D017F08124BAA75FD +:102C84005B01E55BD394004010E55BD394095009E4 +:102C9400788176A0855B5C804CE55BD39409401316 +:102CA400E55BD39412500C788176A2E55B24F7F5AA +:102CB4005C8032E55BD394124013E55BD3941B50E4 +:102CC4000C788176A4E55B24EEF55C8018E55BD393 +:102CD400941B4011E55BD39424500A788176A6E5D1 +:102CE4005B24E5F55CE55CC454F0FF78C0E6FD12B6 +:102CF4004B05E55CC454F004FF78C1E6FD124B05B6 +:102D0400E55CC454F02402FF7890E6FD124B05E51F +:102D14005CC454F02403FF7891E6FD124B05E55C96 +:102D2400C454F02404FF787CE6FD124B05E55CC432 +:102D340054F02405FF787DE6FD124B05E55CC45490 +:102D4400F02406FF7885E6FD124B05E55CC454F0DB +:102D54002407FF7886E6FD124B05E55CC454F02495 +:102D640008FF787AE6FD124B05E55CC454F02409AB +:102D7400FF787BE6FD124B05E55CC454F0240AFFA2 +:102D8400787FE6FD124B05E55CC454F0240BFF7814 +:102D940080E6FD124B05E55CC454F0240CFF7D0174 +:102DA400124B05124788124CC1055BE55BD3942492 +:102DB4005003022C86788176A0788EE6FD7F03127C +:102DC4004B05788FE6FD7F04124B0578BBE6FD7F4B +:102DD40005124B057893E6FD7F06124B057887E6CE +:102DE400FD7F07124B057897E6FD7F08124B0578A7 +:102DF400C2E6FD7F09124B057884E6FD7F0A124B7B +:102E040005789DE6FD7F0B124B0578BFE6FD7F0C30 +:102E1400124B0578BDE6FD7F0D124B05E4FD7F09DD +:102E2400124BAAE4FD7F0B124BAAE4FD7F0C124B5C +:102E3400AA7D377F0A124BAAE4FD7F36124BAA788B +:102E4400AAE6FD7F0F124BAAE4FD7F0E124BAA12D5 +:052E540020CC024C45FA +:104BCE007894E6FE08E6FFE4FCFDE5392FF539E5BD +:0F4BDE00383EF538ED3537F537EC3536F53622FC +:104B860078B9E6FBE4FAF9F8AF39AE38AD37AC36AA +:104B9600122B0D7876A60608A607E4F539F538F542 +:044BA60037F5362287 +:10401500D227755604E55625E024A9F8E6FE08E6FC +:10402500FFE55625E024ABF8A60608A607D556E514 +:104035007876E6FE08E6FF78ABA60608A607E4F55F +:1040450056E55625E024AEF9E55625E024ACF8C33F +:10405500E697FF18E61997FE124C78D3EF9405EE14 +:10406500648094804002C2270556E556C3940440F7 +:10407500D0302755E4F545F544F543F542F556E5C9 +:104085005625E024ABF8E6FE08E6FFE4FCFDE54531 +:104095002FF545E5443EF544ED3543F543EC354212 +:1040A500F5420556E556B405D6AF45AE44AD43AC2D +:1040B50042E47B05FAF9F8122B0D8F458E448D43AA +:0940C5008C427876A60608A607D5 +:0140CE0022CF +:1040CF007876E6F53408E6F535124599124CC112AB +:1040DF004B33201D061239D91248C2D3789CE6956E +:1040EF004918E695484043301F40C218124CC1D2C0 +:1040FF000475620075630E7564007565167566004C +:10410F00756712756800756911756A00756B117B9B +:10411F00157A007D117C007F11124C607D087C00A8 +:10412F00E4FFFE124790D2188002C20430193EC23B +:10413F0018124CC1D20475620075630C756400755A +:10414F00651175660075670E756800756913756A78 +:10415F0000756B137B0D7A007D0A7C007F11124C6A +:0E416F00607D087C00E4FFFE124790D218220B +:1045990030051785344A85354BA21B921C7898063D +:1045A900E6D394034004C205E4F6A21C301B01B310 +:1045B9005012E535254B789CF6E534354A18F6A2B4 +:1045C9001B921E22D3E535954BE534954A4013A23B +:1045D9001B921EC3E535954B789CF6E534954A1830 +:1045E900F622A21BB3921EC3E54B9535789CF6E5DE +:0645F9004A953418F62279 +:104B33007897E6FFD3789CE69F18E69400500578B3 +:104B430092068004E47892F67892E6D39403400CBC +:0D4B530085344A85354BA21B921CE4F622E6 +:09490B0078C0E6FE08E6FF7D0518 +:064914008E5D8F5EAB0515 +:10491A007A07C374089BC36480F8EA6480984023CA +:10492A00AE5DAF5E7C007D0A122A2D742C2AF8A691 +:10493A0005AE5DAF5E7C007D0A122A2D8E5D8F5E0C +:06494A001A80CF0246C7EF +:1038C3007893E6FB789BE6FE08E6FFAD037C0012E7 +:1038D3002A2DAD037C00122A1B8E588F597B07AE0D +:1038E30058AF597C007D0A122A2D742C2BF8A6059B +:1038F300AE58AF597C007D0A122A2D8E588F591B62 +:10390300BB02DCE52F7003752F11301E03752F10DA +:103913007893E6FFE5338FF0848FF0A4F533E6FF69 +:103923007887E68FF0A4FF789BE6FC08E6FDD39F3B +:10393300EC95F0500AE4F533F532752F11C21EED04 +:103943004C700C752C11752D11752E11752F1130AE +:103953002008752C0C752D018062302108752C0C04 +:10396300752D028057301408752C0F752D0F804C60 +:1039730030120B201A08752C0A752D05800F301A8A +:103983001930130E30010B752C19752D1D752E145E +:103993008041752C05752D0A802220250B752C136B +:1039A300752D0D752E1C802B78BAE6FFD394095024 +:1039B30010752C0FEF75F00A8485F02D752E11808C +:1039C30012EF75F00A8485F02DEF75F00A84F52C5B +:0639D300752E0F0246C72D +:10001E00E4F558F55930030302039B7871E6644109 +:10002E00600302039B30000302039BC218124CC1F3 +:10003E001243DA124CC17FB57D327B027A00124C2C +:10004E0029755D00755E00755FB57560007561029E +:10005E007BFF7A4779E3124990502E302503123AEE +:10006E00E77871E6B442107871E6644260030208E4 +:10007E00BD7658D21880F01208BE2025030208BDA6 +:10008E007871E6B442D502038F755D00755E00751A +:10009E005FB57560007561027BFF7A4779E512499D +:1000AE0090500612306002038F755D00755E00750C +:1000BE005FB57560007561027BFF7A4779E9124979 +:1000CE0090500612175202038F755D00755E007513 +:1000DE005FB57560007561027BFF7A4779EB124957 +:1000EE0090500612241502038F755D00755E007523 +:1000FE005FB57560007561027BFF7A4779ED124935 +:10010E00905006122C1402038F755D00755E0075FB +:10011E005FB57560007561027BFF7A4779EF124912 +:10012E0090500612275C02038F755D00755E007598 +:10013E005FB57560007561027BFF7A4779F11249F0 +:10014E00905006123CE502038F755D00755E0075DA +:10015E005FB57560007561027BFF7A4779F31249CE +:10016E009050061233A002038F755D00755E007508 +:10017E005FB57560007561027BFF7A4779F51249AC +:10018E0090500612323502038F755D00755E007554 +:10019E005FB57560007561027BFF7A4779F712498A +:1001AE00905006123BE602038F755D00755E00757A +:1001BE005FB57560007561027BFF7A4779F9124968 +:1001CE0090500612378802038F755D00755E0075BC +:1001DE005FB57560007561027BFF7A4779FB124946 +:1001EE0090500612364D02038F755D00755E0075D8 +:1001FE005FB57560007561027BFF7A4779FD124924 +:10020E0090500B20250302038F7D0102035A755D6A +:10021E0000755E00755FB57560007561027BFF7AD3 +:10022E004779FF124990500B20250302038F7D0260 +:10023E0002035A755D00755E00755FB575600075D9 +:10024E0061027BFF7A487901124990500B202503F9 +:10025E0002038F7D0302035A755D00755E00755FA4 +:10026E00B57560007561027BFF7A4879031249907B +:10027E00500B20250302038F7D0402035A755D0087 +:10028E00755E00755FB57560007561027BFF7A481B +:10029E007905124990500B20250302038F7D05022C +:1002AE00035A755D00755E00755FB575600075610A +:1002BE00027BFF7A487907124990500B20250302E2 +:1002CE00038F7D0602035A755D00755E00755FB57E +:1002DE007560007561027BFF7A487909124990506A +:1002EE000A20250302038F7D078061755D00755E10 +:1002FE0000755FB57560007561027BFF7A48790BFA +:10030E0012499050073025797D088040755D007543 +:10031E005E00755FB57560007561027BFF7A487986 +:10032E000D12499050073025587D09801F755D00CC +:10033E00755E00755FB57560007561027BFF7A486A +:10034E00790F124990500F3025377D0A7F08124BD6 +:10035E00AA1208BE802B7562007563137564007552 +:10036E006513756600756717756800756913756A8C +:10037E0000756B117B0E7A007D117C007F11124C83 +:10038E00607FE87E03124A77124C45D218124CC198 +:10039E007871E664437038200035F562756310F5A8 +:1003AE0064756510F566756710F568756910F56A00 +:1003BE00756B107B11FA7D11FC7F11124C607871F8 +:1003CE00E6B443097F027E00124A7780F1D20530EF +:1003DE0003030204DD7871E6642360030204DD305A +:1003EE0000030204DDC203200D030204DDF562F5F5 +:1003FE0063F564F565F566F567F568F569F56AF513 +:10040E006B7B16FA7D01FC7F0F124C6012490B7F3D +:10041E00F47E01124A777F051244587F0512482F49 +:10042E00E48F458E44F543F54278BBE675F003A4A0 +:10043E002413F582E43448F583E493FF7E007C03B5 +:10044E007DE8122A1BE4FCFDAB45AA44A943A84251 +:10045E00D3122B9F40377562007563137564007558 +:10046E006513756600756717756800756913756A8B +:10047E0000756B117B0E7A007D117C007F11124C82 +:10048E00607FE87E03124A77124C458042C20C7898 +:10049E0093E6FBE4FAF9F8AF45AE44AD43AC421235 +:1004AE002B0DC004A905AA06AB077893E6FFE4FC62 +:1004BE00FDFED000122A8278C0A60608A60718E60E +:1004CE00FD7F39124BAA78C1E6FD7F3A124BAA780E +:1004DE0071E6B42A17200014200311D2037871E6B6 +:1004EE00B42A097F027E00124A7780F130031D780C +:1004FE0071E6B441172000147871E6B441097F0209 +:10050E007E00124A7780F1C20312241520030302E3 +:10051E0005E37871E6644460030205E330000302EC +:10052E0005E32024030205E3C203C218F5627563D6 +:10053E0014F564756511F566756711F568756911C1 +:10054E00F56A756B117B0EFA7D05FC7F0B124C6004 +:10055E007F34124B60EF7F00FEC006C0077F35125E +:10056E004B60EFFDD0E02DFFD0E03400FE7878F642 +:10057E0008EFF67D041249147FF47E01124A777F4C +:10058E00041244587F0412482F7878A60608A6074E +:10059E007871E6FF644270030208BDEF6444702474 +:1005AE007878E6FD7F34124BAA7879E6FD7F351216 +:1005BE004BAA7878E6FD7F37124BAA7879E6FD7F55 +:1005CE0038124BAAD2187871E6B444097F027E0025 +:1005DE00124A7780F17871E6644260030208363081 +:1005EE000003020836202503020836300C030208E9 +:1005FE00367F08124B6078BAEFF6C203C3940150EF +:10060E0002760178BAE6FE75F00A84FFEE75F00AFE +:10061E0084E5F0FD7C0075620075631175640075EC +:10062E006511756600756711756800756911756AD3 +:10063E0000756B117B0F7A00124C607FF47E0112F5 +:10064E004A77755901D2187871E6FF644470030237 +:10065E0007C1EF644170030207C1AF597E007D01EF +:10066E007C00124790742C2559124728742C25595A +:10067E00F8A607E52C540FC454F0FFE52D540F2FA8 +:10068E00F558FF124C8A8F587871E6FF6453600458 +:10069E00EFB443100559E559D394014003E4F559DD +:1006AE0078717658E558D394244035756200756399 +:1006BE0013756400756517756600756713756800A8 +:1006CE00756911756A00756B117B137A007D0E7C4E +:1006DE00007F11124C607FF47E01124A7775582408 +:1006EE007F647E00124A77E558D394004025E55882 +:1006FE00D39409501E788176A0E558C454F0FF12A9 +:10070E004A0DEF7F00FEC006C007E558C454F00442 +:10071E000207A9E558D394094027E558D3941250FF +:10072E0020788176A2E55824F7C454F0FF124A0DC2 +:10073E00EF7F00FEC006C007E558C454F024718058 +:10074E005AE558D394124027E558D3941B5020787D +:10075E008176A4E55824EEC454F0FF124A0DEF7FC3 +:10076E0000FEC006C007E558C454F024E1802CE515 +:10077E0058D3941B4037E558D39424503078817663 +:10078E00A6E55824E5C454F0FF124A0DEF7F00FE93 +:10079E00C006C007E558C454F02451FF124A0DEFAD +:1007AE00FDD0E02D78C1F6D0E0340018F612490BDA +:1007BE000206557871E66444705FE558D394245070 +:1007CE0007E558C39401503875620075631375645C +:1007DE000075651775660075671375680075691184 +:1007EE00756A00756B117B137A007D0E7C007F118C +:1007FE00124C607FF47E01124A777558240205FF71 +:10080E00AD587F08124BAA7F08124B6078BAA60724 +:10081E001220CC7FF47E01800A7871E6B444097F01 +:10082E00027E00124A7780F130036F7871E66423FE +:10083E007068200065302462C2187F37124B60EF5B +:10084E007F00FEC006C0077F38124B60EFFDD0E080 +:10085E002D7873F6D0E0340018F6756200756314C7 +:10086E00756400756511756600756711756800759C +:10087E006911756A00756B117B187A007D0C7C000E +:10088E007F0B124C607872E6FE08E6FF7D0412497B +:10089E00147FB87E0B124A77D2182003127871E6B5 +:0F08AE00B4230C200009200D063024031233A0C0 +:0108BD002218 +:101D7900E4F558F5593016051220CCC2162007068D +:101D8900200C03021E697871E664426003021E6931 +:101D9900E5292401F529E43528F528E43527F5272F +:101DA900E43526F526E47FD07E07FDFCAB29AA2879 +:101DB900A927A826C3122B9F50030220CBC218754E +:101DC900620075631375640075651475660075673F +:101DD90011756800756911756A00756B117B177A41 +:101DE900007D0B7C007F0A124C60C292C294C291A2 +:101DF900C293C220C221C214C21AC207C2098546AF +:101E09004A85474BC3740A78849675F003A478B958 +:101E1900F6E47896F6F539F538F537F536C200C2A5 +:101E29000CF562756313F564756514F56675670ECF +:101E3900F56875690DF56A756B117B17FA7D0BFCF1 +:101E49007F0A124C607FD07E07124A77D21812435C +:101E59004FEF644260F8E4F529F528F527F52622C5 +:101E6900E4F529F528F527F52630174A20004720FB +:101E79000C44D21220903F1220CC3024207F3712FC +:101E89004B60EF7F00FEC006C0077F38124B60EF42 +:101E9900FDD0E02D7873F6D0E0340018F6C37873DE +:101EA900E6940118E694005006302403021F6CC220 +:101EB90012D20C021F9E301763200060300C5D782F +:101EC9009BE6FE08E6FFD3787B96EE1896504DC345 +:101ED900EF788096EE18964043201E407882E6708F +:101EE900077888A60608A6077989E7789C667004AA +:101EF90019E7186670057882068004E47882F67816 +:101F090074E675F004A4FF7882E6C39FE5F0648067 +:101F1900F87480984006E47882F68079309003025C +:101F290020CB3000030220CB301E030220CB12202D +:101F3900CC3024207F37124B60EF7F00FEC006C0F3 +:101F4900077F38124B60EFFDD0E02D7873F6D0E0B3 +:101F5900340018F6C37873E6940118E694005035F6 +:101F690030243275620075630E75640075651375EA +:101F79006600756713756800756911756A00756B78 +:101F8900117B117A007D117C007F0B124C607FE878 +:101F99007E03024A77787CE6FE08E6FFC378C1969D +:101FA900EE18965024C37886E69F18E69E501AC309 +:101FB900798FE778C19619E71896500DC37980E7AC +:101FC900787B9619E71896403E124CC1C218756283 +:101FD9000075631175640075650E75660075671384 +:101FE900756800756913756A00756B117B147A0041 +:101FF9007D0E7C007F05124C607FF47E01124A77CA +:10200900D218C20C021D8630152D789BE6FE08E613 +:10201900FFD3787B96EE1896501DC3EF788096EE25 +:1020290018964013201E10D20E854A46854B4785C7 +:10203900344A85354B801220150D201E0AD20E8593 +:102049004A46854B478002C20E1240CF300E3DC230 +:102059000ED207D2007F647E00124A77D2927F3275 +:102069007E00124A77D2917F327E00124A77D2944B +:10207900D220D221D214C3740A78849679B9F7E4AC +:102089007896F6F539F538F537F53622C2187562BE +:102099000075630E75640075651175660075670EC8 +:1020A900756800756913756A00756B137B137A007F +:1020B9007D0A7C007F14124C607FF47E01124A77FE +:0220C900D2182B +:0120CB0022F2 +:1010BD0020000302175130075B200958201E557878 +:1010CD009BE6FE08E6FFC378A396EE18964004C291 +:1010DD0094C220C3EF78A596EE1896401D302114CA +:1010ED00740A78849679B9F7E47896F6F539F53877 +:1010FD00F537F536C294C291C221799CE7788626E0 +:10110D00FF19E71836FEC3EF78C196EE1896400426 +:10111D00C292D20830082378A906E6187001067825 +:10112D009DE675F064A4FFC378A9E69F18E695F0D7 +:10113D004008E4F608F6D209C20820090302166633 +:10114D00301E03021666799CE7788626FF19E7188C +:10115D0036FE78C0E6FC08E6FDC3EF9DEE9C500719 +:10116D00D292C209021666C3789CE69D18E69C5081 +:10117D003378A706E61870010678BFE675F064A40B +:10118D00FFC378A7E69F18E695F05003021666E4B4 +:10119D00F608F6D29278BCE6FE08E6FF124A77C250 +:1011AD0092021666D293D21AC207E478A6F608F612 +:1011BD00C209C294C220C291C221C292C21408F6C1 +:1011CD0008F6C208C3740A78849675F003A478B93A +:1011DD00F6E47896F6F539F538F537F5367F3712AA +:1011ED004B60EF7F00FEC006C0077F38124B60EFEB +:1011FD00FDD0E02D7873F6D0E0340018F608E61631 +:10120D00187001167872E6FD7F37124BAA7873E6D7 +:10121D00FD7F38124BAA78BAE6640160030212D73B +:10122D007F1A123E9D788A122BEF788A122BE2C01C +:10123D0000C0037893E6FB789BE6FE08E6FFAD035E +:10124D007C00122A2DAD037C00122A1BE4FDD00375 +:10125D00D000EB2FFFEA3EFEED39FDEC38FC788A2D +:10126D00122BEF7FFF7EE07DF57C05788A122BE255 +:10127D00D3122B9F4009788A122BFB0000000078B7 +:10128D008A122BD68F5F8E5E8D5D8C5C7F1A124419 +:10129D00C87F10124B60EF7F00FEC006C0077F11A4 +:1012AD00124B60EFFDD0E02D7870F6D0E0340018D1 +:1012BD00F60806E618700106786FE6FD7F10124BF2 +:1012CD00AA7870E6FD7F1102166378BAE6640260B3 +:1012DD000302138B7F1E123E9D788A122BEF788AA4 +:1012ED00122BE2C000C0037893E6FB789BE6FE0864 +:1012FD00E6FFAD037C00122A2DAD037C00122A1BE4 +:10130D00E4FDD003D000EB2FFFEA3EFEED39FDECFE +:10131D0038FC788A122BEF7FFF7EE07DF57C057817 +:10132D008A122BE2D3122B9F4009788A122BFB00D5 +:10133D00000000788A122BD68F5F8E5E8D5D8C5CDF +:10134D007F1E1244C87F12124B60EF7F00FEC00655 +:10135D00C0077F13124B60EFFDD0E02D7870F6D0F3 +:10136D00E0340018F60806E618700106786FE6FD01 +:10137D007F12124BAA7870E6FD7F1302166378BABE +:10138D00E66403600302143F7F22123E9D788A12A9 +:10139D002BEF788A122BE2C000C0037893E6FB781E +:1013AD009BE6FE08E6FFAD037C00122A2DAD037C03 +:1013BD0000122A1BE4FDD003D000EB2FFFEA3EFE06 +:1013CD00ED39FDEC38FC788A122BEF7FFF7EE07D46 +:1013DD00F57C05788A122BE2D3122B9F4009788A6F +:1013ED00122BFB00000000788A122BD68F5F8E5EC9 +:1013FD008D5D8C5C7F221244C87F14124B60EF7F91 +:10140D0000FEC006C0077F15124B60EFFDD0E02D2A +:10141D007870F6D0E0340018F60806E6187001066C +:10142D00786FE6FD7F14124BAA7870E6FD7F1502EA +:10143D00166378BAE6640460030214F37F26123E45 +:10144D009D788A122BEF788A122BE2C000C00378A8 +:10145D0093E6FB789BE6FE08E6FFAD037C00122ABF +:10146D002DAD037C00122A1BE4FDD003D000EB2F21 +:10147D00FFEA3EFEED39FDEC38FC788A122BEF7F4A +:10148D00FF7EE07DF57C05788A122BE2D3122B9F2F +:10149D004009788A122BFB00000000788A122BD6A7 +:1014AD008F5F8E5E8D5D8C5C7F261244C87F161219 +:1014BD004B60EF7F00FEC006C0077F17124B60EF39 +:1014CD00FDD0E02D7870F6D0E0340018F60806E671 +:1014DD0018700106786FE6FD7F16124BAA7870E63C +:1014ED00FD7F1702166378BAE6640560030215A73F +:1014FD007F2A123E9D788A122BEF788A122BE2C03A +:10150D0000C0037893E6FB789BE6FE08E6FFAD038B +:10151D007C00122A2DAD037C00122A1BE4FDD003A2 +:10152D00D000EB2FFFEA3EFEED39FDEC38FC788A5A +:10153D00122BEF7FFF7EE07DF57C05788A122BE282 +:10154D00D3122B9F4009788A122BFB0000000078E4 +:10155D008A122BD68F5F8E5E8D5D8C5C7F2A124436 +:10156D00C87F18124B60EF7F00FEC006C0077F19C1 +:10157D00124B60EFFDD0E02D7870F6D0E0340018FE +:10158D00F60806E618700106786FE6FD7F18124B17 +:10159D00AA7870E6FD7F1902166378BAE6FFC39448 +:1015AD00065003021666EFD3942440030216667F9D +:1015BD0030123E9D788A122BEF788A122BE2C000F2 +:1015CD00C0037893E6FB789BE6FE08E6FFAD037C4F +:1015DD0000122A2DAD037C00122A1BE4FDD003D08E +:1015ED0000EB2FFFEA3EFEED39FDEC38FC788A1258 +:1015FD002BEF7FFF7EE07DF57C05788A122BE2D301 +:10160D00122B9F4009788A122BFB00000000788A6C +:10161D00122BD68F5F8E5E8D5D8C5C7F301244C831 +:10162D007F2E124B60EF7F00FEC006C0077F2F128A +:10163D004B60EFFDD0E02D7870F6D0E0340018F659 +:10164D000806E618700106786FE6FD7F2E124BAA8C +:10165D007870E6FD7F2F124BAA301A2D30132A20F9 +:10166D00012778A906E618700106789DE675F03C0D +:10167D00A4FFC378A9E69F18E695F0400CD201852A +:10168D00464A85474BE4F608F6C37873E69401188D +:10169D00E694005075302472301A6F30130D3001FE +:1016AD000A78A906E618701106800E20130B20018A +:1016BD000878A906E618700106789DE675F032A443 +:1016CD00FFC378A9E69F18E695F0403EE4F608F6CC +:1016DD00C218F56275630EF564756513F566756769 +:1016ED0013F568756911F56A756B117B11FA7D112A +:1016FD00FC7F0B124C60C20C7871E66444600B7F6A +:10170D00147E00124A77D21880EED3799CE7788F39 +:10171D009619E718964003301E2A301A27C293C235 +:10172D001A85464A85474BC3740A78849675F0032B +:10173D00A478B9F6E47896F6F539F538F537F53637 +:05174D00C200C20122F0 +:1043DA00755A067871765875620075630E756400B1 +:1043EA00756511756600756711E4F568F569F56A12 +:1043FA00F56B7B0DFA7D17FC7F0C124C60124CC1D9 +:10440A007871E664446037AF5A7E007D017C001201 +:10441A004790742C255A124728742C255AF8A60757 +:10442A007871E6FF64536004EFB443D4055AE55A41 +:10443A00D394074003755A067871765880C278710A +:0D444A00E6B444097F027E00124A7780F13B +:014457002242 +:024458008F5D76 +:10445A00C37408955DF55E7871E6FF64446044EFC5 +:10446A006441603FEF6442603AAF5E7E007D017C4A +:10447A0000124790742C255E124728742C255EF88A +:10448A00A6077871E6FF64536004EFB443C9055E7A +:10449A00E55ED3940740067408955DF55E787176FB +:1044AA005880B47871E6B442127871E6B442097F52 +:0D44BA00027E00124A7780F1D20B22C20B65 +:0144C70022D2 +:084788007D017F077C007E002B +:084790008E5F8F608C618D6269 +:104798007F3A7D2C7B087A00124C29AF60E56025B2 +:1047A80062FDE55F3561FCEFC39DEC6480F87480C1 +:1047B800985009742C2FF876110F80E11246C77FA4 +:1047C800967E00124A777F2C7D3A7B087A00124C3D +:0B47D800291246C77F967E00024A7738 +:103AE700755A07C2187F08124B6078BAA607756225 +:103AF7000075630175640075651275660075670E5C +:103B0700E6FF75F00A84756800F569EF75F00A84B9 +:103B1700AFF0756A008F6B7B0C7A007D0E7C007F9F +:103B270013124C60124CC17871E6FF64446041EF98 +:103B37006442603CAF5A7E007D017C00124790745E +:103B47002C255A124728742C255AF8A6077871E6AF +:103B5700FF64536004EFB44310055AE55AD3940742 +:103B67004003755A06787176587871E6B442B822E0 +:103B77007871E664447058E532540FC454F0FFE599 +:103B870033540F2FF55AFF124C8A8F5AE55AD394A4 +:103B97002440357562007563137564007565177584 +:103BA7006600756713756800756911756A00756B2E +:103BB700117B137A007D0E7C007F11124C607FF41D +:103BC7007E01124A77023AECAD5A7F08124BAA7867 +:0E3BD70071E6B444097F027E00124A7780F145 +:013BE50022BD +:1008BE00C2281220CCD218D21678BAE6FFD39400F2 +:1008CE00400CEFD394095006788176A08034EFD394 +:1008DE009409400CEFD394125006788176A28022B0 +:1008EE00EFD39412400CEFD3941B5006788176A46C +:1008FE008010EFD3941B400AEFD3942450047881D8 +:10090E0076A6202521756200756311E4F564F56500 +:10091E00F566F567F568F569F56AF56B7B16FA7D90 +:10092E0001FC7F0F802D78BAE6FE75F00A84FFEE8B +:10093E0075F00A84E5F0FD7C00756200756311E4C4 +:10094E00F564F565F566F567F568F569F56AF56BB5 +:10095E007B0FFA124C6012490B7FF47E01124A771C +:10096E007F05124458300B030210BC7871E66444C4 +:10097E006003020A557F0512482F8E5B8F5C78BB91 +:10098E00E675F003A42413F582E43448F583E4936A +:10099E00FF7E007C037DE8122A1BD3E55C9FE55B9E +:1009AE009E4036D2287562007563137564007565B6 +:1009BE0017756600756713756800756911756A009D +:1009CE00756B117B137A007D0E7C007F11124C60CB +:1009DE007FF47E01124A77806E78C0A65B08A65C13 +:1009EE0078BAE6FFD39400400AEFD3940950048FEF +:1009FE005A8037EFD39409400DEFD394125007EF7E +:100A0E0024F7F55A8024EFD39412400DEFD3941BA4 +:100A1E005007EF24EEF55A8011EFD3941B400BEFE5 +:100A2E00D394245005EF24E5F55AE55AC454F0FF4B +:100A3E0078C0E6FD124B05E55AC454F004FF78C1A8 +:100A4E00E6FD124B05C2283028030209102025238B +:100A5E00756200756311756400756511E4F566F5D0 +:100A6E0067F568F569F56AF56B7B11FA7D0FFC7F0A +:100A7E000F802F78BAE6FE75F00A84FFEE75F00A45 +:100A8E0084E5F0FD7C007562007563117564007578 +:100A9E006511E4F566F567F568F569F56AF56B7B42 +:100AAE000DFA124C60787CE6FE08E6FF7D041249D2 +:100ABE00147FF47E01124A777F04124458300B03E0 +:100ACE000210BC7871E664446003020B977F041237 +:100ADE00482F8E5B8F5CC3E55C78C196E55B1896FC +:100AEE004036D228756200756313756400756517FC +:100AFE00756600756713756800756911756A0075FE +:100B0E006B117B137A007D0E7C007F11124C607F7F +:100B1E00F47E01124A778071787CA65B08A65C7819 +:100B2E00BAE6FFD39400400AEFD3940950048F5ACB +:100B3E008037EFD39409400DEFD394125007EF2472 +:100B4E00F7F55A8024EFD39412400DEFD3941B5037 +:100B5E0007EF24EEF55A8011EFD3941B400BEFD321 +:100B6E0094245005EF24E5F55AE55AC454F02404B4 +:100B7E00FF787CE6FD124B05E55AC454F02405FFC0 +:100B8E00787DE6FD124B05C228302803020A5B2051 +:100B9E002523756200756311756400756511E4F5A2 +:100BAE0066F567F568F569F56AF56B7B16FA7D0FE4 +:100BBE00FC7F18802F78BAE6FE75F00A84FFEE757A +:100BCE00F00A84E5F0FD7C007562007563117564B2 +:100BDE0000756511E4F566F567F568F569F56AF572 +:100BEE006B7B18FA124C607885E6FE08E6FF7D03F3 +:100BFE001249147FF47E01124A777F031244583053 +:100C0E000B030210BC7871E664446003020CE27FB1 +:100C1E000312482F8E5B8F5CE55C787D26FFE55BCB +:100C2E001836FED3EF78C196EE18964036D2287558 +:100C3E0062007563137564007565177566007567D8 +:100C4E0013756800756911756A00756B117B137ADF +:100C5E00007D0E7C007F11124C607FF47E01124AE3 +:100C6E007780717885A65B08A65C78BAE6FFD39488 +:100C7E0000400AEFD3940950048F5A8037EFD39473 +:100C8E0009400DEFD394125007EF24F7F55A802444 +:100C9E00EFD39412400DEFD3941B5007EF24EEF5D3 +:100CAE005A8011EFD3941B400BEFD394245005EFD1 +:100CBE0024E5F55AE55AC454F02406FF7885E6FD7E +:100CCE00124B05E55AC454F02407FF7886E6FD1250 +:100CDE004B05C228302803020B9D20252375620088 +:100CEE00756311756400756511E4F566F567F56851 +:100CFE00F569F56AF56B7B13FA7D14FC7F15802F71 +:100D0E0078BAE6FE75F00A84FFEE75F00A84E5F017 +:100D1E00FD7C00756200756311756400756511E4E4 +:100D2E00F566F567F568F569F56AF56B7B15FA12E8 +:100D3E004C60787A12490D7FF47E01124A777F0556 +:100D4E00124458300B030210BC7871E66444600301 +:100D5E00020E3F7F0512482F8E5B8F5C78BBE675C7 +:100D6E00F003A42413F582E43448F583E493FF7E64 +:100D7E00007C037DE8122A1BE55C78C126FDE55B4D +:100D8E001836FCD3ED9FEC9E4036D2287562007566 +:100D9E00631375640075651775660075671375685E +:100DAE0000756911756A00756B117B137A007D0EE3 +:100DBE007C007F11124C607FF47E01124A778071A5 +:100DCE00787AA65B08A65C78BAE6FFD39400400A50 +:100DDE00EFD3940950048F5A8037EFD39409400D06 +:100DEE00EFD394125007EF24F7F55A8024EFD394E3 +:100DFE0012400DEFD3941B5007EF24EEF55A8011DD +:100E0E00EFD3941B400BEFD394245005EF24E5F55C +:100E1E005AE55AC454F02408FF787AE6FD124B05C1 +:100E2E00E55AC454F02409FF787BE6FD124B05C247 +:100E3E0028302803020CE820252375620075631103 +:100E4E00756400756511E4F566F567F568F569F585 +:100E5E006AF56B7B13FA7D14FC7F16802F78BAE649 +:100E6E00FE75F00A84FFEE75F00A84E5F0FD7C0055 +:100E7E00756200756311756400756511E4F566F5AC +:100E8E0067F568F569F56AF56B7B16FA124C6078B2 +:100E9E007FE6FE08E6FF7D031249147FF47E011201 +:100EAE004A777F03124458300B030210BC7871E668 +:100EBE0064446003020F817F0312482F8E5B8F5CA8 +:100ECE00C3E55C787B96E55B18964036D228756252 +:100EDE000075631375640075651775660075671385 +:100EEE00756800756911756A00756B117B137A0050 +:100EFE007D0E7C007F11124C607FF47E01124A77CA +:100F0E008071787FA65B08A65C78BAE6FFD3940062 +:100F1E00400AEFD3940950048F5A8037EFD39409C7 +:100F2E00400DEFD394125007EF24F7F55A8024EFBB +:100F3E00D39412400DEFD3941B5007EF24EEF55AC5 +:100F4E008011EFD3941B400BEFD394245005EF2464 +:100F5E00E5F55AE55AC454F0240AFF787FE6FD12EF +:100F6E004B05E55AC454F0240BFF7880E6FD124B76 +:100F7E0005C228302803020E45C21820252A7562A4 +:100F8E0000756314756400756513756600756711D9 +:100F9E00756800756911756A00756B117B117A00A1 +:100FAE007D147C007F0A803578BAE6FE75F00A84DF +:100FBE00FFEE75F00A84E5F0FD7C00756200756346 +:100FCE001175640075651175660075671175680099 +:100FDE00756911756A00756B117B0A7A00124C6087 +:100FEE007FF47E01124A77201505E4F55A800375C9 +:100FFE005A017871E6FF64416025EF644460201267 +:10100E004788E4FB7D01AF5A12472F8F5AE55A707D +:10101E000775330DC21580DA75330ED21580D3786D +:10102E0071E66444706078BAE6FFD39400400EEF28 +:10103E00D394095008EFC454F0240C804378BAE6D8 +:10104E00FFD39409400EEFD394125008EFC454F01E +:10105E00247C802C78BAE6FFD39412400EEFD39402 +:10106E001B5008EFC454F024EC801578BAE6FFD379 +:10107E00941B4012EFD39424500CEFC454F0245C14 +:10108E00FFAD5A124B057871E6B444097F147E0009 +:10109E00124A7780F1D218E4FF124A0D8F5A78AABD +:0E10AE00E6FD655A6005E4FF124B051220CCEA +:0110BC002211 +:101752001220CC788176A0D216789DE6F55B756270 +:101762000075630D75640075651675660075671101 +:1017720075F00A1229CCFF3395E0F5688F69E55BB5 +:1017820075F00A1229CCAFF0EF3395E0F56A8F6B52 +:101792007B107A007D0A7C007F05124C60AF5BEF04 +:1017A2003395E0FE7D021249147FF47E01124A77DE +:1017B2007F02124458300B03021D787F0212482F19 +:1017C200789DA6077871E6B44409789DE6FD7F0B03 +:1017D200124B057F0C124A0D8F5B75620075630D0B +:1017E200756400756516756600756711E55B75F0C1 +:1017F2000A1229CCFF3395E0F5688F69E55B75F035 +:101802000A1229CCAFF0EF3395E0F56A8F6B7B12A9 +:101812007A007D137C007F0D124C60AF5BEF339535 +:10182200E0FE7D021249147FF47E01124A777F02A4 +:10183200124458300B03021D787F0212482F78BFE2 +:10184200A6077871E6FF64427003021D78EFB44484 +:101852000978BFE6FD7F0C124B057F0D124A0D8FF2 +:101862005B75620075630175640075651A756600C3 +:1018720075670EE55B75F00A1229CCFF3395E0F52A +:10188200688F69E55B75F00A1229CCAFF0EF3395EA +:10189200E0F56A8F6B7B147A007D187C00E4FF12FE +:1018A2004C60AF5BEF3395E0FE7D021249147FF48A +:1018B2007E01124A777F02124458300B03021D78D0 +:1018C2007F0212482F8F5B7871E6FF644270030239 +:1018D2001D78EFB44407AD5B7F0D124B05756200B6 +:1018E20075630E756400756514E4F566F567F56851 +:1018F200F569F56AF56B7B05FA7D10FCFF124C6009 +:10190200788EE6FE08E6FF7D031249147FF47E011D +:10191200124A777F031244587F0312482F788EA60B +:101922000608A607300B03021D787871E6B444124C +:10193200788EE6FD7F03124B05788FE6FD7F041259 +:101942004B057562007563117564007565117566E6 +:10195200007567117568007569117884E6756A000B +:10196200F56B7B0D7A007D127C007F05124C607F47 +:10197200F47E01124A777871E6FF64446020EF64D6 +:1019820041601BEF644260161247887884E6FF7B51 +:10199200017D0912472F7884EFF6F53380D87871EC +:1019A200E6FF64427003021D78EFB444167884E6C1 +:1019B200FD7F0A124B05C3740A78849675F003A45E +:1019C20078B9F630972C75620075631475640075EA +:1019D200650E75660075670C756800756914756A21 +:1019E20000756B0DE4FBFA7D13FC7F12124C600252 +:1019F2001D6175620075630A75640075651275660E +:101A020000756711E4F568F569F56AF56B7B0CFA08 +:101A12007D10FC7F05124C6078BBE675F003A424B0 +:101A220013F582E43448F583E493FF7E007D0212CD +:101A320049147FF47E01124A777871E6FF644460AC +:101A420047EF64416042EF6442603D7D027F0612CF +:101A5200478C78BB12472978BBA6077871E6B44356 +:101A62000B78BB06E6D394094002E4F678BBE67530 +:101A7200F003A42413F582E43448F583E493FF7E53 +:101A8200007D0212491480B17871E6FF644270034E +:101A9200021D78EFB4440978BBE6FD7F05124B05C1 +:101AA2007562007563117564007565117566007560 +:101AB20067117893E6FF75F00A84756800F569EF9F +:101AC20075F00A84AFF0756A008F6B7B057A007D32 +:101AD2000E7C007F13124C607FF47E01124A7778ED +:101AE20093E6FFF55BB40503755B03EFB40A03E409 +:101AF200F55B7871E6FF6444605BEF64416056EF2A +:101B0200644260517D027C007F067E00124790E4B1 +:101B1200FB7D03AF5B12472F8F5B7871E6B4430EF8 +:101B2200055BD3E55B648094834003E4F55B7893C3 +:101B3200A65BE55BB403027605E55B7004789376F9 +:101B42000A7893E6FF75F00A8485F033EF75F00AA0 +:101B520084F532809D7871E6FF64427003021D783D +:101B6200EFB444097893E6FD7F06124B0578BBE695 +:101B7200FF75F003A42411F582E43448F583E4935D +:101B82007875F6EF75F003A42412F582E43448F573 +:101B920083E493787EF678BBE675F003A42413F50C +:101BA20082E43448F583E493FF7E007C037DE812EF +:101BB2002A1BAC06AD077893E675F009A4AEF02DAA +:101BC200F549EC3EF5487562007563117564007560 +:101BD20065117566007567117568007569117887FA +:101BE200E6756A00F56B7B057A007D0A7C007F1A38 +:101BF200124C607FF47E01124A777871E6FF6444EA +:101C02006034EF6441602FEF6442602A12478878A3 +:101C120087E6FFE4FB7D0512472F7887A6077871D8 +:101C2200E6B4430B788706E6D394054002E4F678DF +:101C320087E6F53380C47871E6FF64427003021DC3 +:101C420078EFB444097887E6FD7F07124B05756289 +:101C52000075631375640075650A75660075670C17 +:101C62007568007569117897E6756A00F56B7B14E3 +:101C72007A007D107C00E4FF124C607FF47E01123A +:101C82004A777871E6FF64446034EF6441602FEF75 +:101C92006442602A1247887897E6FFE4FB7D0512CA +:101CA200472F7897A6077871E6B4430B789706E634 +:101CB200D394054002E4F67897E6F53380C4787150 +:101CC200E6FF64427003021D78EFB444097897E698 +:101CD200FD7F08124B05D218756200756311756499 +:101CE2000075651175660075671175680075691173 +:101CF20078C2E6756A00F56B7B0C7A007D0E7C007B +:101D02007F0D124C607FF47E01124A777871E6FFF4 +:101D120064446034EF6441602FEF6442602A1247EA +:101D22008878C2E6FF7B037D0712472F78C2A60799 +:101D32007871E6B4430B78C206E6D3940740027684 +:101D42000378C2E6F53380C47871E6FF6442602608 +:101D5200EFB4440978C2E6FD7F09124B05C218E4CC +:101D6200FF124A0D8F5B78AAE6FD655B6005E4FF12 +:061D7200124B051220CC0B +:011D78002248 +:102415001220CCC218D2167562007563147564005B +:1024250075651875660075671475680075691175A9 +:102435006A00756B117B057A007D187C007F01129F +:102445004C607F0E124B608F5B7FF47E01124A77E2 +:10245500E55B7004C20D8002D20D7871E6FF64441D +:10246500602DEF64416028EF64426023124788E4E1 +:10247500FB7D01AF5B12472F8F5BE55B7007753303 +:102485000DC20D80D5755B0175330ED20D80CB78ED +:1024950071E6FF6442700302275BEFB44407AD5B4E +:1024A5007F0E124BAA75620075630575640075652C +:1024B50011756600756711756800756911756A0093 +:1024C500756B117B147A007D1B7C007F0A124C60B2 +:1024D5007F09124B608F5B7FF47E01124A77E55BC3 +:1024E5007004C2178002D2177871E6FF6444602D2C +:1024F500EF64416028EF64426023124788E4FB7D66 +:1025050001AF5B12472F8F5BE55B700775330DC21B +:102515001780D5755B0175330ED21780CB7871E6C0 +:10252500FF6442700302275BEFB44407AD5B7F098C +:10253500124BAA75620075630D7564007565167595 +:102545006600756711756800756911756A00756BA8 +:10255500117B057A007D147C007F0A124C607F0A8E +:10256500124B607874EFF67E007D021249147FF4F9 +:102575007E01124A777F02124458300B0302275B13 +:102585007F0212482F7874A6077871E6FF644270BF +:102595000302275BEFB444097874E6FD7F0A124B0A +:1025A500AA7562007563017564007565127566002C +:1025B50075670E756800756911756A00756B117B15 +:1025C5000C7A007D0E7C007F13124C607F0B124B42 +:1025D500608F5B7FF47E01124A77E55B7004C2254C +:1025E5008002D2257871E6FF6444602DEF64416076 +:1025F50028EF64426023124788E4FB7D01AF5B123C +:10260500472F8F5BE55B700775330DC22580D57548 +:102615005B0175330ED22580CB7871E6FF6442707D +:102625000302275BEFB44407AD5B7F0B124BAA7522 +:1026350062007563147564007565107566007567CD +:102645000F756800756911756A00756B117B0E7AD7 +:10265500007D057C007F0B124C607F36124B608F2E +:102665005B7FF47E01124A77E55B7004C224800229 +:10267500D2247871E6FF6444602DEF64416028EF51 +:1026850064426023124788E4FB7D01AF5B12472F4C +:102695008F5BE55B700775330DC22480D5755B01D3 +:1026A50075330ED22480CB7871E6FF644270030245 +:1026B500275BEFB44407AD5B7F36124BAA7562000A +:1026C5007563147564007565117566007567117518 +:1026D5006800756911756A00756B117B1D7A007D3F +:1026E500137C007F19124C607F0C124B608F5B7F4F +:1026F500F47E01124A77E55B7004C2138002D2139F +:102705007871E6FF6444602DEF64416028EF644210 +:102715006023124788E4FB7D01AF5B12472F8F5B77 +:10272500E55B700775330DC21380D5755B01753395 +:102735000ED21380CB7871E6FF64426019EFB44482 +:1027450007AD5B7F0C124BAA78AAE6FD7F0F124BF3 +:06275500AA1220CCD218EC +:01275B00225B +:02482F00AB07D5 +:10483100900001E4F55DF55E7A07C374089BC364DB +:1048410080F8EA648098402B742C2AF8E6FF7E00F9 +:10485100AD82AC83122A1BEF255EF55EEE355DF568 +:104861005D7C007D0AAF82AE83122A1B8E838F820C +:074871001A80C7AE5DAF5EC7 +:01487800221D +:07472800F8E6FFE4FB7D0948 +:10472F00A9057871E6FEB42A0F0FD3E96480F8EF7C +:10473F006480984043AF0322EEB4230F1FC3EB6492 +:10474F0080F8EF6480985030AF0122EBFD3395E095 +:10475F00FC7871E6FBC39DEC6480F8748098401878 +:10476F00E9FD3395E0FCD3EB9DEC6480F874809801 +:09477F0050067871E6FF76532222 +:1030600030972B7562007563117564007565167570 +:10307000660075671775680075690C756A00756B71 +:10308000117B0A7A007D0C7C007F11024C60756216 +:103090000075630C75640075650A756600756716C2 +:1030A000756800756911756A00756B117B117A007E +:1030B0007D117C007F11124C607FE87E03124A77FD +:1030C0007562007563017564007565197566007534 +:1030D0006715756800756914756A00756B117B0E4C +:1030E0007A007D1D7C007F11124C607FE87E03809A +:1030F000117871E6FF6444600EEF644260097F025C +:103100007E00124A7780EA7871E6B442127871E65E +:10311000644260030232347F02FE124A7780EE7806 +:1031200071E6B444097F027E00124A7780F175622D +:10313000007563117564007565117566007567111A +:10314000756800756911756A00756B117B167A00D8 +:103150007D0A7C007F0C124C60D218D21DC2053053 +:103160000AFDC20A1240CF789BE6FE08E6FF789E71 +:10317000A60608A607C21D755B07789EE6FA08E654 +:10318000FB7C007D0AFFAE02122A2D742C255BF811 +:10319000A6057C007D0AAF03AE02122A2D789EA6FA +:1031A0000608A607155BE55BB402CF803B7871E6A5 +:1031B000FF64446038EF64426033AF5B7E007D01A2 +:1031C0007C00124790742C255B124728742C255BD9 +:1031D000F8A6077871E6FF64536004EFB443CE05A8 +:1031E0005BE55BD3940740C5755B0380C07871E6EF +:1031F000B4420F7871E66442703A7F02FE124A7759 +:1032000080F17871E6B444097F027E00124A77802B +:10321000F1D2067F0512482F78A0A60608A60778E7 +:1032200093E6FF78A17004740A8001EF26F618E493 +:0432300036F6C21894 +:013234002277 +:1039D900200603023AE6C20678A0E6FA08E6FBFFEB +:1039E900AE02E48F4F8E4EF54DF54C789BE6FE08FE +:1039F900E6FFE48F538E52F551F55018E6FE08E6BE +:103A0900FFD39BEE9A400EEF78A196799FF7EE18B7 +:103A19009619F78012C379A1E7789C96FF19E718E0 +:103A290096789EF608A607789FE618466077E47FA1 +:103A3900107E27FDFCAB4FAA4EA94DA84C122A8235 +:103A4900AB53AA52A951A850122B0D8F458E448D04 +:103A5900438C427899A60608A607788176A07899BA +:103A6900E6FD7F01124B05789AE6FD7F02124B05B0 +:103A790075620075630C75640075650C7566007573 +:103A8900670E756800756905756A00756B057B1B9E +:103A99007A007D057C007F11124C607FE87E03125D +:103AA9004A77024C4575620075630A75640075654D +:103AB90001756600756716756800756911756A0084 +:103AC900756B117B0F7A007D117C007F11124C60A0 +:0E3AD9007FE87E03124A77124C451248C22243 +:1048C200789BE6FE08E6FFE48F4F8E4EF54DF54CE1 +:1048D2007899E6FE08E6FFE48F538E52F551F550C3 +:1048E200AD51AC50AB4FAA4EA94DA84C122A82E44E +:1048F2007B107A27F9F8122B0D8F458E448D438C4D +:0949020042789BA60608A60722D4 +:10417D0030972B7562007563117564007565167542 +:10418D00660075671775680075690C756A00756B43 +:10419D00117B0A7A007D0C7C007F11024C607562E8 +:1041AD000075630575640075650E75660075671499 +:1041BD00756800756911756A00756B117B0E7A0053 +:1041CD007D137C007F11124C607871E6FF644460B2 +:1041DD000EEF644260097F027E00124A7780EA7812 +:1041ED0071E6B4420F7871E66442702F7F02FE12C1 +:1041FD004A7780F17871E6B444097F027E00124A55 +:10420D007780F1124C45788176A07D277F01124B86 +:0C421D00057D107F02124B051220CC2200 +:10275C00755A01124C457871E6FF644470030229E6 +:10276C0075EF644270030229757D087C00E4FFFE5E +:10277C001247907B017D09AF5A12472F8F5A124C8A +:10278C00C1E55A14B4090050CD9027A375F003A4E9 +:10279C00C58325F0C583730227BE0227E9022814DE +:1027AC0002283F02286A0228950228C00228EB0260 +:1027BC00291575620075631175640075651275666F +:1027CC000075670A756800756913756A00756B0A80 +:1027DC007B167A007D017C007F0F02296F756200E9 +:1027EC0075631175640075650575660075670E7502 +:1027FC006800756914756A00756B117B167A007D1B +:10280C000C7C007F0502296F756200756316756478 +:10281C00007565117566007567117568007569112D +:10282C00756A00756B117B0A7A007D0C7C007F1138 +:10283C0002296F75620075631175640075651375F7 +:10284C006600756705756800756914756A00756BA7 +:10285C00117B167A007D0A7C007F0C02296F756251 +:10286C000075630A75640075651B756600756716DF +:10287C00756800756914756A00756B057B0F7A00B5 +:10288C007D0E7C007F0D02296F75620075631B75D0 +:10289C00640075651675660075670A75680075695C +:1028AC0014756A00756B0E7B1A7A007D1B7C007F99 +:1028BC000C02296F75620075630C756400756515E3 +:1028CC00756600756711756800756911756A007514 +:1028DC006B117B147A007D0A7C007F0B02296F75CB +:1028EC00620075630C756400756515756600756717 +:1028FC0014756800756917756A00756B147B147A0A +:10290C00007D0A7C007F0B805A756200756315751B +:10291C00640075651175660075670C7568007569DE +:10292C001B756A00756B1A7B147A007D0A7C007F1C +:10293C000B124C607FF47E01124A7775620075634E +:10294C000A75640075651375660075671175680006 +:10295C00756911756A00756B117B0E7A007D167C9A +:10296C00007F0C124C600227627871E66442604F63 +:10297C00E55A14B40900504790299275F003A4C588 +:10298C008325F0C583730229AD0229B30229B6024F +:10299C0029B90229BC0229BF0229C20229C5022970 +:1029AC00C8122415024CC102175202306002417D3C +:0F29BC00022C14023BE60233A002364D1237887C +:0129CB0022E9 +:103CE500788A122BFB00000000D2187F1E123E9D21 +:103CF500C004C005C006C0077F1A123E9DD003D080 +:103D050002D001D000EF2BFFEE3AFEED39FDEC3885 +:103D1500FCC004C005C006C0077F22123E9DD0032B +:103D2500D002D001D000EF2BFFEE3AFEED39FDECCD +:103D350038FCC004C005C006C0077F26123E9DD0D2 +:103D450003D002D001D000EF2BFFEE3AFEED39FD96 +:103D5500EC38FCC004C005C006C0077F2A123E9D92 +:103D6500D003D002D001D000EF2BFFEE3AFEED39A3 +:103D7500FDEC38FCC004C005C006C0077F30123E0C +:103D85009DD003D002D001D000EF2BFFEE3AFEED1F +:103D950039FDEC38FC788A122BEF788A122BD67510 +:103DA5005E081242297871E6FF6444600EEF6442B2 +:0C3DB50060097F027E00124A7780EA223B +:10364D007F12124B60EF7F00FEC006C0077F131282 +:10365D004B60EFFDD0E02DFFD0E03400FEC006C082 +:10366D00077F10124B60EF7F00FEC006C0077F1171 +:10367D00124B60EFFDD0E02DFDD0E03400FCD0E02A +:10368D002DFFD0E03CFEC006C0077F14124B60EF4B +:10369D007F00FEC006C0077F15124B60EFFDD0E026 +:1036AD002DFDD0E03400FCD0E02DFFD0E03CFEC07D +:1036BD0006C0077F16124B60EF7F00FEC006C007E5 +:1036CD007F17124B60EFFDD0E02DFDD0E03400FCF4 +:1036DD00D0E02DFFD0E03CFEC006C0077F18124B96 +:1036ED0060EF7F00FEC006C0077F19124B60EFFD33 +:1036FD00D0E02DFDD0E03400FCD0E02DFFD0E03C3B +:10370D00FEC006C0077F2E124B60EF7F00FEC00685 +:10371D00C0077F2F124B60EFFDD0E02DFDD0E034C0 +:10372D0000FCD0E02D7870F6D0E03C18F675620004 +:10373D007563117564007565117566007567117592 +:10374D006800756911756A00756B117B117A007DC2 +:10375D00117C007F11124C60786FE6FE08E6FF7D4C +:10376D00051245FF7871E6FF6444600EEF64426018 +:0B377D00097F027E00124A7780EA22DA +:103BE600755B01E4F55C7F08124B6078BAEFF6C2AC +:103BF60003D394064005755B01800578BAE6F55B4C +:103C06007871E6B444097F027E00124A7780F17526 +:103C160062007563117564007565117566007567D8 +:103C260011756800756911756A00756B117B117ADB +:103C3600007D0C7C00AF5B124C607FF47E01124A63 +:103C460077E4F55CD2187871E6FF64447003023CB1 +:103C5600D5EF64416079EF64426074AF5C7E007DAD +:103C6600017C00124790742C255CF8E6FF7B017DF1 +:103C76000612472F742C255CF8A607E52CF55BAFDA +:103C86005B124C8A8F5BE55BB401047F1A802BE5DF +:103C96005BB402047F1E8022E55BB403047F2280AE +:103CA60019E55BB404047F268010E55BB405047F48 +:103CB6002A8007E55BB4060A7F30123E9D788A1299 +:103CC6002BEF788A122BD67D06124914023C4C78CB +:0E3CD60071E6B444097F027E00124A7780F145 +:013CE40022BD +:1033A000755B01E4F55C7F08124B6078BAEFF6C2FA +:1033B00003D394064005755B01800578BAE6F55B9A +:1033C0007871E6B444097F027E00124A7780F1E505 +:1033D0005BFD7C0075620075631175640075651195 +:1033E000756600756711756800756911756A0075F5 +:1033F0006B117B1E7A007F0B124C607FF47E0112F2 +:103400004A77755C01C2187871E6FF644470030264 +:1034100034E8EF644170030234E8EF644270030261 +:1034200034E8AF5C7E007D017C00124790742C254F +:103430005CF8E6FF7B017D0612472F742C255CF8B3 +:10344000A607E52DF55BAF5B124C8A8F5BE55BB49D +:1034500001117F10124B60EF7F00FEC006C0077F96 +:1034600011806CE55BB402117F12124B60EF7F009C +:10347000FEC006C0077F138056E55BB403117F14BE +:10348000124B60EF7F00FEC006C0077F158040E54D +:103490005BB404117F16124B60EF7F00FEC006C0C4 +:1034A000077F17802AE55BB405117F18124B60EF88 +:1034B0007F00FEC006C0077F198014E55BB40620BC +:1034C0007F2E124B60EF7F00FEC006C0077F2F12D9 +:1034D0004B60EFFDD0E02D7870F6D0E0340018F6A8 +:1034E000786F12490D0234077871E6B444097F02FF +:0934F0007E00124A7780F1D21827 +:0134F90022B0 +:1032350075620075630E75640075650A75660075BF +:103245006713756800756911756A00756B117B16D2 +:103255007A007D0C7C007F11124C607871E6FF646A +:10326500436016EF64416011EF6442600C7D087C99 +:1032750000E4FFFE12479080E27871E66443600344 +:1032850002339F788A122BFB00000000E4786FF66A +:1032950008F678BAE664017024788A122BD68F5F17 +:1032A5008E5E8D5D8C5C7F1A1244C8786FE6FD7F5B +:1032B50010124BAA7870E6FD7F1102339C78BAE6AE +:1032C50064027024788A122BD68F5F8E5E8D5D8C9A +:1032D5005C7F1E1244C8786FE6FD7F12124BAA78F8 +:1032E50070E6FD7F1302339C78BAE6640370247898 +:1032F5008A122BD68F5F8E5E8D5D8C5C7F22124489 +:10330500C8786FE6FD7F14124BAA7870E6FD7F152D +:1033150002339C78BAE664047023788A122BD68F20 +:103325005F8E5E8D5D8C5C7F261244C8786FE6FDEE +:103335007F16124BAA7870E6FD7F17805A78BAE699 +:1033450064057023788A122BD68F5F8E5E8D5D8C17 +:103355005C7F2A1244C8786FE6FD7F18124BAA7865 +:1033650070E6FD7F19803078BAE6FFC39406402ADF +:10337500EFD394245024788A122BD68F5F8E5E8DDE +:103385005D8C5C7F301244C8786FE6FD7F2E124B52 +:0B339500AA7870E6FD7F2F124BAA22E1 +:1037880075620075630E75640075650A7566007567 +:103798006713756800756911756A00756B117B167A +:1037A8007A007D0C7C007F11124C607871E6FF6412 +:1037B800436016EF64416011EF6442600C7D087C41 +:1037C80000E4FFFE12479080E27871E664436003EC +:1037D8000238C2788A122BFB00000000E4786FF6EA +:1037E80008F6788A122BD68F5F8E5E8D5D8C5C7F93 +:1037F8001A1244C8786FE6FD7F10124BAA7870E65B +:10380800FD7F11124BAA788A122BD68F5F8E5E8DA0 +:103818005D8C5C7F1E1244C8786FE6FD7F12124BE8 +:10382800AA7870E6FD7F13124BAA788A122BD68FDE +:103838005F8E5E8D5D8C5C7F221244C8786FE6FDDA +:103848007F14124BAA7870E6FD7F15124BAA788A6E +:10385800122BD68F5F8E5E8D5D8C5C7F261244C8DE +:10386800786FE6FD7F16124BAA7870E6FD7F171277 +:103878004BAA788A122BD68F5F8E5E8D5D8C5C7F0B +:103888002A1244C8786FE6FD7F18124BAA7870E6B2 +:10389800FD7F19124BAA788A122BD68F5F8E5E8D08 +:1038A8005D8C5C7F301244C8786FE6FD7F2E124B2A +:0B38B800AA7870E6FD7F2F124BAA22B9 +:104A4500C0F9A4B0999282F880908883C6A1868E19 +:104A5500BFFF8CAF8789C7A3ABC2AAC19195F60FDB +:104A650001161614131718010C0511111111111146 +:024A750011111D +:1046C700C2AFE4F56CE56C78C266701330181074ED +:1046D7002C256CF8E6904A4593547FF56E800C7450 +:1046E7002C256CF8E6904A4593F56EE4F56DE56E7A +:1046F70030E704D2A78002C2A7D2A6000000C2A654 +:10470700E56E25E0F56E000000124CC1056DE56D04 +:10471700D3940740D9056CE56CC3940840A7D2AF82 +:01472700226F +:104C60008F2C8D2D8B2E85632F8565308567318543 +:084C70006932856B330246C76F +:104C4500752C11752D11752E11752F117530117566 +:0B4C550031117532117533110246C792 +:084229008F5D8E5C8D5B8C5AE9 +:10423100755F07C37408955EC36480F8E55F6480A9 +:1042410098406CE47B0AFAF9F8AF5DAE5CAD5BAC0B +:104251005A122B0DAF03742C255FF8A607E4FFFE5D +:10426100FDFCAB5DAA5CA95BA85AC3122B9F701F12 +:1042710078C2E6FFAD5FED3395E0FCC3ED9F74803E +:10428100F86C98500A742C255FF8E670027611AF2D +:104291005DAE5CAD5BAC5AE47B0AFAF9F8122B0D0A +:1042A1008F5D8E5C8D5B8C5A124CC1155F8084E5ED +:1042B1002CB4110BE52DB41106752C0C752D1B02B8 +:0242C10046C7EE +:0645FF008E5B8F5C8D5DF8 +:10460500755E07C37408955DC36480F8E55E6480D4 +:10461500984041AE5BAF5C7C007D0A122A2D742C5C +:10462500255EF8A605E55C455B7013C3E55E648011 +:104635009487500A742C255EF8E670027611AE5BFD +:10464500AF5C7C007D0A122A2D8E5B8F5C124CC1FB +:10465500155E80AF752C0B752D0A752E140246C795 +:10495000E4F558AF58EF3395E0FE74642FF5827498 +:104960004A3EF583E493F5347FC87E00124A77E42B +:10497000FF742D2FF8E6FE742C2FF8A6060FBF0843 +:0F498000F01246C70558C3E5586480949340C4AD +:01498F002205 +:044A77008E638F6457 +:104A7B00E4F565F566C3E5669564E5659563501BDE +:104A8B00E4FFFE0FBF00010EEF64694E70F5124C90 +:0B4A9B00C10566E56670DE056580DA87 +:014AA60022ED +:064990008B5A8A5B895C72 +:10499600D228E4FFEFC39561E5606480F8748098DF +:1049A6005025AB5DAA5EA95F8F827583001229EE42 +:1049B600FEAB5AAA5BA95C8F827583001229EE6E44 +:0949C6006002C2280F80CDA22876 +:0149CF0022C5 +:024C2900A907D9 +:104C2B00E4FFEFC39BEA6480F8748098500BA805EF +:094C3B00E6A801F6090D0F80E95D +:014C4400224D +:074CC10075A61E75A6E12295 +:0F4C8A00EFC4540F75F00AA4FEEF540F2EFF2253 +:104B05008F5D8D5E124CC1124C997881E6FF124B78 +:104B1500ED12000EAF5D124BED12000EAF5E124BA3 +:0E4B2500ED12000E124CA87F147E00024A779B +:024A0D008F5EBA +:104A0F00124CC1124C997881E6FF124BED12000E39 +:104A1F00AF5E124BED12000E124C997881E604FF37 +:104A2F00124BED12000E124C0C8F5FD2B612000E0D +:054A3F00124CA8AF5F5E +:014A4400224F +:0F4C9900D2B6D2B7000000C2B6000000C2B722E8 +:0D4CA800C2B6000000D2B7000000D2B62254 +:104BED00E4FEEF30E704D2B68002C2B6000000D278 +:0E4BFD00B7000000C2B7EF25E0FF0EBE08E4CF +:014C0B002286 +:104C0C00E4FFFEEF25E0FFC2B7000000D2B730B6DC +:0C4C1C000543070180000EBE08E9C2B786 +:014C28002269 +:08000600124C997FD0124BED62 +:0D000E00D2B6000000D2B7000000C2B72239 +:104BAA008F608D61124CC1120006AF60124BED127C +:104BBA00000EAF61124BED12000E124CA87F147E4C +:044BCA0000024A7724 +:024B60008F5E66 +:104B6200124CC1120006AF5E124BED12000E124C37 +:104B7200997FD1124BED12000E124C0CD2B61200DC +:044B82000E024CA82B +:0244C8008F5B08 +:1044CA00E55FFF780AEFF6FBAF5FAE5EAD5DAC5C11 +:1044DA007808122BB0E4780BA607AF5FAE5EAD5D2D +:1044EA00AC5C7810122BB0E4780CA607AF5FAE5E16 +:1044FA00AD5DAC5C7818122BB0780DA607AD03AF92 +:10450A005B124BAAE55B04FF780BE6FD124BAAE5AA +:10451A005B2402FF780CE6FD124BAAE55B2403FF3D +:07452A00780DE6FD024BAA2B +:023E9D008F5D37 +:103E9F00124B60E4FCFDFE780A122BEFE55D04FF88 +:103EAF00124B60E4FCFDFE780E122BEFE55D240251 +:103EBF00FF124B60E4FCFDFE7812122BEFE55D2440 +:103ECF0003FF124B60E4FCFDFE7816122BEF780E09 +:103EDF00122BD67808122BC3E4FDFCC004C005C01A +:103EEF0006C007780A122BD6D003D002D001D0001B +:103EFF00EF2BFFE43AFEE439FDE438FCC004C005C3 +:103F0F00C006C0077812122BD67810122BC3E4FC10 +:103F1F00D003D002D001D000EB2FFFEA3EFEE93DE7 +:103F2F00FDEC38FCC004C005C006C0077816122B84 +:103F3F00D67818122BC3D003D002D001D000EB2FAC +:0A3F4F00FFEA3EFEE93DFDE83CFC00 +:013F59002245 +:10434F00D284D285D286D287C280D281D282D283C2 +:10435F002084037F01222085037F02222086037F92 +:10436F0003222087037F4122D280C281D282D2834F +:10437F002084037F04222085037F05222086037F6C +:10438F0006222087037F4222D280D281C282D2832B +:10439F002084037F07222085037F08222086037F46 +:1043AF0009222087037F4322D280D281D282C28307 +:1043BF002084037F2A222085037F00222086037F0B +:0B43CF0023222087037F44227F7822F6 +:0C4CB500C2B47F057E00124A77D2B42200 +:104AA700E4F556F557E55625E0F556D2B300000074 +:104AB700C2B300000030B2054356018000124CC15A +:0F4AC7000557C3E5576480948840DAD2B3AF56E1 +:014AD60022BD +:10453100300F54124AA78F2B124AA78F54124AA741 +:104541008F2AE52B30E704C21B8002D21BE55425DC +:10455100E025E0FFE52AC4131354032FF52AE52BC8 +:1045610025E025E0FFE554C4131354032FF52BFE7A +:104571007C00E4252AF509EC3EF508124CC1124AEB +:10458100A78F55C20FD2A8E555B4490B7894A60858 +:0845910008A609D226D202227D +:030000000242C3F6 +:0C42C300787FE4F6D8FD7581C202430A42 +:1029CC00C2D530F707B2D563F0FF05F030E70CB293 +:1029DC00D5F4048463F0FF05F080018430D502F453 +:0229EC000422C3 +:1029EE00BB010CE58229F582E5833AF583E022509E +:1029FE0006E92582F8E622BBFE06E92582F8E222E8 +:0D2A0E00E58229F582E5833AF583E4932201 +:102A1B00EF8DF0A4A8F0CF8CF0A428CE8DF0A42ECF +:022A2B00FE2289 +:102A2D00BC000BBE0029EF8DF084FFADF022E4CC8D +:102A3D00F875F008EF2FFFEE33FEEC33FCEE9DEC56 +:102A4D00984005FCEE9DFE0FD5F0E9E4CEFD22ED9C +:102A5D00F8F5F0EE8420D21CFEADF075F008EF2FE6 +:102A6D00FFED33FD4007985006D5F0F222C398FDD7 +:052A7D000FD5F0EA2274 +:102A8200E88FF0A4CC8BF0A42CFCE98EF0A42CFCF3 +:102A92008AF0EDA42CFCEA8EF0A4CDA8F08BF0A471 +:102AA2002DCC3825F0FDE98FF0A42CCD35F0FCEBD0 +:102AB2008EF0A4FEA9F0EB8FF0A4CFC5F02ECD3995 +:0F2AC200FEE43CFCEAA42DCE35F0FDE43CFC2202 +:102AD10075F008758200EF2FFFEE33FECD33CDCCBC +:102AE10033CCC58233C5829BED9AEC99E58298403F +:102AF1000CF582EE9BFEED9AFDEC99FC0FD5F0D61C +:102B0100E4CEFBE4CDFAE4CCF9A88222B800C1B945 +:102B11000059BA002DEC8BF084CFCECDFCE5F0CB83 +:102B2100F97818EF2FFFEE33FEED33FDEC33FCEBBC +:102B310033FB10D703994004EB99FB0FD8E5E4F977 +:102B4100FA227818EF2FFFEE33FEED33FDEC33FC64 +:102B5100C933C910D7059BE99A4007EC9BFCE99A58 +:102B6100F90FD8E0E4C9FAE4CCFB2275F010EF2F9D +:102B7100FFEE33FEED33FDCC33CCC833C810D7079D +:102B81009BEC9AE899400AED9BFDEC9AFCE899F8D8 +:0E2B91000FD5F0DAE4CDFBE4CCFAE4C8F9226B +:102B9F00EB9FF5F0EA9E42F0E99D42F0E89C45F08C +:012BAF002203 +:102BB000E8600FECC313FCED13FDEE13FEEF13FF03 +:032BC000D8F12227 +:102BC300E8600FEFC333FFEE33FEED33FDEC33FC70 +:032BD300D8F12214 +:0C2BD600E6FC08E6FD08E6FE08E6FF222B +:0D2BE200E6FB08E6F908E6FA08E6CBF82263 +:0C2BEF00ECF608EDF608EEF608EFF62212 +:102BFB00D083D082E493F608740193F608740293A1 +:092C0B00F608740393F6740473D7 +:104C7800C3EE6480948040028007C3E49FFFE49EF3 +:024C8800FE220A +:1042CF000234FAE493A3F8E493A34003F68001F2D7 +:1042DF0008DFF48029E493A3F85407240CC8C333F0 +:1042EF00C4540F4420C8834004F456800146F6DFBF +:1042FF00E4800B0102040810204080903DC1E47E51 +:10430F00019360BCA3FF543F30E509541FFEE493B3 +:10431F00A360010ECF54C025E060A840B8E493A37A +:10432F00FAE493A3F8E493A3C8C582C8CAC583CAA5 +:10433F00F0A3C8C582C8CAC583CADFE9DEE780BE5D +:013E9C000025 +:00000001FF diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/desktop.ini b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/desktop.ini new file mode 100644 index 0000000..d9d3246 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/desktop.ini @@ -0,0 +1,2 @@ +[.ShellClassInfo] +IconResource=C:\Program Files\Google\Drive File Stream\130.0.2.0\GoogleDriveFS.exe,27 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.LST b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.LST new file mode 100644 index 0000000..c225072 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.LST @@ -0,0 +1,258 @@ +C51 COMPILER V9.60.7.0 EEPROM 07/10/2026 17:02:31 PAGE 1 + + +C51 COMPILER V9.60.7.0, COMPILATION OF MODULE EEPROM +OBJECT MODULE PLACED IN eeprom.OBJ +COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c BROWSE DEBUG OBJECTEXTEND + +line level source + + 1 // Reads from & writes to eeprom + 2 + 3 //#include + 4 //#include + 5 + 6 //#include + 7 #include + 8 + 9 #include + 10 #include + 11 #include + 12 + 13 #include + 14 #include + 15 //------------------------------------------------------------------------------ + 16 void start(void); + 17 void stop(void); + 18 void write_data(unsigned char d); + 19 unsigned char read_data(void); + 20 void ack(void); + 21 + 22 sbit sda=P3^6; + 23 sbit scl=P3^7; + 24 //------------------------------------------------------------------------- + 25 extern unsigned char idata EEPROM_block; + 26 //----------------------------------------------------------------------------- + 27 void write_eeprom(unsigned char wa,unsigned char wd) + 28 { + 29 1 rst_wdt(); + 30 1 start(); + 31 1 //write_data(0xA0); + 32 1 write_data(EEPROM_block); + 33 1 ack(); + 34 1 write_data(wa); // Write to EEPROM. + 35 1 ack(); // wa = word address & + 36 1 write_data(wd); // wd = data to be written. + 37 1 ack(); + 38 1 stop(); + 39 1 delay(20); + 40 1 } + 41 //----------------------------------------------------------------------------- + 42 unsigned char read_eeprom(unsigned char wa) + 43 { + 44 1 unsigned char d1; + 45 1 + 46 1 rst_wdt(); + 47 1 start(); + 48 1 //write_data(0xA0); // Read from eeprom. + 49 1 write_data(EEPROM_block); + 50 1 ack(); // returns the data. + 51 1 write_data(wa); + 52 1 ack(); + 53 1 start(); + 54 1 //write_data(0xA1); + 55 1 write_data(EEPROM_block+0x01); + C51 COMPILER V9.60.7.0 EEPROM 07/10/2026 17:02:31 PAGE 2 + + 56 1 ack(); + 57 1 d1=read_data(); + 58 1 sda = 1; + 59 1 ack(); + 60 1 stop(); + 61 1 return(d1); + 62 1 } + 63 //----------------------------------------------------------------------------- + 64 void start(void) + 65 { + 66 1 sda = 1; + 67 1 scl = 1; + 68 1 nop(); + 69 1 sda = 0; + 70 1 nop(); + 71 1 scl = 0; + 72 1 } + 73 //----------------------------------------------------------------------------- + 74 void stop(void) + 75 { + 76 1 sda = 0; + 77 1 nop(); + 78 1 scl = 1; + 79 1 nop(); + 80 1 sda = 1; + 81 1 } + 82 //----------------------------------------------------------------------------- + 83 void write_data(unsigned char d) + 84 { + 85 1 unsigned char i; + 86 1 for(i=0;i<8;i++) + 87 1 { + 88 2 if(d & 0x80) sda = 1; + 89 2 else sda = 0; + 90 2 nop(); + 91 2 scl = 1; + 92 2 nop(); + 93 2 scl = 0; + 94 2 d<<=1; + 95 2 } + 96 1 } + 97 //----------------------------------------------------------------------------- + 98 unsigned char read_data(void) + 99 { + 100 1 unsigned char i,d2; + 101 1 d2 = 0x00; + 102 1 for(i=0;i<8;i++) + 103 1 { + 104 2 d2<<=1; + 105 2 scl = 0; + 106 2 nop(); + 107 2 scl = 1; + 108 2 if(sda) d2 = d2 | 0x01; + 109 2 else d2 = d2 | 0x00; + 110 2 } + 111 1 scl = 0; + 112 1 return(d2); + 113 1 } + 114 //----------------------------------------------------------------------------- + 115 void ack(void) + 116 { + 117 1 sda = 1; + C51 COMPILER V9.60.7.0 EEPROM 07/10/2026 17:02:31 PAGE 3 + + 118 1 nop(); + 119 1 scl = 1; + 120 1 nop(); + 121 1 scl = 0; + 122 1 } + 123 //----------------------------------------------------------------------------- + 124 void write_RTC(unsigned char wa,unsigned char wd) + 125 { + 126 1 rst_wdt(); + 127 1 start(); + 128 1 write_data(0xD0); + 129 1 ack(); + 130 1 write_data(wa); // Write to RTC. + 131 1 ack(); // wa = word address & + 132 1 write_data(wd); // wd = data to be written. + 133 1 ack(); + 134 1 stop(); + 135 1 delay(20); + 136 1 } + 137 //----------------------------------------------------------------------------- + 138 unsigned char read_RTC(unsigned char wa) + 139 { + 140 1 unsigned char d1; + 141 1 + 142 1 rst_wdt(); + 143 1 start(); + 144 1 write_data(0xD0); // Read from RTC. + 145 1 ack(); // returns the data. + 146 1 write_data(wa); + 147 1 ack(); + 148 1 start(); + 149 1 write_data(0xD1); + 150 1 ack(); + 151 1 d1=read_data(); + 152 1 sda = 1; + 153 1 ack(); + 154 1 stop(); + 155 1 return(d1); + 156 1 } + 157 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 158 //This function will write a 4 byte (32bit) long to the eeprom at + 159 //the specified address to adress + 3. + 160 void RTC_Writelong(unsigned char address,unsigned long value) + 161 { + 162 1 //Decomposition from a long to 4 bytes by using bitshift. + 163 1 //One = Most significant -> Four = Least significant byte + 164 1 idata unsigned char four = (value & 0xFF); + 165 1 idata unsigned char three = ((value >> 8) & 0xFF); + 166 1 idata unsigned char two = ((value >> 16) & 0xFF); + 167 1 idata unsigned char one = ((value >> 24) & 0xFF); + 168 1 + 169 1 //Write the 4 bytes into the eeprom memory. + 170 1 write_RTC(address, four); + 171 1 write_RTC(address + 1, three); + 172 1 write_RTC(address + 2, two); + 173 1 write_RTC(address + 3, one); + 174 1 } + 175 //------------------------------------------------------------------------------ + 176 //This function will return a 4 byte (32bit) long from the eeprom + 177 //at the specified address to adress + 3. + 178 unsigned long RTC_Readlong(unsigned char address) + 179 { + C51 COMPILER V9.60.7.0 EEPROM 07/10/2026 17:02:31 PAGE 4 + + 180 1 //Read the 4 bytes from the eeprom memory. + 181 1 idata unsigned long four = read_RTC(address); + 182 1 idata unsigned long three = read_RTC(address + 1); + 183 1 idata unsigned long two = read_RTC(address + 2); + 184 1 idata unsigned long one = read_RTC(address + 3); + 185 1 + 186 1 //Return the recomposed long by using bitshift. + 187 1 return (((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFF + -FFF)); + 188 1 } + 189 //----------------------------------------------------------------------------------------- + 190 + 191 + 192 //=========================================================================================== + 193 //internal EEPROM usage + 194 //#include + 195 //#include + 196 + 197 /* + 198 * Return EEPROM Byte at address 'adr' + 199 */ + 200 /*unsigned char ReadEEPROM (unsigned int adr) { + 201 unsigned char v; + 202 + 203 WMCON |= EEMEN_; // enable EEPROM + 204 v = XBYTE[adr]; // read value + 205 WMCON &= ~EEMEN_; // disable EEPROM + 206 return (v); + 207 }*/ + 208 + 209 + 210 /* + 211 * Write EEPROM Byte 'val' at address 'adr' + 212 */ + 213 /*void WriteEEPROM (unsigned int adr, unsigned char val) { + 214 WMCON |= (EEMEN_ | EEMWE_); // enable EEPROM and set write bit + 215 XBYTE[adr] = val; // write value + 216 while ((WMCON & EERDY_) == 0); // wait until value programmed + 217 WMCON &= ~(EEMWE_ | EEMEN_); // disable EEPROM and write strobe + 218 }*/ + 219 + 220 /* + 221 unsigned char v; + 222 + 223 void main (void) { + 224 v = ReadEEPROM (0x200); // read EEPROM address 0x200 + 225 WriteEEPROM (0x200, 6); // write 6 to EEPROM address 0x200 + 226 while (1); + 227 }*/ + 228 //------------------------------------------------------------------ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 579 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 13 + IDATA SIZE = ---- 20 + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.OBJ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..a9cae648de2ef28461a1f4771c8028ae431a0e1a GIT binary patch literal 18204 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 literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.c new file mode 100644 index 0000000..114ba61 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.c @@ -0,0 +1,228 @@ +// Reads from & writes to eeprom + +//#include +//#include + +//#include +#include + +#include +#include +#include + +#include +#include +//------------------------------------------------------------------------------ +void start(void); +void stop(void); +void write_data(unsigned char d); +unsigned char read_data(void); +void ack(void); + +sbit sda=P3^6; +sbit scl=P3^7; +//------------------------------------------------------------------------- +extern unsigned char idata EEPROM_block; +//----------------------------------------------------------------------------- +void write_eeprom(unsigned char wa,unsigned char wd) +{ + rst_wdt(); + start(); + //write_data(0xA0); + write_data(EEPROM_block); + ack(); + write_data(wa); // Write to EEPROM. + ack(); // wa = word address & + write_data(wd); // wd = data to be written. + ack(); + stop(); + delay(20); +} +//----------------------------------------------------------------------------- +unsigned char read_eeprom(unsigned char wa) +{ + unsigned char d1; + + rst_wdt(); + start(); + //write_data(0xA0); // Read from eeprom. + write_data(EEPROM_block); + ack(); // returns the data. + write_data(wa); + ack(); + start(); + //write_data(0xA1); + write_data(EEPROM_block+0x01); + ack(); + d1=read_data(); + sda = 1; + ack(); + stop(); + return(d1); +} +//----------------------------------------------------------------------------- +void start(void) +{ + sda = 1; + scl = 1; + nop(); + sda = 0; + nop(); + scl = 0; +} +//----------------------------------------------------------------------------- +void stop(void) +{ + sda = 0; + nop(); + scl = 1; + nop(); + sda = 1; +} +//----------------------------------------------------------------------------- +void write_data(unsigned char d) +{ + unsigned char i; + for(i=0;i<8;i++) + { + if(d & 0x80) sda = 1; + else sda = 0; + nop(); + scl = 1; + nop(); + scl = 0; + d<<=1; + } +} +//----------------------------------------------------------------------------- +unsigned char read_data(void) +{ + unsigned char i,d2; + d2 = 0x00; + for(i=0;i<8;i++) + { + d2<<=1; + scl = 0; + nop(); + scl = 1; + if(sda) d2 = d2 | 0x01; + else d2 = d2 | 0x00; + } + scl = 0; + return(d2); +} +//----------------------------------------------------------------------------- +void ack(void) +{ + sda = 1; + nop(); + scl = 1; + nop(); + scl = 0; +} +//----------------------------------------------------------------------------- +void write_RTC(unsigned char wa,unsigned char wd) +{ + rst_wdt(); + start(); + write_data(0xD0); + ack(); + write_data(wa); // Write to RTC. + ack(); // wa = word address & + write_data(wd); // wd = data to be written. + ack(); + stop(); + delay(20); +} +//----------------------------------------------------------------------------- +unsigned char read_RTC(unsigned char wa) +{ + unsigned char d1; + + rst_wdt(); + start(); + write_data(0xD0); // Read from RTC. + ack(); // returns the data. + write_data(wa); + ack(); + start(); + write_data(0xD1); + ack(); + d1=read_data(); + sda = 1; + ack(); + stop(); + return(d1); +} +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//This function will write a 4 byte (32bit) long to the eeprom at +//the specified address to adress + 3. +void RTC_Writelong(unsigned char address,unsigned long value) +{ +//Decomposition from a long to 4 bytes by using bitshift. +//One = Most significant -> Four = Least significant byte +idata unsigned char four = (value & 0xFF); +idata unsigned char three = ((value >> 8) & 0xFF); +idata unsigned char two = ((value >> 16) & 0xFF); +idata unsigned char one = ((value >> 24) & 0xFF); + +//Write the 4 bytes into the eeprom memory. +write_RTC(address, four); +write_RTC(address + 1, three); +write_RTC(address + 2, two); +write_RTC(address + 3, one); +} +//------------------------------------------------------------------------------ +//This function will return a 4 byte (32bit) long from the eeprom +//at the specified address to adress + 3. +unsigned long RTC_Readlong(unsigned char address) +{ +//Read the 4 bytes from the eeprom memory. +idata unsigned long four = read_RTC(address); +idata unsigned long three = read_RTC(address + 1); +idata unsigned long two = read_RTC(address + 2); +idata unsigned long one = read_RTC(address + 3); + +//Return the recomposed long by using bitshift. +return (((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF)); +} +//----------------------------------------------------------------------------------------- + + +//=========================================================================================== +//internal EEPROM usage +//#include +//#include + +/* + * Return EEPROM Byte at address 'adr' + */ +/*unsigned char ReadEEPROM (unsigned int adr) { + unsigned char v; + + WMCON |= EEMEN_; // enable EEPROM + v = XBYTE[adr]; // read value + WMCON &= ~EEMEN_; // disable EEPROM + return (v); +}*/ + + +/* + * Write EEPROM Byte 'val' at address 'adr' + */ +/*void WriteEEPROM (unsigned int adr, unsigned char val) { + WMCON |= (EEMEN_ | EEMWE_); // enable EEPROM and set write bit + XBYTE[adr] = val; // write value + while ((WMCON & EERDY_) == 0); // wait until value programmed + WMCON &= ~(EEMWE_ | EEMEN_); // disable EEPROM and write strobe +}*/ + +/* +unsigned char v; + +void main (void) { + v = ReadEEPROM (0x200); // read EEPROM address 0x200 + WriteEEPROM (0x200, 6); // write 6 to EEPROM address 0x200 + while (1); +}*/ +//------------------------------------------------------------------ diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.h b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.h new file mode 100644 index 0000000..bfb5b3e --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/eeprom.h @@ -0,0 +1,72 @@ +#ifndef __EEPROM_H__ +#define __EEPROM_H__ +//------------------------------------------------------------------------------ +#define Block_0 0xA0 //'EEPROM Block 256 bytes in 24C08 +#define Block_1 0xA2 +#define Block_2 0xA4 +#define Block_3 0xA6 +//---------------------------------------------------------------------------- +#define EE_test_loc_Mem 0x00 //1 byte +#define EE_cal_val_Mem_MSB 0x01 //2 byte +#define EE_cal_val_Mem_LSB 0x02 +#define EE_zset_Mem_MSB 0x03 //2 byte +#define EE_zset_Mem_LSB 0x04 +#define EE_rng_val_Mem 0x05 //1 byte +#define EE_res_Mem 0x06 //1 byte +#define EE_mas_Mem 0x07 //1 byte +#define EE_ztc_Mem 0x08 //1 byte +#define EE_dp_val_mem 0x09 //1 byte +#define EE_avg_Mem 0x0A //1 byte +#define EE_wait_val_Mem 0x0B //1 byte +#define EE_drop_wait_val_Mem 0x0C //1 byte +#define EE_on_time_Mem 0x0D //1 byte +//----------------------------------------------------------------------------- + //08h–3Fh RAM 56 x 8 (DS1307) +#define RTC_MEM_current_recipe 0x08 //1 byte +#define RTC_MEM_Auto_start_enable 0x09 //1 byte +#define RTC_MEM_start_delay 0x0A //1 byte +#define RTC_MEM_recipe_enable 0x0B //1 byte +#define RTC_MEM_gross_weight_enable 0x0C //1 byte +//#define RTC_MEM_start_status 0x0D //1 byte +#define RTC_MEM_Instant_fill_enable 0x0E //1 byte +#define RTC_MEM_status 0x0F //1 byte + +#define RTC_MEM_F1_batch_MSB 0x10 //1 byte +#define RTC_MEM_F1_batch_LSB 0x11 //1 byte +#define RTC_MEM_F2_batch_MSB 0x12 //1 byte +#define RTC_MEM_F2_batch_LSB 0x13 //1 byte +#define RTC_MEM_F3_batch_MSB 0x14 //1 byte +#define RTC_MEM_F3_batch_LSB 0x15 //1 byte +#define RTC_MEM_F4_batch_MSB 0x16 //1 byte +#define RTC_MEM_F4_batch_LSB 0x17 //1 byte +#define RTC_MEM_F5_batch_MSB 0x18 //1 byte +#define RTC_MEM_F5_batch_LSB 0x19 //1 byte + +#define RTC_MEM_F1_cumulative 0x1A //4 byte +#define RTC_MEM_F2_cumulative 0x1E //4 byte +#define RTC_MEM_F3_cumulative 0x22 //4 byte +#define RTC_MEM_F4_cumulative 0x26 //4 byte +#define RTC_MEM_F5_cumulative 0x2A //4 byte + +#define RTC_MEM_F6_TO_F36_batch_MSB 0x2E //1 byte +#define RTC_MEM_F6_TO_F36_batch_LSB 0x2F //1 byte +#define RTC_MEM_F6_TO_F36_cumulative 0x30 //4 byte + +#define RTC_MEM_batch_set_MSB 0x34 //1 byte +#define RTC_MEM_batch_set_LSB 0x35 //1 byte +#define RTC_MEM_batch_set_enable 0x36 //1 byte + +#define RTC_MEM_batch_set_count_MSB 0x37 //1 byte +#define RTC_MEM_batch_set_count_LSB 0x38 //1 byte + +#define RTC_fillset_MSB 0x39 //1 byte +#define RTC_fillset_LSB 0x3A //1 byte +//------------------------------------------------------------------------------ +void write_eeprom(unsigned char wa,unsigned char wd); +unsigned char read_eeprom(unsigned char wa); +void write_RTC(unsigned char wa,unsigned char wd); +unsigned char read_RTC(unsigned char wa); +void RTC_Writelong(unsigned char address,unsigned long value); +unsigned long RTC_Readlong(unsigned char address); +//------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvopt b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvopt new file mode 100644 index 0000000..61169d0 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvopt @@ -0,0 +1,1681 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 33000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + S8051.DLL + + DP51.DLL + -pAT52 + S8051.DLL + + TP51.DLL + -pAT52 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source Group 1 + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 23 + 0 + 1157 + 1187 + 0 + .\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 17 + 0 + 1 + 1 + 0 + .\ser_disp.c + ser_disp.c + + + 1 + 3 + 1 + 1 + 0 + 34 + 0 + 24 + 24 + 0 + .\utility.c + utility.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\eeprom.c + eeprom.c + + + 1 + 5 + 1 + 0 + 0 + 38 + 0 + 43 + 43 + 0 + .\4x4_key.c + 4x4_key.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\ADC_AD7780.C + ADC_AD7780.C + + + 1 + 7 + 1 + 0 + 0 + 55 + 0 + 0 + 0 + 0 + .\ADC_HX711.C + ADC_HX711.C + + + + + Documentation + 0 + 0 + 0 + + 2 + 8 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\Notes.txt + Notes.txt + + + + + C:\FILES\FILLTRONICS\2025 FILLTRONIC FINAL PROGRAMS\EMBEDED PROGRAMS 2025\C51 2025\Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2\utility.h + 1 + 5 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + Default + 1 + Build + 0 + + Default + 1 + + 59392 + 1 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 2 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 3 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 4 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 0 + 0 + + + 198 + 5 + Command + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 6 + Find in Files + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 7 + Browse + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 8 + UART #1 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 9 + UART #2 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 10 + UART #3 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 11 + UART #4 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 12 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1507 + 13 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1935 + 14 + Locals + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1936 + 15 + Watch 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1937 + 16 + Watch 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1465 + 17 + Memory 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1466 + 18 + Memory 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1467 + 19 + Memory 3 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1468 + 20 + Memory 4 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1506 + 21 + Symbols + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1005 + 22 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 23 + Books + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 24 + Functions + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 25 + Templates + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 26 + Registers + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 27 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 28 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 29 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 30 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 31 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 32 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 33 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 34 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 35 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35894 + 36 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 37 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 38 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 39 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 40 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 41 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35900 + 42 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 43 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 44 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 45 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 46 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 47 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 48 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1913 + 49 + Instruction Trace + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35824 + 50 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + + + 1 + 0 + + 100 + 0 + + + .\main.c + 23 + 1157 + 1187 + + + .\ser_disp.c + 17 + 1 + 1 + + + .\4x4_key.c + 38 + 43 + 43 + + + .\utility.c + 34 + 24 + 24 + + + utility.h + 1 + 1 + 5 + + + + + +
diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvproj b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvproj new file mode 100644 index 0000000..d9c61b0 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill.uvproj @@ -0,0 +1,400 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + + + AT89C55WD + Atmel + IRAM(0-0xFF) IROM(0-0x4FFF) CLOCK(33000000) MODAT2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 3414 + REGX55.H + + + + + + + + + + 0 + + + + Atmel\ + Atmel\ + + 0 + 0 + 0 + 0 + 1 + + .\ + Tin_fill_4x4_key_36Recipe_ad7780_55WD_default + 1 + 0 + 1 + 1 + 1 + .\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + D:\VEN\CPGM\fill\Tin\h.bat fill + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 65535 + + + S8051.DLL + + DP51.DLL + -pAT52 + S8051.DLL + + TP51.DLL + -pAT52 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0 + 0 + + + + + + + + + + + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + + + + + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x5000 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + main.c + 1 + .\main.c + + + ser_disp.c + 1 + .\ser_disp.c + + + utility.c + 1 + .\utility.c + + + eeprom.c + 1 + .\eeprom.c + + + 4x4_key.c + 1 + .\4x4_key.c + + + ADC_AD7780.C + 1 + .\ADC_AD7780.C + + + ADC_HX711.C + 1 + .\ADC_HX711.C + + + + + Documentation + + + Notes.txt + 5 + .\Notes.txt + + + + + + + +
diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvopt.bak b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvopt.bak new file mode 100644 index 0000000..174f896 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvopt.bak @@ -0,0 +1,1681 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 33000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + S8051.DLL + + DP51.DLL + -pAT52 + S8051.DLL + + TP51.DLL + -pAT52 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source Group 1 + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 22 + 0 + 1157 + 1157 + 0 + .\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 17 + 0 + 1 + 1 + 0 + .\ser_disp.c + ser_disp.c + + + 1 + 3 + 1 + 1 + 0 + 34 + 0 + 24 + 24 + 0 + .\utility.c + utility.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\eeprom.c + eeprom.c + + + 1 + 5 + 1 + 0 + 0 + 38 + 0 + 43 + 43 + 0 + .\4x4_key.c + 4x4_key.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\ADC_AD7780.C + ADC_AD7780.C + + + 1 + 7 + 1 + 0 + 0 + 55 + 0 + 0 + 0 + 0 + .\ADC_HX711.C + ADC_HX711.C + + + + + Documentation + 0 + 0 + 0 + + 2 + 8 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\Notes.txt + Notes.txt + + + + + C:\FILES\FILLTRONICS\2025 FILLTRONIC FINAL PROGRAMS\EMBEDED PROGRAMS 2025\C51 2025\Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2\utility.h + 1 + 5 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + Default + 1 + Build + 0 + + Default + 1 + + 59392 + 1 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 2 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 3 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 4 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 0 + 0 + + + 198 + 5 + Command + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 6 + Find in Files + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 7 + Browse + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 8 + UART #1 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 9 + UART #2 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 10 + UART #3 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 11 + UART #4 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 12 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1507 + 13 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1935 + 14 + Locals + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1936 + 15 + Watch 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1937 + 16 + Watch 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1465 + 17 + Memory 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1466 + 18 + Memory 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1467 + 19 + Memory 3 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1468 + 20 + Memory 4 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1506 + 21 + Symbols + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1005 + 22 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 23 + Books + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 24 + Functions + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 25 + Templates + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 26 + Registers + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 27 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 28 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 29 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 30 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 31 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 32 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 33 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 34 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 35 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35894 + 36 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 37 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 38 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 39 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 40 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 41 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35900 + 42 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 43 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 44 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 45 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 46 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 47 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 48 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1913 + 49 + Instruction Trace + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35824 + 50 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + + + 1 + 0 + + 100 + 0 + + + .\main.c + 22 + 1157 + 1157 + + + .\ser_disp.c + 17 + 1 + 1 + + + .\4x4_key.c + 38 + 43 + 43 + + + .\utility.c + 34 + 24 + 24 + + + utility.h + 1 + 1 + 5 + + + + + +
diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvproj.bak b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvproj.bak new file mode 100644 index 0000000..3744006 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/fill_uvproj.bak @@ -0,0 +1,400 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + + + AT89C55WD + Atmel + IRAM(0-0xFF) IROM(0-0x4FFF) CLOCK(33000000) MODAT2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 3414 + REGX55.H + + + + + + + + + + 0 + + + + Atmel\ + Atmel\ + + 0 + 0 + 0 + 0 + 1 + + .\ + Tin_fill_4x4_key_36Recipe_ad7780_55WD + 1 + 0 + 1 + 1 + 1 + .\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + D:\VEN\CPGM\fill\Tin\h.bat fill + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 65535 + + + S8051.DLL + + DP51.DLL + -pAT52 + S8051.DLL + + TP51.DLL + -pAT52 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0 + 0 + + + + + + + + + + + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + + + + + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x5000 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + main.c + 1 + .\main.c + + + ser_disp.c + 1 + .\ser_disp.c + + + utility.c + 1 + .\utility.c + + + eeprom.c + 1 + .\eeprom.c + + + 4x4_key.c + 1 + .\4x4_key.c + + + ADC_AD7780.C + 1 + .\ADC_AD7780.C + + + ADC_HX711.C + 1 + .\ADC_HX711.C + + + + + Documentation + + + Notes.txt + 5 + .\Notes.txt + + + + + + + +
diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.c new file mode 100644 index 0000000..dcaf0b5 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.c @@ -0,0 +1,52 @@ +//INCLUDE KEYBOARD HEADER FILE +#include +#include +#include + +//DECLARE GLOABL VARIABLE +//-------------------------------------------------------------------------------- +unsigned char find_col(unsigned char key) +{ + key_data &= 0x0f; + rst_wdt(); + if(key_data == 0x0d) + key++; + else if(key_data == 0x0b) + key +=2; + else if(key_data == 0x07) + key +=3; + return key; +} +//-------------------------------------------------------------------------------- +unsigned char get_data() +{ + unsigned char idata digit,time_out = 0; + unsigned char code a[] = "0123456789ABCD*#"; + //unsigned char code a[] = "123A456B789C*0#D"; + key_data = 0x0f; + + /*while(key_data != 0x0f); + delay(40); */ + while(key_data != 0x0f); + rst_wdt(); + while(key_data == 0x0f) + { + delay(KEY_DELAY); + if(time_out++ == MAX_TIME_OUT) + return 0; + } + //delay(20); + if((key_data = 0x7f) && MASK != 0x0f) + digit = find_col(0x00); + else if((key_data = 0xbf) && MASK != 0x0f) + digit = find_col(0x04); + else if((key_data = 0xdf) && MASK != 0x0f) + digit = find_col(0x08); + else if((key_data = 0xef) && MASK != 0x0f) + digit = find_col(0x0c); + + return a[digit]; +} +//----------------------------------------------------------------------------------- + + diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.h b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.h new file mode 100644 index 0000000..37faaef --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/keyboard4x4.h @@ -0,0 +1,25 @@ +#ifndef KEYBOARD4_4_H +#define KEYBOARD4_4_H + +#include + + +//USER DEFINED DATA TYPE +//typedef unsigned char ubyte; + + +//DEFINE PORTS/PINS +#define key_data P0 + +//DEFINE CONSTANT +//#define KEY_DELAY 100 +//#define MAX_TIME_OUT 100 +#define KEY_DELAY 1 +#define MAX_TIME_OUT 10 +#define MASK (key_data & 0x0f) + +//FUNCTION PROTOTYPES +unsigned char get_data(); +unsigned char find_col(unsigned char); + +#endif diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.LST b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.LST new file mode 100644 index 0000000..a3e1b82 --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.LST @@ -0,0 +1,3447 @@ +C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 1 + + +C51 COMPILER V9.60.7.0, COMPILATION OF MODULE MAIN +OBJECT MODULE PLACED IN main.OBJ +COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND + +line level source + + 1 //#pragma ot(9,size) + 2 //#pragma nointpromote + 3 + 4 //#include + 5 //#include + 6 + 7 #include + 8 #include //Library Header Files. + 9 #include + 10 #include + 11 #include + 12 #include + 13 //----------------------------------------------------------------------------- + 14 #include + 15 #include + 16 #include + 17 //#include + 18 //-------------------------------------------------------------------------- + 19 //define type of key board here + 20 //#define _6_key + 21 #define _4x4_key + 22 //-------------------------------------------------------------------------- + 23 //define type of ADC here + 24 #define _AD7780 + 25 //#define _HX711 + 26 //-------------------------------------------------------------------------- + 27 #ifdef _4x4_key + 28 #undef _6_key + 29 #endif + 30 #ifdef _6_key + #undef _4x4_key + #endif + 33 //--------------------------------------------------------------------------- + 34 #ifdef _4x4_key + 35 #include <4x4_key.h> + 36 #endif + 37 //---------------------------------------------------------------------------- + 38 #ifdef _AD7780 + 39 #include + 40 #endif + 41 #ifdef _HX711 + #include + #endif + 44 //----------------------------------------------------------------------------- + 45 void init(void); //Function declaration. + 46 void pwd(void); + 47 void blink(start,no); + 48 void menu(void); + 49 unsigned int bcd2bin(char no); + 50 void val_read(char a); + 51 void bin2bcd(unsigned int value,char no); + 52 void process(void); + 53 void tare_chk(void); + 54 void zero_track(void); + 55 void read_values(void); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 2 + + 56 /*void time_date(void);*/ + 57 void display_value(void); + 58 void check_keypad(void); + 59 void check_switch(void); + 60 void check_values(void); + 61 /*void tare_entry(void); + 62 void print_values(void); + 63 void set_clear(void);*/ + 64 void filter(void); + 65 char incdec(char name,char max,char min); + 66 void cal(void); + 67 void cal_find(void); + 68 void calibrate(void); + 69 void cal_rst(void); + 70 void average(void); + 71 void add_values(void); + 72 void settings(void); + 73 void sys_paramts(void); + 74 void self_test(void); + 75 void defaults(void); + 76 void load_eep_defaults(void); + 77 void select_menu(void); + 78 void disp_check(void); + 79 void fill_count(void); + 80 void display_total_cumulative(void); + 81 void display_total_batch(void); + 82 void clear_current_cumulative_batch(void); + 83 void display_current_cumulative(void); + 84 void display_current_batch(void); + 85 void clear_batch_cumulative(void); + 86 void recipe_menu(void); + 87 //void memory_backup_restore(void); + 88 //--------------------------------------------- + 89 sbit start=P1^0; + 90 sbit cal_en=P1^7; //calibration lock + 91 //--------------------------------------------- + 92 #ifdef _6_key //6 key + sbit set = P2^0; + sbit incr = P2^1; + sbit decr = P2^2; + sbit tare = P2^3; + sbit enter= P2^4; + sbit mode = P2^5; + #endif + 100 + 101 #ifdef _4x4_key //16 key + 102 #define set 'A' + 103 #define tare 'C' + 104 #define enter 'D' + 105 #define mode 'B' + 106 //#define left '*' + 107 //#define right '#' + 108 #define incr '*' + 109 #define decr '#' + 110 #endif + 111 //-------------------------------------------- + 112 sbit cf1 =P1^4; + 113 sbit cf2 =P1^1; + 114 sbit ff =P1^2; + 115 sbit waled=P1^3; + 116 + 117 sbit v_down_rly =P1^5; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 3 + + 118 sbit v_up_rly =P1^6; + 119 //--------------------Variable declaration,Char.-------------------------- + 120 unsigned char idata EEPROM_block = 0x00; + 121 + 122 unsigned char data temp_data[8],disp_data[8]; + 123 unsigned char idata temp_pwd[4],dp_val=4; + 124 + 125 unsigned char code pswd1[2]={3,6},pswd2[2]={6,3},pswd3[2]={1,9}; + 126 unsigned char code pswd4[2]={9,1},pswd5[2]={2,8},pswd6[2]={8,2}; + 127 unsigned char code pswd7[2]={5,5},pswd8[2]={1,1},pswd9[2]={2,2}; + 128 unsigned char code pswd10[2]={7,7},pswd11[2]={6,6},pswd12[2]={3,3},pswd13[2]={4,4}; + 129 unsigned char code pass_F1[2]={1,0},pass_F2[2]={2,0},pass_F3[2]={3,0},pass_F4[2]={4,0},pass_F5[2]={5,0}; + 130 unsigned char code pass_F6[2]={6,0},pass_F7[2]={7,0},pass_F8[2]={8,0},pass_F9[2]={9,0},pass_F10[2]={9,9}; + 131 //unsigned char data sec,min,hr,dt,mon,yr; + 132 //unsigned char data data_rd=0x40,ctr=0,active_cnt=10; + 133 unsigned char idata ztwc=0,res,tare_cnt=0,mul_factor,div_factor,ztc; + 134 unsigned char idata rng_val=0,mas,avg=0,t; + 135 unsigned char idata avg_cnt=10,add_cnt=0,test_loc=0x12,function=1; + 136 //unsigned char idata wait_val=1,drop_wait_val=1,drop_ctr=0,wait_ctr=0; + 137 unsigned char idata wait_val=1,drop_wait_val=1; + 138 unsigned int idata wait_ctr=0,drop_ctr=0; + 139 + 140 /*unsigned char code rng_array[7][3]={ + 141 10,16,8, + 142 10,24,12, + 143 10,32,16, + 144 10,44,22, + 145 10,64,32, + 146 10,84,42, + 147 10,104,52 }; */ + 148 + 149 unsigned char code rng_array[10][3]={ + 150 10,4,2, + 151 10,16,8, + 152 10,24,12, + 153 10,32,16, + 154 10,44,22, + 155 10,64,32, + 156 10,84,42, + 157 10,104,50, + 158 10,104,52, + 159 10,104,62 }; + 160 + 161 //unsigned char clk_lsb=0x60,clk_msb=0x18,gain=0x26; + 162 + 163 unsigned char data Adc_Value_LSB,Adc_Value_MSB,Adc_Value_MLSB,Status_Bits; + 164 + 165 unsigned char idata KeyPressed; + 166 unsigned char idata start_count=0x00,start_delay=0x50; + 167 unsigned char idata disp_count=0; + 168 //--------------------Variable declaration,Int.--------------------------- + 169 unsigned int idata fillset=0,cf=0,ffd=0,nfl=0,zset=0,htar=0,ltar=0; + 170 unsigned int idata cfd1,cfd2; + 171 unsigned int data tare_val=0,scale_val,help_val,temp_tare; + 172 unsigned int idata disp_val=0,adc_val=0,filter_val=0,prev_val[5]={0,0,0,0,0},start_disp=0; + 173 //unsigned int data prn_cap,prn_nett,prn_tare,prn_gross; + 174 unsigned int idata bin_val,cal_val=0x2710,temp_val,on_time=100; + 175 unsigned long int data temp,temp1,temp2,add_adc=0; + 176 + 177 unsigned long hold_counter = 0; + 178 + 179 unsigned long idata cumulative=0; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 4 + + 180 unsigned int idata batch=0,bset=0; + 181 unsigned int idata batch_count=0; + 182 //--------------------Variable declaration,Bit.--------------------------- + 183 bit adc_pol=0,aco=0,tare_pol=0,disp_pol,dp_flag=0,c_flag=0; + 184 bit wt_ach=0,zset_flag=0,ed=1,drop_flag=0; + 185 bit start_flag=0,busy_flag=0,tare_flag=0,help_flag; + 186 bit cal_flag=0,ave_ok,esc_flag=0,wa_flag=0,wait_flag=0,process_flag=0; + 187 bit cf1_flag=0,cf2_flag=0,ff_flag=0,autotare=1,fill_start=0,adc_err=0; + 188 bit recipe=0,grwt=0,auto_start=0,bset_enable=0,grwt_ok=0; + 189 bit start_wait_flag=0,shift_flag=0,Instant_fill_enable=0; + 190 bit set_enter_flag=0,rd_ok=0,start_status=0; + 191 + 192 bit Adc_Data_Ready,Adc_Status_bit73; + 193 //-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=- + 194 void main(void) + 195 { + 196 1 init(); + 197 1 rst_wdt(); + 198 1 #ifdef _6_key + if(!tare) autotare=0; + #elif defined( _4x4_key ) + 201 1 if(KeyPressed == tare) autotare=0; + 202 1 #endif + 203 1 dp_flag=0; + 204 1 disp(0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11); + 205 1 display_name(); + 206 1 //delay(500); + 207 1 read_values(); + 208 1 dp_flag=0; + 209 1 t=read_eeprom(EE_test_loc_Mem); + 210 1 if(t != test_loc) + 211 1 { + 212 2 disp(0x0d,0x0e,0x0f,0x0a,0x1b,0x16,0x14,0x05); + 213 2 #ifdef _6_key + while(enter && mode && set && decr && incr){delay(2);} + #elif defined( _4x4_key ) + 216 2 while(KeyPressed != enter && KeyPressed != mode && KeyPressed != set) {delay(2);} + 217 2 #endif + 218 2 + 219 2 #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) + 222 2 if(KeyPressed == enter) + 223 2 #endif + 224 2 { + 225 3 disp(0x11,0x16,0x17,0x0a,0x0d,0x01,0x18,0x09); + 226 3 load_eep_defaults(); + 227 3 delay(500); + 228 3 } + 229 2 } + 230 1 //init_adc(); + 231 1 #ifdef _AD7780 + 232 1 init_adc_AD7780(); + 233 1 #elif defined( _HX711 ) + init_adc_HX711(); + #endif + 236 1 //delay(500); + 237 1 clr_disp(); + 238 1 + 239 1 if(autotare) + 240 1 { + 241 2 disp_check(); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 5 + + 242 2 self_test(); + 243 2 clr_disp(); + 244 2 tare_flag=1; + 245 2 disp(0x11,0x11,0x14,0x0a,0x13,0x0e,0x11,0x11); + 246 2 delay(1000); + 247 2 clr_disp(); + 248 2 } + 249 1 dp_flag=1; + 250 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 251 1 while(1) + 252 1 { + 253 2 /*if(aco) + 254 2 { + 255 2 aco=0; + 256 2 //ctr=0; + 257 2 add_values(); + 258 2 add_cnt++; + 259 2 if(add_cnt >= avg_cnt) + 260 2 { + 261 2 add_cnt=0; + 262 2 average(); + 263 2 //filter(); + 264 2 //process(); + 265 2 } + 266 2 } */ + 267 2 process(); + 268 2 #ifdef _4x4_key + 269 2 KeyPressed=Read_Keypad(); + 270 2 #endif + 271 2 check_keypad(); + 272 2 check_switch(); + 273 2 rst_wdt(); + 274 2 check_values(); + 275 2 disp_count++; + 276 2 if(!help_flag && !tare_flag) + 277 2 {if(disp_count>2){display_value(); disp_count=0;}} + 278 2 //if(!help_flag && !tare_flag) display_value(); + 279 2 //delay(5); + 280 2 #ifdef _4x4_key + 281 2 KeyPressed='x'; + 282 2 #endif + 283 2 } + 284 1 } + 285 //========================================================================================= + 286 void init(void) + 287 { + 288 1 //#if defined(_6_key) + 289 1 #ifdef _6_key + P0=P1=P2=0xff; //when 6 key + TMOD=0x1D; + TH0=0x00; + TL0=0x00; + TCON=0x55; + IE=0x81; + IP=0x01; + SCON=0x00; + #elif defined( _4x4_key ) + 299 1 P1=P2=0xff; //when using 4x4 key + 300 1 TMOD=0x1D; + 301 1 TH0=0x00; + 302 1 TL0=0x00; + 303 1 TCON=0x55; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 6 + + 304 1 IE=0x89; + 305 1 IP=0x01; + 306 1 TH1=0xFC; + 307 1 TL1=0x66; + 308 1 SCON=0x00; + 309 1 #endif + 310 1 + 311 1 //--------------------------------------------------------------------- + 312 1 //Following value Only when HX710/HX711 ADC used + 313 1 //IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2) + 314 1 IT0 = 0; // Configure interrupt 0 for low level triggered /INT0 (P3.2) + 315 1 EX0 = 1; // Enable EX0 Interrupt + 316 1 EA = 1; // Enable Global Interrupt Flag + 317 1 //--------------------------------------------------------------------- + 318 1 + 319 1 cf1=0; + 320 1 cf2=0; + 321 1 ff=0; + 322 1 waled=0; + 323 1 } + 324 //=============================================================================================== + 325 void adcint0_isr(void) interrupt 0 + 326 { + 327 1 Adc_Data_Ready=1; + 328 1 //Get_Adc_Result(); + 329 1 #ifdef _AD7780 + 330 1 Get_Adc_Result_AD7780(); + 331 1 #elif defined( _HX711 ) + Get_Adc_Result_HX711(); + #endif + 334 1 aco=1; + 335 1 + 336 1 if(rd_ok) + 337 1 { + 338 2 rd_ok=0; + 339 2 add_values(); + 340 2 add_cnt++; + 341 2 if(add_cnt >= avg_cnt) + 342 2 { + 343 3 add_cnt=0; + 344 3 average(); + 345 3 if(!start_flag)filter(); + 346 3 //process(); + 347 3 } + 348 2 } + 349 1 EX0 = 1; + 350 1 } + 351 //=============================================================================================== + 352 #ifdef _4x4_key + 353 void timer1_isr(void) interrupt 3 + 354 { + 355 1 TR1=0; + 356 1 KeyPressed=Read_Keypad(); + 357 1 TL1=0x66; + 358 1 //TH1=0xFc; + 359 1 TH1=0x32; + 360 1 TR1=1; + 361 1 } + 362 #endif + 363 //=============================================================================================== + 364 void read_values(void) + 365 { + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 7 + + 366 1 unsigned char dat; + 367 1 + 368 1 //write_RTC(RTC_MEM_start_status,0x00); //pause auto start when power failure + 369 1 start_status=0; + 370 1 + 371 1 dat=read_RTC(RTC_MEM_Auto_start_enable); //Auto start Enable / Disable. + 372 1 if(dat==1)auto_start=1; + 373 1 else auto_start=0; + 374 1 + 375 1 dat=read_RTC(RTC_MEM_recipe_enable); //Recipe enable/disabled + 376 1 if(dat==1)recipe=1; + 377 1 else recipe=0; + 378 1 + 379 1 dat=read_RTC(RTC_MEM_Instant_fill_enable); //instant fillset entry enabled/disabled + 380 1 if(dat==1)Instant_fill_enable=1; + 381 1 else Instant_fill_enable=0; + 382 1 + 383 1 //if(!recipe)function=1; + 384 1 if(!recipe)write_RTC(RTC_MEM_current_recipe,0x01); + 385 1 function = read_RTC(RTC_MEM_current_recipe); + 386 1 + 387 1 dat=read_RTC(RTC_MEM_gross_weight_enable); //Gross weight display enable/disable + 388 1 if(dat==1)grwt=1; + 389 1 else grwt=0; + 390 1 + 391 1 start_delay = read_RTC(RTC_MEM_start_delay); + 392 1 + 393 1 dat=read_RTC(RTC_MEM_batch_set_enable); //Batch filling set enabled/disabled + 394 1 if(dat==1)bset_enable=1; + 395 1 else bset_enable=0; + 396 1 bset=read_RTC(RTC_MEM_batch_set_MSB)*100 + read_RTC(RTC_MEM_batch_set_LSB); //batch set(no.of filling to + -be done) + 397 1 rst_wdt(); + 398 1 //------------------------------------------------------------------------------------ + 399 1 if(function>0 && function<=9) {EEPROM_block = Block_0;dat = function;} + 400 1 else if(function>9 && function<=18) {EEPROM_block = Block_1;dat=(function-9);} + 401 1 else if(function>18 && function<=27) {EEPROM_block = Block_2;dat=(function-18);} + 402 1 else if(function>27 && function<=36) {EEPROM_block = Block_3;dat=(function-27);} + 403 1 //-------------------------------------------------------------------------------------- + 404 1 if(Instant_fill_enable) //if instant fillset entry enabled + 405 1 fillset=read_RTC(RTC_fillset_MSB) *0x100 + read_RTC(RTC_fillset_LSB); + 406 1 else //if instant fillset entry disabled + 407 1 fillset=read_eeprom(0x10*dat) *0x100 + read_eeprom((0x10*dat)+0x01); + 408 1 + 409 1 cf=read_eeprom((0x10*dat)+0x02) *0x100 + read_eeprom((0x10*dat)+0x03); + 410 1 ffd=read_eeprom((0x10*dat)+0x04) *0x100 + read_eeprom((0x10*dat)+0x05); + 411 1 nfl=read_eeprom((0x10*dat)+0x06) *0x100 + read_eeprom((0x10*dat)+0x07); + 412 1 htar=read_eeprom((0x10*dat)+0x08) *0x100 + read_eeprom((0x10*dat)+0x09); + 413 1 ltar=read_eeprom((0x10*dat)+0x0A) *0x100 + read_eeprom((0x10*dat)+0x0B); + 414 1 dat=read_eeprom((0x10*dat)+0x0C); + 415 1 if(dat==0) ed=0; + 416 1 else ed=1; + 417 1 //----------------------------------------------------------------------- + 418 1 EEPROM_block = Block_0; //Following parameters in block0 of EEPROM + 419 1 + 420 1 cal_val=read_eeprom(EE_cal_val_Mem_MSB)*0x100 + read_eeprom(EE_cal_val_Mem_LSB); + 421 1 zset=read_eeprom(EE_zset_Mem_MSB)*0x100 + read_eeprom(EE_zset_Mem_LSB); + 422 1 + 423 1 rng_val=read_eeprom(EE_rng_val_Mem); + 424 1 res=read_eeprom(EE_res_Mem); + 425 1 mas=read_eeprom(EE_mas_Mem); + 426 1 ztc=read_eeprom(EE_ztc_Mem); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 8 + + 427 1 dp_val=read_eeprom(EE_dp_val_mem); + 428 1 + 429 1 avg=read_eeprom(EE_avg_Mem); + 430 1 avg_cnt=3*(10-avg); + 431 1 rst_wdt(); + 432 1 div_factor=rng_array[rng_val][0]; + 433 1 mul_factor=rng_array[rng_val][1]; + 434 1 help_val=(rng_array[rng_val][2] * 1000) + (res * 9); + 435 1 //help_val=20090; + 436 1 + 437 1 wait_val=read_eeprom(EE_wait_val_Mem); + 438 1 drop_wait_val=read_eeprom(EE_drop_wait_val_Mem); + 439 1 //on_time=read_eeprom(EE_on_time_Mem) * 100; + 440 1 on_time=read_eeprom(EE_on_time_Mem) * 10; + 441 1 //---------------------------------------------------------------------- + 442 1 /*cfd1=fillset-ffd; + 443 1 cfd2=fillset-ffd; + 444 1 //ffd=fillset-ffd;*/ + 445 1 + 446 1 //cfd1=fillset-cf; + 447 1 cfd1=fillset-ffd; + 448 1 cfd2=fillset-ffd; + 449 1 + 450 1 start_wait_flag=0; + 451 1 } + 452 //============================================================================================= + 453 void self_test(void) + 454 { + 455 1 unsigned char dat,i; + 456 1 bit aok=0; + 457 1 + 458 1 disp(0x05,0x0e,0x16,0x0f,0x14,0x0e,0x05,0x14); + 459 1 delay(500); + 460 1 //-------------------------------------------- + 461 1 //EEPROM test + 462 1 disp(0x11,0x1a,0x0e,0x1a,0x17,0x13,0x1c,0x11); + 463 1 delay(500); + 464 1 dat=read_eeprom(EE_test_loc_Mem); + 465 1 if(dat==test_loc) + 466 1 disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS" + 467 1 else + 468 1 { + 469 2 disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + 470 2 //defaults(); + 471 2 } + 472 1 delay(500); + 473 1 //-------------------------------------------- + 474 1 //RTC test + 475 1 disp(0x11,0x11,0x13,0x14,0x0C,0x11,0x11,0x11); + 476 1 delay(500); + 477 1 dat=read_RTC(RTC_MEM_status); + 478 1 if(dat==test_loc) + 479 1 disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS" + 480 1 else + 481 1 { + 482 2 disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + 483 2 //defaults(); + 484 2 } + 485 1 delay(500); + 486 1 //--------------------------------------------- + 487 1 //ADC test + 488 1 disp(0x11,0x11,0x0a,0x0d,0x0c,0x11,0x11,0x11); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 9 + + 489 1 //delay(1000); + 490 1 aco=0; + 491 1 for(i=0;i<255;i++) + 492 1 { + 493 2 if(aco) + 494 2 { + 495 3 aco=0; + 496 3 aok=1; + 497 3 } + 498 2 delay(4); + 499 2 } + 500 1 if(aok) + 501 1 { + 502 2 disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS" + 503 2 adc_err=0; + 504 2 } + 505 1 else + 506 1 { + 507 2 disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + 508 2 adc_err=1; + 509 2 } + 510 1 delay(500); + 511 1 } + 512 //======================================================================================= + 513 void disp_check(void) + 514 { + 515 1 char i; + 516 1 for(i=0;i<10;i++) + 517 1 { + 518 2 disp(i,i,i,i,i,i,i,i); + 519 2 delay(200); + 520 2 } + 521 1 } + 522 //====================================================================================== + 523 void defaults(void) + 524 { + 525 1 fillset=1000; + 526 1 //cf=800; + 527 1 //ffd=950; + 528 1 cf=200; + 529 1 ffd=50; + 530 1 nfl=0; + 531 1 zset=10; + 532 1 htar=100; + 533 1 ltar=0; + 534 1 ed=1; + 535 1 avg=9; + 536 1 avg_cnt=3*(10-avg); + 537 1 + 538 1 // cal_val=0x2710; + 539 1 + 540 1 //RCAP2L=clk_array[spd]; + 541 1 + 542 1 rng_val=1; //2 for 20 Kg,4 for 50 Kg. + 543 1 res=05; + 544 1 mas=1; + 545 1 ztc=1; + 546 1 dp_val=4; + 547 1 + 548 1 div_factor=rng_array[rng_val][0]; + 549 1 mul_factor=rng_array[rng_val][1]; + 550 1 //help_val=20090; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 10 + + 551 1 help_val=(rng_array[rng_val][2] * 1000) + (res * 9); + 552 1 + 553 1 /*cfd1=cf; + 554 1 cfd2=cf; + 555 1 ffd=cf;*/ + 556 1 + 557 1 wait_val=3; + 558 1 drop_wait_val=2; + 559 1 on_time=30; + 560 1 } + 561 //======================================================================================= + 562 void load_eep_defaults(void) + 563 { + 564 1 unsigned char rcpe=0,dat=0x01; + 565 1 disp(0x0d,0x0e,0x0f,0x0a,0x1b,0x16,0x14,0x05); + 566 1 delay(3000); + 567 1 defaults(); + 568 1 disp(0x16,0x17,0x0a,0x0d,0x01,0x18,0x09,0x10); + 569 1 write_eeprom(EE_test_loc_Mem,test_loc); + 570 1 write_RTC(RTC_MEM_current_recipe,0x01); + 571 1 //------------------------------------------------------------- + 572 1 for(rcpe=1;rcpe<=36;rcpe++) + 573 1 { + 574 2 if(rcpe>0 && rcpe<=9) {EEPROM_block = Block_0; dat=rcpe;} + 575 2 else if(rcpe>9 && rcpe<=18) {EEPROM_block = Block_1; dat=(rcpe-9);} + 576 2 else if(rcpe>18 && rcpe<=27) {EEPROM_block = Block_2; dat=(rcpe-18);} + 577 2 else if(rcpe>27 && rcpe<=36) {EEPROM_block = Block_3; dat=(rcpe-27);} + 578 2 + 579 2 write_eeprom((0x10*dat),fillset / 0x100); + 580 2 write_eeprom((0x10*dat)+0x01,fillset % 0x100); + 581 2 write_eeprom((0x10*dat)+0x02,cf / 0x100); + 582 2 write_eeprom((0x10*dat)+0x03,cf % 0x100); + 583 2 write_eeprom((0x10*dat)+0x04,ffd / 0x100); + 584 2 write_eeprom((0x10*dat)+0x05,ffd % 0x100); + 585 2 write_eeprom((0x10*dat)+0x06,nfl / 0x100); + 586 2 write_eeprom((0x10*dat)+0x07,nfl % 0x100); + 587 2 write_eeprom((0x10*dat)+0x08,htar / 0x100); + 588 2 write_eeprom((0x10*dat)+0x09,htar % 0x100); + 589 2 write_eeprom((0x10*dat)+0x0A,ltar / 0x100); + 590 2 write_eeprom((0x10*dat)+0x0B,ltar % 0x100); + 591 2 write_eeprom((0x10*dat)+0x0C,0x01); + 592 2 blink(7,1); + 593 2 rst_wdt(); + 594 2 } + 595 1 //-------------------------------------------------------------------- + 596 1 EEPROM_block = Block_0; //following values store in first 16 bytes of block0 + 597 1 + 598 1 write_eeprom(EE_zset_Mem_MSB,zset / 0x100); + 599 1 write_eeprom(EE_zset_Mem_LSB,zset % 0x100); + 600 1 + 601 1 write_eeprom(EE_rng_val_Mem,rng_val); + 602 1 write_eeprom(EE_res_Mem,res); + 603 1 write_eeprom(EE_mas_Mem,mas); + 604 1 write_eeprom(EE_ztc_Mem,ztc); + 605 1 write_eeprom(EE_dp_val_mem,dp_val); + 606 1 write_eeprom(EE_avg_Mem,avg); + 607 1 + 608 1 // write_eeprom(EE_cal_val_Mem_MSB,0x27); + 609 1 // write_eeprom((EE_cal_val_Mem_LSB),0x10); + 610 1 + 611 1 write_eeprom(EE_wait_val_Mem,wait_val); + 612 1 write_eeprom(EE_drop_wait_val_Mem,drop_wait_val); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 11 + + 613 1 write_eeprom(EE_on_time_Mem,on_time); + 614 1 //---------------------------------------------------------------- + 615 1 write_RTC(RTC_MEM_Auto_start_enable,0x00); //Auto start disable + 616 1 write_RTC(RTC_MEM_recipe_enable,0x00); //Recipe disable + 617 1 write_RTC(RTC_MEM_gross_weight_enable,0x00); //Gross weight display disable + 618 1 write_RTC(RTC_MEM_start_delay,0x37); //Auto start delay + 619 1 write_RTC(RTC_MEM_batch_set_enable,0x00);//Batch filling disabled + 620 1 write_RTC(RTC_MEM_status,test_loc); //RTC_memory status + 621 1 write_RTC(RTC_MEM_Instant_fill_enable,0x00);//Instant filling disabled + 622 1 //---------------------------------------------------------------- + 623 1 read_values(); + 624 1 clr_disp(); + 625 1 } + 626 //======================================================================================= + 627 void add_values(void) + 628 { + 629 1 add_adc = add_adc + adc_val; + 630 1 } + 631 //======================================================================================= + 632 void average(void) + 633 { + 634 1 filter_val = add_adc / avg_cnt; + 635 1 add_adc=0; + 636 1 } + 637 //======================================================================================= + 638 void filter(void) + 639 { + 640 1 unsigned char i; + 641 1 bit ave_ok=1; + 642 1 + 643 1 for(i=4;i>0;i--) prev_val[i]=prev_val[i-1]; + 644 1 prev_val[0]=filter_val; + 645 1 + 646 1 for(i=0;i<4;i++) + 647 1 { + 648 2 if(abs(prev_val[i] - prev_val[i+1]) > 5) ave_ok=0; + 649 2 } + 650 1 + 651 1 if(ave_ok) + 652 1 { + 653 2 temp=0; + 654 2 for(i=0;i<5;i++) temp = temp + (long int)prev_val[i]; + 655 2 temp = temp / 0x05; + 656 2 filter_val = (unsigned int)temp; + 657 2 } + 658 1 } + 659 //====================================================================================== + 660 void process(void) + 661 { + 662 1 /*temp=(unsigned long int)filter_val * (unsigned long int)mul_factor; + 663 1 temp=temp / (unsigned long int)div_factor; + 664 1 temp=temp/10; + 665 1 scale_val = (unsigned int)temp;*/ + 666 1 scale_val = filter_val; + 667 1 tare_chk(); + 668 1 rst_wdt(); + 669 1 zero_track(); + 670 1 if(!c_flag) + 671 1 { + 672 2 cal_find(); + 673 2 calibrate(); + 674 2 } + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 12 + + 675 1 if(disp_val > help_val && autotare) + 676 1 { + 677 2 dp_flag=0; + 678 2 rst_wdt(); + 679 2 help_flag=1; + 680 2 disp(0x11,0x11,0x15,0x0e,0x16,0x12,0x11,0x11); //"Help" + 681 2 blink(0,8); + 682 2 dp_flag=1; + 683 2 } + 684 1 else help_flag=0; + 685 1 + 686 1 if(adc_err) + 687 1 { + 688 2 dp_flag=0; + 689 2 rst_wdt(); + 690 2 help_flag=1; + 691 2 disp(0x11,0x0a,0x0d,0x0c,0x11,0x0e,0x13,0x13); //"ADC err" + 692 2 blink(0,8); + 693 2 dp_flag=1; + 694 2 } + 695 1 } + 696 //==================================================================================== + 697 void tare_chk(void) + 698 { + 699 1 if(tare_flag) //tare switch.. + 700 1 { + 701 2 tare_val=scale_val; + 702 2 tare_pol=adc_pol; + 703 2 if(++tare_cnt>3) + 704 2 { + 705 3 tare_flag=0; + 706 3 tare_cnt=0; + 707 3 } + 708 2 } + 709 1 + 710 1 // Deducting tare value. + 711 1 + 712 1 if(tare_pol != adc_pol) + 713 1 { + 714 2 disp_val = scale_val + tare_val; + 715 2 disp_pol = adc_pol; + 716 2 } + 717 1 else + 718 1 { + 719 2 if(scale_val > tare_val) + 720 2 { + 721 3 disp_pol = adc_pol; + 722 3 disp_val = scale_val - tare_val; + 723 3 } + 724 2 else + 725 2 { + 726 3 disp_pol = ~(adc_pol); + 727 3 disp_val = tare_val - scale_val; + 728 3 } + 729 2 } + 730 1 + 731 1 /* if(scale_val >= tare_val) + 732 1 { + 733 1 disp_pol = 1; + 734 1 disp_val = scale_val - tare_val; + 735 1 } + 736 1 else + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 13 + + 737 1 { + 738 1 disp_pol = 0; + 739 1 disp_val = tare_val - scale_val; + 740 1 }*/ + 741 1 + 742 1 } + 743 //================================================================================== + 744 void zero_track(void) + 745 { + 746 1 if(disp_val <= ztc) ztwc++; + 747 1 else ztwc = 0; + 748 1 + 749 1 if(ztwc > 3) + 750 1 { + 751 2 tare_val = scale_val; + 752 2 tare_pol = adc_pol; + 753 2 ztwc = 0; + 754 2 } + 755 1 } + 756 //================================================================================= + 757 void bin2bcd(unsigned int value,char no) + 758 { + 759 1 char i; // Converts a bin value to bcd & display. + 760 1 // char no determines how many digits to be + 761 1 for(i=7;i>=(8-no);i--) // displayed. + 762 1 { + 763 2 disp_data[i]=value % 10; + 764 2 value=value / 10; + 765 2 } + 766 1 display(); + 767 1 } + 768 //================================================================================= + 769 void display_value(void) + 770 { + 771 1 unsigned int value; + 772 1 char i; // Converts a bin value to bcd & display. + 773 1 // char no determines how many digits to be + 774 1 // displayed. + 775 1 //disp_val=(disp_val/res)*res; + 776 1 //value=disp_val; + 777 1 value=(disp_val/res)*res; + 778 1 for(i=7;i>=3;i--) + 779 1 { + 780 2 disp_data[i]=value % 10; + 781 2 value=value / 10; + 782 2 } + 783 1 + 784 1 if(disp_data[3]==0x00)disp_data[3]=0x11; + 785 1 if(disp_pol) disp_data[3]=0x10; //"-" sign + 786 1 + 787 1 disp_data[7] = (disp_data[7] / res) * res; + 788 1 + 789 1 if(disp_val <= (mas * res)) + 790 1 { + 791 2 disp_data[7]=0x00; + 792 2 disp_data[6]=0x00; + 793 2 disp_data[3]=0x11; + 794 2 disp_pol=0; + 795 2 } + 796 1 if(disp_val==0x00) + 797 1 { + 798 2 disp_data[0]=0x11; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 14 + + 799 2 disp_data[1]=0x11; + 800 2 disp_data[2]=0x11; + 801 2 disp_data[3]=0x11; + 802 2 } + 803 1 + 804 1 if(cf1_flag) + 805 1 { + 806 2 disp_data[0]=0x0c; + 807 2 disp_data[1]=0x01; // Display "CF1". + 808 2 disp_data[2]=0x11; + 809 2 } + 810 1 else if(cf2_flag) + 811 1 { + 812 2 disp_data[0]=0x0c; + 813 2 disp_data[1]=0x02; // Display "CF2". + 814 2 disp_data[2]=0x11; + 815 2 } + 816 1 else if(ff_flag) + 817 1 { + 818 2 disp_data[0]=0x0f; + 819 2 disp_data[1]=0x0f; + 820 2 disp_data[2]=0x11; // Display "FF". + 821 2 } + 822 1 else if(start_wait_flag && !wa_flag) + 823 1 { + 824 2 disp_data[0]=0x0A; + 825 2 disp_data[1]=0x05; // Display "ast". + 826 2 disp_data[2]=0x14; + 827 2 } + 828 1 else if(wa_flag) + 829 1 { + 830 2 if(grwt && grwt_ok) //Gross weight display + 831 2 { + 832 3 disp_data[0]=0x19; + 833 3 disp_data[1]=0x1D; // Display "Gross weight". + 834 3 disp_data[2]=0x14; + 835 3 } + 836 2 else + 837 2 { + 838 3 disp_data[0]=0x05; + 839 3 disp_data[1]=0x0a; // Display "SA". + 840 3 disp_data[2]=0x11; + 841 3 } + 842 2 } + 843 1 else + 844 1 { + 845 2 if(!recipe) + 846 2 { + 847 3 disp_data[0]=0x13; + 848 3 disp_data[1]=0x0d; // Display "RDY". + 849 3 disp_data[2]=0x1c; + 850 3 } + 851 2 else + 852 2 { + 853 3 //disp_data[1]=function; // Display "F1 ~ F5". + 854 3 //disp_data[2]=0x11; + 855 3 if(function<=9) + 856 3 { + 857 4 disp_data[0]=0x0F; //Display "F" + 858 4 disp_data[1]=function % 10; + 859 4 //disp_data[0]=function / 10; + 860 4 disp_data[2]=0x11; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 15 + + 861 4 } + 862 3 else + 863 3 { + 864 4 disp_data[1]=function % 10; + 865 4 disp_data[0]=function / 10; + 866 4 disp_data[2]=0x0F; //Display "F" + 867 4 //disp_data[2]=0x1E; //Display "=" + 868 4 } + 869 3 } + 870 2 } + 871 1 display(); + 872 1 } + 873 //========================================================================================== + 874 void check_keypad(void) // Keypad checking routine. + 875 { + 876 1 unsigned char sdat=0,b=0; + 877 1 //----------------------------------------------------------------------- + 878 1 #ifdef _6_key + if(!shift_flag && !set && !process_flag) // SET key for value entry. + #elif defined( _4x4_key ) + 881 1 if(!shift_flag && KeyPressed==set && !process_flag) + 882 1 #endif + 883 1 { // Asks password,go to appropriate routines + 884 2 dp_flag=0; // on entry of password. + 885 2 rst_wdt(); + 886 2 pwd(); + 887 2 rst_wdt(); + 888 2 arr_cpy(&temp_pwd[0],&disp_data[6],2); + 889 2 // arr_cpy(&temp_pwd[0],&disp_data[4],4); + 890 2 //if(arr_cmp(pswd1,temp_pwd,4)&& !recipe) menu(); //Pswd. 36 (if recipe disabled) + 891 2 #ifdef _6_key + if(arr_cmp(pswd1,temp_pwd,2))do{if(recipe)recipe_menu(); if(!mode){while(!mode){dp_flag=1;}return;} menu + -();if(!recipe)return;}while(mode); + #elif defined( _4x4_key ) + 894 2 // if(arr_cmp(pswd1,temp_pwd,2))do{if(recipe)recipe_menu(); if(KeyPressed==mode){while(KeyPressed==mode){ + -dp_flag=1;}return;} menu();if(!recipe)return;}while(KeyPressed!=mode); + 895 2 if(arr_cmp(pswd1,temp_pwd,2))do{if(recipe)recipe_menu(); if(KeyPressed==mode){while(KeyPressed==mode){ K + -eyPressed = 'X'; dp_flag=1;}return;} menu();if(!recipe)return;}while(KeyPressed!=mode); + 896 2 + 897 2 #endif + 898 2 else if(arr_cmp(pswd2,temp_pwd,2)) cal(); //Pswd. 63 + 899 2 // else if(arr_cmp(pswd3,temp_pwd,2)) cal_rst(); //Pswd. 19 + 900 2 // else if(arr_cmp(pswd3,temp_pwd,2)) memory_backup_restore(); //Pswd. 19 + 901 2 else if(arr_cmp(pswd4,temp_pwd,2)) settings(); //Pswd. 91 + 902 2 else if(arr_cmp(pswd5,temp_pwd,2)) sys_paramts(); //Pswd. 28 + 903 2 else if(arr_cmp(pswd6,temp_pwd,2)) load_eep_defaults(); //Pswd. 82 + 904 2 else if(arr_cmp(pswd7,temp_pwd,2)) select_menu(); //Pswd. 55 + - + 905 2 else if(arr_cmp(pswd8,temp_pwd,2)) display_total_cumulative(); //Pswd. 11 + 906 2 else if(arr_cmp(pswd9,temp_pwd,2)) display_current_batch(); //Pswd. 22 + 907 2 else if(arr_cmp(pswd10,temp_pwd,2)) clear_current_cumulative_batch(); //Pswd. 77 + 908 2 else if(arr_cmp(pswd11,temp_pwd,2)) display_current_cumulative(); //Pswd. 66 + 909 2 else if(arr_cmp(pswd12,temp_pwd,2)) clear_batch_cumulative(); //Pswd. 33 + 910 2 else if(arr_cmp(pswd13,temp_pwd,2)) display_total_batch(); //Pswd. 44 + 911 2 else if(arr_cmp(pass_F1,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x01); menu();}} //P + -swd. 10 + 912 2 else if(arr_cmp(pass_F2,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x02); menu();}} //P + -swd. 20 + 913 2 else if(arr_cmp(pass_F3,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x03); menu();}} //P + -swd. 30 + 914 2 else if(arr_cmp(pass_F4,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x04); menu();}} //P + -swd. 40 + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 16 + + 915 2 else if(arr_cmp(pass_F5,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x05); menu();}} //P + -swd. 50 + 916 2 else if(arr_cmp(pass_F6,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x06); menu();}} //P + -swd. 60 + 917 2 else if(arr_cmp(pass_F7,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x07); menu();}} //P + -swd. 70 + 918 2 else if(arr_cmp(pass_F8,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x08); menu();}} //P + -swd. 80 + 919 2 else if(arr_cmp(pass_F9,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x09); menu();}} //P + -swd. 90 + 920 2 else if(arr_cmp(pass_F10,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x0A); menu();}} //Ps + -wd. 99 + 921 2 + 922 2 else disp(0x11,0x11,0x0e,0x13,0x13,0x17,0x13,0x11); //"error" + 923 2 delay(1000); // Don't check for SET & TARE sw while in start + 924 2 clr_disp(); // mode. + 925 2 dp_flag=1; + 926 2 } + 927 1 rst_wdt(); + 928 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 929 1 //tare switch pressed + 930 1 #ifdef _6_key + if(!tare && !process_flag) + #elif defined( _4x4_key ) + 933 1 if(KeyPressed == tare && !process_flag) + 934 1 #endif + 935 1 { + 936 2 disp(0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10); //"-----" + 937 2 #ifdef _6_key + while(!tare) {delay(2);} + #elif defined( _4x4_key )// {delay(2);} + 940 2 while(KeyPressed == tare) {delay(2);} + 941 2 #endif + 942 2 tare_flag=1; + 943 2 } + 944 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 945 1 //Instant fillset direct entry option + 946 1 #ifdef _6_key + if(!shift_flag && !decr && !process_flag) //fillset direct entry + #elif defined( _4x4_key ) + 949 1 if(!shift_flag && KeyPressed == decr && !process_flag) + 950 1 #endif + 951 1 { + 952 2 shift_flag=0; + 953 2 if(Instant_fill_enable) + 954 2 { + 955 3 disp(0x0F,0x01,0x16,0x00,0x00,0x00,0x00,0x00); + 956 3 bin2bcd(fillset,5); // Fill set + 957 3 delay(500); + 958 3 val_read(5); + 959 3 temp=bcd2bin(5); + 960 3 //if(t<=15000) + 961 3 if(temp > (rng_array[rng_val][2] * 1000) ) + 962 3 { + 963 4 disp(0x11,0x11,0x0e,0x13,0x13,0x17,0x13,0x11); + 964 4 delay(1000); + 965 4 clr_disp(); + 966 4 } + 967 3 else + 968 3 { + 969 4 start_status=0; //TO STOP AUTO START AND TO READ FULL VALUR FROM EEPROM + 970 4 fillset=(temp/res)*res; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 17 + + 971 4 write_RTC(RTC_fillset_MSB,fillset/0x100); + 972 4 write_RTC(RTC_fillset_LSB,fillset%0x100); + 973 4 } + 974 3 } + 975 2 } + 976 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 977 1 //shift key pressed and press "set" or "enter" or "dec" key for short cut + 978 1 #ifdef _6_key + if(!incr && !process_flag && !shift_flag) + #elif defined( _4x4_key ) + 981 1 if(KeyPressed == incr && !process_flag && !shift_flag) + 982 1 #endif + 983 1 { + 984 2 shift_flag=1; + 985 2 #ifdef _6_key + while(!incr) + #elif defined( _4x4_key ) + 988 2 while(KeyPressed == incr) + 989 2 #endif + 990 2 {delay(2);} + 991 2 } + 992 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 993 1 //Shift and set key for Set fill parameters. + 994 1 #ifdef _6_key + if(shift_flag && !set && !process_flag) + #elif defined( _4x4_key ) + 997 1 if(shift_flag && KeyPressed == set && !process_flag) + 998 1 #endif + 999 1 { +1000 2 #ifdef _6_key + while(!set) + #elif defined( _4x4_key ) +1003 2 while(KeyPressed == set) +1004 2 #endif +1005 2 {delay(2);} +1006 2 shift_flag=0; +1007 2 sys_paramts(); +1008 2 } +1009 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1010 1 //Set batch count to be filled. shift and enter +1011 1 #ifdef _6_key + if(shift_flag && !enter && !process_flag && bset_enable) + #elif defined( _4x4_key ) +1014 1 if(shift_flag && KeyPressed == enter && !process_flag && bset_enable) +1015 1 #endif +1016 1 { +1017 2 shift_flag=0; +1018 2 dp_flag=0; +1019 2 disp(0x0B,0x05,0x0E,0x14,0x11,0x11,0x11,0x11); //"bset" +1020 2 bset=read_RTC(RTC_MEM_batch_set_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_LSB); +1021 2 bin2bcd(bset,4); +1022 2 delay(500); +1023 2 val_read(4); +1024 2 bset = bcd2bin(4); +1025 2 +1026 2 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +1029 2 if(KeyPressed == mode) return; +1030 2 #endif +1031 2 +1032 2 #ifdef _6_key + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 18 + + if(set) + #elif defined( _4x4_key ) +1035 2 if(KeyPressed == enter) +1036 2 //if(KeyPressed != set) +1037 2 #endif +1038 2 { +1039 3 write_RTC(RTC_MEM_batch_set_MSB,bset / 0x100); //bset value fixed memory +1040 3 write_RTC(RTC_MEM_batch_set_LSB,bset % 0x100); +1041 3 +1042 3 write_RTC(RTC_MEM_batch_set_count_MSB,bset / 0x100); //count down bset memory +1043 3 write_RTC(RTC_MEM_batch_set_count_LSB,bset % 0x100); +1044 3 } +1045 2 dp_flag=1; +1046 2 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +1049 2 while(KeyPressed == enter) +1050 2 #endif +1051 2 {delay(2);} +1052 2 } +1053 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1054 1 //Recipe selection. Only mode key press +1055 1 #ifdef _6_key + //if(!mode && !process_flag && recipe) + if(!mode && !process_flag && recipe && !start_status) + #elif defined( _4x4_key ) +1059 1 //if(KeyPressed == mode && !process_flag && recipe) +1060 1 if(KeyPressed == mode && !process_flag && recipe && !start_status) +1061 1 #endif +1062 1 { +1063 2 rtn: +1064 2 function = read_RTC(RTC_MEM_current_recipe); +1065 2 shift_flag=0; +1066 2 if(function<1)function=1; +1067 2 disp(function/10,function%10,0x0F,0x11,0x11,0x11,0x11,0x11); +1068 2 //disp(function/10,function%10,0x1E,0x11,0x11,0x11,0x11,0x11); //"01=" +1069 2 delay(500); +1070 2 b=1; +1071 2 //b=0; +1072 2 dp_flag=1; +1073 2 #ifdef _6_key + while(enter && set) + #elif defined( _4x4_key ) +1076 2 while(KeyPressed != enter && KeyPressed != set) +1077 2 #endif +1078 2 { +1079 3 //blink(1,2); +1080 3 //disp_data[1]=incdec(disp_data[1],5,1); +1081 3 blink(b,1); +1082 3 disp_data[b]=incdec(disp_data[b],9,0); +1083 3 //dat = (char)bcd2bin(2); +1084 3 //sdat = ((disp_data[1] & 0x0F) << 4 ) + (disp_data[2] & 0x0F); +1085 3 sdat = ((disp_data[0] & 0x0F) << 4 ) + (disp_data[1] & 0x0F); +1086 3 sdat = bcd2int(sdat); +1087 3 +1088 3 #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) +1091 3 if(('S' == KeyPressed) || (KeyPressed == tare)) +1092 3 #endif +1093 3 { // blinking digit to right. +1094 4 b++; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 19 + +1095 4 //if(b>7) b=8-2; +1096 4 //if(b>2) b=1; +1097 4 if(b>1) b=0; +1098 4 #ifdef _4x4_key +1099 4 KeyPressed = 'X'; //clear keyPressed +1100 4 #endif +1101 4 } +1102 3 #ifdef _4x4_key +1103 3 //if(sdat > 36){disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11);delay(500);sdat=1;goto rtn;} +1104 3 if(sdat > 36){disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11);delay(500);sdat=36;} //"error" +1105 3 #endif +1106 3 delay(100); +1107 3 if(sdat>0 && sdat<=9) +1108 3 {EEPROM_block = Block_0;fillset=read_eeprom((0x10*sdat)) *0x100 + read_eeprom((0x10*sdat)+0x01);} +1109 3 else if(sdat>9 && sdat<=18) +1110 3 {EEPROM_block = Block_1;fillset=read_eeprom(0x10*(sdat-9)) *0x100 + read_eeprom((0x10*(sdat-9))+0x + -01);} +1111 3 else if(sdat>18 && sdat<=27) +1112 3 {EEPROM_block = Block_2;fillset=read_eeprom(0x10*(sdat-18)) *0x100 + read_eeprom((0x10*(sdat-18))+ + -0x01);} +1113 3 else if(sdat>27 && sdat<=36) +1114 3 {EEPROM_block = Block_3;fillset=read_eeprom(0x10*(sdat-27)) *0x100 + read_eeprom((0x10*(sdat-27))+ + -0x01);} +1115 3 bin2bcd(fillset,5); // display selected receipe Fill set +1116 3 } +1117 2 #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) +1120 2 if(KeyPressed == enter) +1121 2 #endif +1122 2 { +1123 3 if(sdat>36 || sdat<1) +1124 3 { +1125 4 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); //"error" +1126 4 delay(500); +1127 4 sdat = 36; +1128 4 goto rtn; +1129 4 } +1130 3 else +1131 3 { +1132 4 write_RTC(RTC_MEM_current_recipe,(sdat*0x01)); +1133 4 function = read_RTC(RTC_MEM_current_recipe); +1134 4 read_values(); +1135 4 delay(500); +1136 4 } +1137 3 } +1138 2 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +1141 2 while(KeyPressed == enter) +1142 2 #endif +1143 2 {delay(2);} +1144 2 } +1145 1 //------------------------------------------------- +1146 1 // display batch_count left to be filled +1147 1 #ifdef _6_key + if(shift_flag && !decr && !process_flag && bset_enable) + #elif defined( _4x4_key ) +1150 1 if(shift_flag && KeyPressed == decr && !process_flag && bset_enable) +1151 1 #endif +1152 1 { +1153 2 dp_flag=0; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 20 + +1154 2 batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_count_LSB); +1155 2 disp(0x0B,0x0C,0x18,0x14,0x11,0x11,0x11,0x11); //"bcnt" +1156 2 bin2bcd(batch_count,4); +1157 2 delay(3000); +1158 2 dp_flag=1; +1159 2 } +1160 1 //------------------------------------------------- +1161 1 // display current batch number filled +1162 1 #ifdef _6_key + if(!shift_flag && !decr && !process_flag && !Instant_fill_enable && bset_enable) + #elif defined( _4x4_key ) +1165 1 if(!shift_flag && KeyPressed == decr && !process_flag && !Instant_fill_enable && bset_enable) +1166 1 #endif +1167 1 { +1168 2 display_current_batch(); +1169 2 } +1170 1 } +1171 //======================================================================================================== + -====== +1172 void check_switch(void) +1173 { +1174 1 unsigned char dat=0,stop=0; +1175 1 +1176 1 if(set_enter_flag){read_values(); set_enter_flag=0;} //If entered any settings read all values +1177 1 bgn: +1178 1 //if(start_flag) // if filling or auto start +1179 1 #ifdef _6_key + if((start_flag || start_status) && (!mode)) + #elif defined( _4x4_key ) +1182 1 if((start_flag || start_status) && (KeyPressed==mode)) +1183 1 #endif +1184 1 { +1185 2 hold_counter++; +1186 2 +1187 2 if (hold_counter >= 1200) +1188 2 { +1189 3 +1190 3 dp_flag=0; +1191 3 disp(0x0A,0x0B,0x17,0x13,0x14,0x11,0x11,0x11); // "Abort" +1192 3 ff=0; +1193 3 cf1=0; +1194 3 cf2=0; +1195 3 waled=0; +1196 3 cf1_flag=0; +1197 3 cf2_flag=0; +1198 3 ff_flag=0; +1199 3 wa_flag=0; +1200 3 start_flag=0; +1201 3 drop_flag=0; +1202 3 tare_val=temp_tare; +1203 3 +1204 3 avg_cnt=3*(10-avg); +1205 3 add_cnt=0; +1206 3 add_adc=0; +1207 3 +1208 3 process_flag=0; +1209 3 //write_RTC(RTC_MEM_start_status,0x00); //pause auto start +1210 3 start_status=0; +1211 3 disp(0x0A,0x0B,0x17,0x13,0x14,0x0E,0x0D,0x11); // "Aborted" +1212 3 delay(2000); +1213 3 dp_flag=1; +1214 3 + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 21 + +1215 3 +1216 3 while (Read_Keypad() == mode); +1217 3 hold_counter = 0; // Reset counter for next press +1218 3 } +1219 2 +1220 2 } +1221 1 else // if not filling +1222 1 { +1223 2 hold_counter = 0; +1224 2 +1225 2 +1226 2 // Manual start Only first time after power on in auto mode +1227 2 //if(auto_start && !process_flag &&(read_RTC(RTC_MEM_start_status)==0x00)) +1228 2 if(auto_start && !process_flag && !start_status) +1229 2 { +1230 3 //dp_flag=0; +1231 3 //disp(0x11,0x05,0x14,0x0A,0x13,0x14,0x11,0x11); //start +1232 3 //blink(0,8); +1233 3 start_wait_flag=1; +1234 3 if(!start) // if start button pressed +1235 3 { +1236 4 read_values(); +1237 4 //start_wait_flag=0; +1238 4 if(bset_enable) {batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_ + -set_count_LSB);} +1239 4 +1240 4 if(batch_count<1 && bset_enable) +1241 4 { +1242 5 //disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x17,0x13); // batch over +1243 5 disp(0x0B,0x11,0x11,0x0e,0x13,0x13,0x11,0x11); //b err +1244 5 delay(1000); +1245 5 return; +1246 5 } +1247 4 //else if(batch_count>0 && bset_enable) start_wait_flag=0; +1248 4 //write_RTC(RTC_MEM_start_status,0x01); +1249 4 start_wait_flag=0; +1250 4 start_status=1; +1251 4 goto srt; +1252 4 } +1253 3 } +1254 2 // continuous auto start(filling) in auto mode if started +1255 2 //if(auto_start && !process_flag && (read_RTC(RTC_MEM_start_status) == 0x01)) +1256 2 if(auto_start && !process_flag && start_status) +1257 2 { +1258 3 if((disp_val <= htar && disp_val >= ltar) && !disp_pol) +1259 3 { +1260 4 if(start_count == 0) start_disp = disp_val; +1261 4 if(start_disp == disp_val)start_count++; +1262 4 else start_count = 0; +1263 4 if(start_count >= start_delay*4) +1264 4 { +1265 5 start_count = 0; +1266 5 goto srt; +1267 5 } +1268 4 } +1269 3 } +1270 2 //Manual start +1271 2 if(!start && !process_flag && !disp_pol) // Checking of Start button. +1272 2 { +1273 3 read_values(); +1274 3 if(bset_enable) {batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_c + -ount_LSB);} + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 22 + +1275 3 +1276 3 if(batch_count<1 && bset_enable) +1277 3 { +1278 4 //disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x17,0x13); // batch over +1279 4 disp(0x0B,0x11,0x11,0x0e,0x13,0x13,0x11,0x11); //b err +1280 4 delay(1000); +1281 4 return; +1282 4 } +1283 3 //srt: if(cf>=fillset || ffd>=fillset || nfl>=(fillset-ffd) || zset>=fillset || ltar>=htar) +1284 3 //srt:if(cf>=fillset || ffd>=cf || nfl>=ffd || zset>=fillset || ltar>=htar) +1285 3 srt:if(ffd>=fillset || nfl>=ffd || zset>=fillset || ltar>=htar) +1286 3 { +1287 4 rst_wdt(); +1288 4 dp_flag=0; +1289 4 disp(0x05,0x0e,0x14,0x11,0x0e,0x13,0x13,0x11); +1290 4 delay(500); +1291 4 dp_flag=1; +1292 4 //write_RTC(RTC_MEM_start_status,0x00);// Error in setting pause auto start +1293 4 start_status=0; +1294 4 goto bgn; +1295 4 } +1296 3 else +1297 3 { +1298 4 if(ed && (disp_val <= htar && disp_val >= ltar) && !disp_pol) +1299 4 { +1300 5 fill_start=1; // Condition for filling to be started. +1301 5 temp_tare=tare_val; // If in tare enable mode, store current +1302 5 tare_val=scale_val; // tare value in a temp loc and tare +1303 5 } // the display value. +1304 4 else if(!ed && !disp_pol) +1305 4 { +1306 5 fill_start=1; +1307 5 temp_tare=tare_val; +1308 5 } +1309 4 else fill_start=0; +1310 4 +1311 4 process(); //To calculate scale value using new tare value +1312 4 +1313 4 if(fill_start) +1314 4 { +1315 5 fill_start=0; +1316 5 start_flag=1; +1317 5 process_flag=1; +1318 5 delay(100); +1319 5 ff=1; +1320 5 delay(50); +1321 5 cf2=1; // Filling started.,CF1,CF2,FF all ON. +1322 5 delay(50); +1323 5 cf1=1; +1324 5 cf1_flag=1; +1325 5 cf2_flag=1; +1326 5 ff_flag=1; +1327 5 +1328 5 avg_cnt=1*(10-avg); +1329 5 add_cnt=0; // No averaging, since in course feed. +1330 5 add_adc=0; +1331 5 } +1332 4 else +1333 4 { +1334 5 dp_flag=0; +1335 5 disp(0x14,0x0a,0x13,0x0e,0x11,0x0e,0x13,0x13); +1336 5 delay(500); // Display tare error. + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 23 + +1337 5 dp_flag=1; +1338 5 } +1339 4 } +1340 3 } +1341 2 } +1342 1 } +1343 //======================================================================================= +1344 void check_values(void) +1345 { +1346 1 if(process_flag) +1347 1 { +1348 2 if(start_flag && !drop_flag && !disp_pol) +1349 2 { +1350 3 if(disp_val >= cfd1) //CF2 condition.(CF2 & FF ON, CF1 OFF) +1351 3 { +1352 4 cf1=0; // normal operation +1353 4 /*if(cf1_flag) +1354 4 { +1355 4 ff=0; +1356 4 }*/ +1357 4 cf1_flag=0; +1358 4 } +1359 3 if(disp_val >= cfd2) +1360 3 { // FF condition.(FF ON, CF1 & CF2 OFF) +1361 4 if(cf2_flag) +1362 4 { +1363 5 //avg_cnt=2*(10-avg); +1364 5 avg_cnt=1*(10-avg); +1365 5 add_cnt=0; // In FF 2 count averaging. +1366 5 add_adc=0; +1367 5 //ff=1; +1368 5 } +1369 4 cf1=0; +1370 4 cf2=0; // normal operation +1371 4 cf2_flag=0; +1372 4 } +1373 3 if((disp_val + nfl) >= fillset) +1374 3 { +1375 4 ff=0; +1376 4 wait_flag=1; +1377 4 } // Final value is reached.but, +1378 3 } +1379 2 +1380 2 if(wait_flag) // should wait for some time +1381 2 { // for liquid to be settled. +1382 3 wait_ctr++; +1383 3 //delay(10); //if necessary enable +1384 3 //if(wait_ctr >= wait_val*10) +1385 3 if(wait_ctr >= wait_val*100) +1386 3 { +1387 4 wait_ctr=0; +1388 4 drop_flag=1; +1389 4 wait_flag=0; +1390 4 } +1391 3 } +1392 2 +1393 2 if(drop_flag && !disp_pol) +1394 2 { +1395 3 /*if(disp_val < cfd2) // After waiting time if value is +1396 3 { // less than CF2 value,Turn ON CF2. +1397 3 cf1=0; +1398 3 cf1_flag=0; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 24 + +1399 3 cf2=1; +1400 3 cf2_flag=1; +1401 3 ff=1; +1402 3 ff_flag=1; +1403 3 drop_flag=0; +1404 3 } */ +1405 3 if((disp_val + nfl) < fillset) // After waiting time if value is +1406 3 { // less than FF value,Turn ON FF. +1407 4 ff=1; +1408 4 drop_flag=0; +1409 4 } +1410 3 else if(disp_val < fillset) +1411 3 { +1412 4 drop_ctr++; +1413 4 //if(drop_ctr >= drop_wait_val) +1414 4 if(drop_ctr >= drop_wait_val*100) +1415 4 { +1416 5 drop_ctr=0; // Else, +1417 5 ff=1; // Final stage of filling. +1418 5 delay(on_time); // Proceeds drop by drop for accuracy. +1419 5 ff=0; +1420 5 } +1421 4 } +1422 3 else +1423 3 { +1424 4 waled=1; +1425 4 wa_flag=1; // Weight is acheived. +1426 4 start_flag=0; +1427 4 drop_ctr=0; +1428 4 drop_flag=0; +1429 4 cf1=0; +1430 4 cf1_flag=0; +1431 4 cf2=0; +1432 4 cf2_flag=0; +1433 4 ff=0; +1434 4 ff_flag=0; +1435 4 wait_ctr=0; +1436 4 wait_flag=0; +1437 4 +1438 4 avg_cnt=3*(10-avg); +1439 4 add_cnt=0; +1440 4 add_adc=0; +1441 4 //------------------------batch set-------------------------------------------------------------- +1442 4 batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_count_LSB); +1443 4 batch_count--; +1444 4 write_RTC(RTC_MEM_batch_set_count_MSB,batch_count / 0x100); +1445 4 write_RTC(RTC_MEM_batch_set_count_LSB,batch_count % 0x100); +1446 4 //------------------------------------------------------------------------------------------------ +1447 4 if(function == 1) +1448 4 { +1449 5 cumulative = RTC_Readlong(RTC_MEM_F1_cumulative); +1450 5 cumulative = cumulative + (unsigned long)((disp_val/res)*res); +1451 5 if(cumulative > 99999999) cumulative = 0; +1452 5 //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; +1453 5 RTC_Writelong(RTC_MEM_F1_cumulative,cumulative); +1454 5 +1455 5 batch=read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(0x11); +1456 5 batch = batch + 1; +1457 5 write_RTC(RTC_MEM_F1_batch_MSB,batch / 0x100); +1458 5 write_RTC(RTC_MEM_F1_batch_LSB,batch % 0x100); +1459 5 } +1460 4 else if(function == 2) + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 25 + +1461 4 { +1462 5 cumulative = RTC_Readlong(RTC_MEM_F2_cumulative); +1463 5 cumulative = cumulative + (unsigned long)((disp_val/res)*res); +1464 5 if(cumulative > 99999999) cumulative = 0; +1465 5 //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; +1466 5 RTC_Writelong(RTC_MEM_F2_cumulative,cumulative); +1467 5 +1468 5 batch=read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB); +1469 5 batch = batch + 1; +1470 5 write_RTC(RTC_MEM_F2_batch_MSB,batch / 0x100); +1471 5 write_RTC(RTC_MEM_F2_batch_LSB,batch % 0x100); +1472 5 } +1473 4 else if(function == 3) +1474 4 { +1475 5 cumulative = RTC_Readlong(RTC_MEM_F3_cumulative); +1476 5 cumulative = cumulative + (unsigned long)((disp_val/res)*res); +1477 5 if(cumulative > 99999999) cumulative = 0; +1478 5 //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; +1479 5 RTC_Writelong(RTC_MEM_F3_cumulative,cumulative); +1480 5 +1481 5 batch=read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB); +1482 5 batch = batch + 1; +1483 5 write_RTC(RTC_MEM_F3_batch_MSB,batch / 0x100); +1484 5 write_RTC(RTC_MEM_F3_batch_LSB,batch % 0x100); +1485 5 } +1486 4 else if(function == 4) +1487 4 { +1488 5 cumulative = RTC_Readlong(RTC_MEM_F4_cumulative); +1489 5 cumulative = cumulative + (unsigned long)((disp_val/res)*res); +1490 5 if(cumulative > 99999999) cumulative = 0; +1491 5 //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; +1492 5 RTC_Writelong(RTC_MEM_F4_cumulative,cumulative); +1493 5 +1494 5 batch=read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB); +1495 5 batch = batch + 1; +1496 5 write_RTC(RTC_MEM_F4_batch_MSB,batch / 0x100); +1497 5 write_RTC(RTC_MEM_F4_batch_LSB,batch % 0x100); +1498 5 } +1499 4 else if(function == 5) +1500 4 { +1501 5 cumulative = RTC_Readlong(RTC_MEM_F5_cumulative); +1502 5 cumulative = cumulative + (unsigned long)((disp_val/res)*res); +1503 5 if(cumulative > 99999999) cumulative = 0; +1504 5 //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; +1505 5 RTC_Writelong(RTC_MEM_F5_cumulative,cumulative); +1506 5 +1507 5 batch=read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB); +1508 5 batch = batch + 1; +1509 5 write_RTC(RTC_MEM_F5_batch_MSB,batch / 0x100); +1510 5 write_RTC(RTC_MEM_F5_batch_LSB,batch % 0x100); +1511 5 } +1512 4 else if((function >= 6)&& (function <= 36)) +1513 4 { +1514 5 cumulative = RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); +1515 5 cumulative = cumulative + (unsigned long)((disp_val/res)*res); +1516 5 if(cumulative > 99999999) cumulative = 0; +1517 5 //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; +1518 5 RTC_Writelong(RTC_MEM_F6_TO_F36_cumulative,cumulative); +1519 5 +1520 5 batch=read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB); +1521 5 batch = batch + 1; +1522 5 write_RTC(RTC_MEM_F6_TO_F36_batch_MSB,batch / 0x100); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 26 + +1523 5 write_RTC(RTC_MEM_F6_TO_F36_batch_LSB,batch % 0x100); +1524 5 } +1525 4 } +1526 3 } +1527 2 //----------------------------------------------------- +1528 2 if(wa_flag && grwt && !grwt_ok) // should wait for some time +1529 2 { // before gross weight display. +1530 3 wait_ctr++; +1531 3 if(wait_ctr >= wait_val*60) +1532 3 { +1533 4 grwt_ok=1; +1534 4 tare_val=temp_tare; +1535 4 wait_ctr=0; +1536 4 } +1537 3 } +1538 2 //------------------------------------------------------------- +1539 2 if(batch_count<1 && bset_enable && wa_flag) //Batch over if batch set enabled +1540 2 { +1541 3 if(grwt && grwt_ok)wait_ctr++; +1542 3 else if(!grwt && !grwt_ok)wait_ctr++; +1543 3 if(wait_ctr >= wait_val*50) +1544 3 { +1545 4 wait_ctr=0; +1546 4 dp_flag=0; +1547 4 //disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x17,0x13); // batch over +1548 4 disp(0x0B,0x11,0x11,0x0e,0x13,0x13,0x11,0x11); //b err +1549 4 //write_RTC(RTC_MEM_start_status,0x00); //pause auto start when batch over +1550 4 start_status=0; +1551 4 +1552 4 #ifdef _6_key + while(enter) + #elif defined( _4x4_key ) +1555 4 while(KeyPressed != enter) +1556 4 #endif +1557 4 {delay(20); dp_flag=1;} +1558 4 } +1559 3 } +1560 2 //------------------------------------------------------------- +1561 2 // Can Removed. Resetting for next filling +1562 2 if(((disp_val <= zset) || disp_pol) && wa_flag) +1563 2 { +1564 3 waled=0; +1565 3 wa_flag=0; +1566 3 tare_val=temp_tare; +1567 3 avg_cnt=3*(10-avg); +1568 3 +1569 3 add_cnt=0; +1570 3 add_adc=0; +1571 3 process_flag=0; +1572 3 grwt_ok=0; +1573 3 } +1574 2 } +1575 1 } +1576 //======================================================================================= +1577 void pwd(void) +1578 { +1579 1 unsigned char b=6; +1580 1 //unsigned char b=4; +1581 1 KeyPressed = 'X'; +1582 1 disp(0x0c,0x17,0x0d,0x0e,0x11,0x11,0x00,0x00); +1583 1 //disp(0x0c,0x17,0x0d,0x0e,0x00,0x00,0x00,0x00); +1584 1 rst_wdt(); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 27 + +1585 1 #ifdef _6_key + while(enter) // will overloop to back on reaching max. + #elif defined( _4x4_key ) +1588 1 while(KeyPressed != enter) +1589 1 #endif +1590 1 { +1591 2 blink(b,1); +1592 2 disp_data[b]=incdec(disp_data[b],9,0); +1593 2 #ifdef _6_key + if(!tare) // shift key is also checked which shifts + #elif defined( _4x4_key ) +1596 2 if(('S' == KeyPressed)||(KeyPressed == tare)) // blinking digit to right. +1597 2 #endif +1598 2 { +1599 3 b++; +1600 3 if(b>7)b=6; +1601 3 //if(b>7) b=4; +1602 3 #ifdef _4x4_key +1603 3 KeyPressed = 'X'; +1604 3 #endif +1605 3 } +1606 2 /*if(KeyPressed == left) +1607 2 { +1608 2 b--; +1609 2 if(b<4) b=7; +1610 2 KeyPressed = 'X'; //clear keyPressed +1611 2 }*/ +1612 2 } +1613 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +1616 1 while(KeyPressed == enter) +1617 1 #endif +1618 1 {delay(2);} +1619 1 } +1620 //============================================================================================= +1621 void val_read(char a) // Will read value which is entered. +1622 { +1623 1 unsigned char b; // Up to 'char a' characters from max to +1624 1 b=8-a; // back are read one by one. +1625 1 // current entry char will blink. +1626 1 #ifdef _6_key + while(enter && set && mode) // will overloop to back on reaching max. + #elif defined( _4x4_key ) +1629 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +1630 1 #endif +1631 1 { +1632 2 blink(b,1); +1633 2 disp_data[b]=incdec(disp_data[b],9,0); +1634 2 #ifdef _6_key + if(!tare) // shift key is also checked which shifts + #elif defined( _4x4_key ) +1637 2 //if(('S' == KeyPressed) || (KeyPressed == right)) +1638 2 if(('S' == KeyPressed) || (KeyPressed == tare)) +1639 2 #endif +1640 2 { // blinking digit to right. +1641 3 b++; +1642 3 if(b>7) b=8-a; +1643 3 #ifdef _4x4_key +1644 3 KeyPressed = 'X'; //clear keyPressed +1645 3 #endif +1646 3 } + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 28 + +1647 2 /*if(KeyPressed == left) +1648 2 { +1649 2 b--; +1650 2 if(b<(8-a)) b=7; +1651 2 KeyPressed = 'X'; //clear keyPressed +1652 2 }*/ +1653 2 } +1654 1 #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) +1657 1 if(KeyPressed == mode) +1658 1 #endif +1659 1 { +1660 2 #ifdef _6_key + while(!mode) + #elif defined( _4x4_key ) +1663 2 while(KeyPressed == mode) +1664 2 #endif +1665 2 {delay(2);} +1666 2 esc_flag=1; +1667 2 } +1668 1 else esc_flag=0; +1669 1 /*#ifdef _4x4_key +1670 1 KeyPressed = 'X'; // "keyPressed" clearing +1671 1 #endif */ +1672 1 } +1673 //========================================================================================== +1674 void blink(start,no) // Will create blinking display. +1675 { +1676 1 unsigned char k; // Blinking display will be from 'start' to +1677 1 // display numbered no. +1678 1 arr_cpy(&temp_data[0],&disp_data[0],8); +1679 1 for(k=start;k7)b=6; +1714 3 //if(b>7) b=4; +1715 3 #ifdef _4x4_key +1716 3 KeyPressed = 'X'; +1717 3 #endif +1718 3 } +1719 2 #ifdef _6_key + if(!mode)return; + #elif defined( _4x4_key ) +1722 2 if(KeyPressed == mode)return; +1723 2 #endif +1724 2 /*if(KeyPressed == left) +1725 2 { +1726 2 b--; +1727 2 if(b<4) b=7; +1728 2 KeyPressed = 'X'; //clear keyPressed +1729 2 }*/ +1730 2 } +1731 1 #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) +1734 1 if(KeyPressed == enter) +1735 1 #endif +1736 1 { +1737 2 b = ((disp_data[6] & 0x0F) << 4 ) + (disp_data[7] & 0x0F); +1738 2 b = bcd2int(b); +1739 2 if(b > 36) +1740 2 { +1741 3 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +1742 3 delay(500); +1743 3 goto err_rtn; +1744 3 } +1745 2 write_RTC(RTC_MEM_current_recipe,b); +1746 2 } +1747 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +1750 1 while(KeyPressed==enter) +1751 1 #endif +1752 1 {delay(2);} +1753 1 } +1754 //============================================================================================ +1755 void menu(void) // Main menu entry. +1756 { +1757 1 char dat; +1758 1 bit err_flag=0; +1759 1 unsigned int temp; +1760 1 +1761 1 read_values(); +1762 1 dp_flag=1; +1763 1 set_enter_flag=1; +1764 1 +1765 1 if(function>0 && function<=9) {EEPROM_block = Block_0;} +1766 1 else if(function>9 && function<=18) {EEPROM_block = Block_1;} +1767 1 else if(function>18 && function<=27) {EEPROM_block = Block_2;} +1768 1 else if(function>27 && function<=36) {EEPROM_block = Block_3;} +1769 1 //-------------------------------------------------------------------- +1770 1 do + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 30 + +1771 1 { +1772 2 if(!recipe) disp(0x0F,0x01,0x16,0x11,0x00,0x00,0x00,0x00); +1773 2 //else disp(0x0F,function,0x11,0x11,0x00,0x00,0x00,0x00); +1774 2 else disp(function/10,function%10,0x0F,0x11,0x00,0x00,0x00,0x00); +1775 2 bin2bcd(fillset,5); // Fill set +1776 2 delay(500); +1777 2 val_read(5); +1778 2 if(esc_flag) return; +1779 2 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +1782 2 //if(KeyPressed != set) +1783 2 if(KeyPressed == enter) +1784 2 #endif +1785 2 { +1786 3 temp=bcd2bin(5); +1787 3 if(temp > (rng_array[rng_val][2] * 1000) ) +1788 3 { +1789 4 err_flag=1; +1790 4 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +1791 4 delay(500); +1792 4 } +1793 3 else +1794 3 { +1795 4 fillset=temp; +1796 4 if(function>0 && function<=9)dat = function; +1797 4 else if(function>9 && function<=18) dat=(function-9); +1798 4 else if(function>18 && function<=27) dat=(function-18); +1799 4 else if(function>27 && function<=36) dat=(function-27); +1800 4 +1801 4 write_eeprom((0x10*dat),fillset/0x100); +1802 4 write_eeprom(((0x10*dat)+0x01),fillset%0x100); +1803 4 err_flag=0; +1804 4 } +1805 3 } +1806 2 } while(err_flag); +1807 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1808 1 /*do +1809 1 { +1810 1 //disp(0x0C,0x0F,0x11,0x11,0x00,0x00,0x00,0x00); +1811 1 if(!recipe) disp(0x0C,0x0F,0x11,0x11,0x11,0x00,0x00,0x00); +1812 1 //else disp(0x0C,0x0F,function,0x11,0x11,0x00,0x00,0x00); // Course feed +1813 1 else disp(function/10,function%10,0x0C,0x11,0x11,0x00,0x00,0x00); // Course feed +1814 1 //cf=(fillset-cf); +1815 1 bin2bcd(cf,3); +1816 1 delay(500); +1817 1 val_read(3); +1818 1 if(esc_flag) return; +1819 1 #ifdef _6_key +1820 1 if(set) +1821 1 #elif defined( _4x4_key ) +1822 1 //if(KeyPressed != set) +1823 1 if(KeyPressed == enter) +1824 1 #endif +1825 1 { +1826 1 temp=bcd2bin(3); +1827 1 if(temp >= fillset) +1828 1 //if(temp >= fillset || (fillset-temp > ffd)) +1829 1 { +1830 1 err_flag=1; +1831 1 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +1832 1 delay(500); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 31 + +1833 1 } +1834 1 else +1835 1 { +1836 1 cf=temp; +1837 1 //cf=(fillset-temp); +1838 1 if(function>0 && function<=9)dat = function; +1839 1 else if(function>9 && function<=18) dat=(function-9); +1840 1 else if(function>18 && function<=27) dat=(function-18); +1841 1 else if(function>27 && function<=36) dat=(function-27); +1842 1 +1843 1 write_eeprom((0x10*dat)+0x02,cf / 0x100); +1844 1 write_eeprom((0x10*dat)+0x03,cf % 0x100); +1845 1 err_flag=0; +1846 1 } +1847 1 } +1848 1 } while(err_flag); */ +1849 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1850 1 do +1851 1 { +1852 2 if(!recipe) disp(0x0F,0x0F,0x11,0x11,0x11,0x00,0x00,0x00); +1853 2 //else disp(0x0F,0x0F,function,0x11,0x11,0x00,0x00,0x00); +1854 2 else disp(function/10,function%10,0x0D,0x11,0x11,0x00,0x00,0x00); +1855 2 //ffd=(fillset-ffd); +1856 2 //14_02_24 bin2bcd(ffd,3); +1857 2 bin2bcd(ffd,4); +1858 2 delay(500); +1859 2 //val_read(5); +1860 2 //14_02_24 val_read(3); +1861 2 val_read(4); +1862 2 if(esc_flag) return; +1863 2 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +1866 2 //if(KeyPressed != set) +1867 2 if(KeyPressed == enter) +1868 2 #endif +1869 2 { +1870 3 //temp=bcd2bin(5); +1871 3 //14_02_24 temp=bcd2bin(3); +1872 3 temp=bcd2bin(4); +1873 3 //if((temp >= fillset) || (fillset-temp <= cf)) +1874 3 if(temp >= fillset) +1875 3 { +1876 4 err_flag=1; +1877 4 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +1878 4 delay(500); +1879 4 } +1880 3 else +1881 3 { +1882 4 //ffd=(fillset-temp); +1883 4 ffd=temp; +1884 4 if(function>0 && function<=9)dat = function; +1885 4 else if(function>9 && function<=18) dat=(function-9); +1886 4 else if(function>18 && function<=27) dat=(function-18); +1887 4 else if(function>27 && function<=36) dat=(function-27); +1888 4 +1889 4 write_eeprom((0x10*dat)+0x04,ffd / 0x100); +1890 4 write_eeprom((0x10*dat)+0x05,ffd % 0x100); +1891 4 err_flag=0; +1892 4 } +1893 3 } +1894 2 } while(err_flag); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 32 + +1895 1 +1896 1 /*cfd1=fillset-ffd; +1897 1 //cfd1=cf; +1898 1 cfd2=fillset-ffd; +1899 1 ffd=fillset-ffd;*/ +1900 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1901 1 do +1902 1 { +1903 2 if(!recipe)disp(0x18,0x0F,0x16,0x11,0x11,0x00,0x00,0x00); +1904 2 //else disp(0x18,0x0F,function,0x11,0x11,0x00,0x00,0x00); +1905 2 else disp(function/10,function%10,0x18,0x11,0x11,0x00,0x00,0x00); +1906 2 bin2bcd(nfl,3); // Inflight +1907 2 delay(500); +1908 2 val_read(3); +1909 2 if(esc_flag) return; +1910 2 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +1913 2 //if(KeyPressed != set) +1914 2 if(KeyPressed == enter) +1915 2 #endif +1916 2 { +1917 3 temp=bcd2bin(3); +1918 3 //if(temp > fillset) +1919 3 if((temp+ffd) > fillset) +1920 3 { +1921 4 err_flag=1; +1922 4 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +1923 4 delay(500); +1924 4 } +1925 3 else +1926 3 { +1927 4 nfl=temp; +1928 4 if(function>0 && function<=9)dat = function; +1929 4 else if(function>9 && function<=18) dat=(function-9); +1930 4 else if(function>18 && function<=27) dat=(function-18); +1931 4 else if(function>27 && function<=36) dat=(function-27); +1932 4 +1933 4 write_eeprom((0x10*dat)+0x06,nfl / 0x100); +1934 4 write_eeprom((0x10*dat)+0x07,nfl % 0x100); +1935 4 err_flag=0; +1936 4 } +1937 3 } +1938 2 } while(err_flag); +1939 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1940 1 do +1941 1 { +1942 2 if(!recipe)disp(0x15,0x14,0x13,0x11,0x11,0x00,0x00,0x00); +1943 2 //else disp(0x15,function,0x11,0x11,0x11,0x00,0x00,0x00); +1944 2 else disp(function/10,function%10,0x15,0x11,0x11,0x00,0x00,0x00); +1945 2 bin2bcd(htar,5); // High tare +1946 2 delay(500); +1947 2 val_read(5); +1948 2 if(esc_flag) return; +1949 2 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +1952 2 //if(KeyPressed != set) +1953 2 if(KeyPressed == enter) +1954 2 #endif +1955 2 { +1956 3 temp=bcd2bin(5); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 33 + +1957 3 //if(temp > (rng_array[rng_val][2] * 1000) ) +1958 3 if(temp+fillset > (rng_array[rng_val][2] * 1000) ) +1959 3 { +1960 4 err_flag=1; +1961 4 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +1962 4 delay(500); +1963 4 } +1964 3 else +1965 3 { +1966 4 htar=temp; +1967 4 if(function>0 && function<=9)dat = function; +1968 4 else if(function>9 && function<=18) dat=(function-9); +1969 4 else if(function>18 && function<=27) dat=(function-18); +1970 4 else if(function>27 && function<=36) dat=(function-27); +1971 4 +1972 4 write_eeprom((0x10*dat)+0x08,htar / 0x100); +1973 4 write_eeprom((0x10*dat)+0x09,htar % 0x100); +1974 4 err_flag=0; +1975 4 } +1976 3 } +1977 2 }while(err_flag); +1978 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1979 1 do +1980 1 { +1981 2 if(!recipe)disp(0x16,0x14,0x13,0x11,0x11,0x00,0x00,0x00); +1982 2 //else disp(0x16,function,0x11,0x11,0x11,0x00,0x00,0x00); +1983 2 else disp(function/10,function%10,0x16,0x11,0x11,0x00,0x00,0x00); +1984 2 bin2bcd(ltar,3); // Low tare +1985 2 delay(500); +1986 2 val_read(3); +1987 2 if(esc_flag) return; +1988 2 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +1991 2 //if(KeyPressed != set) +1992 2 if(KeyPressed == enter) +1993 2 #endif +1994 2 { +1995 3 temp=bcd2bin(3); +1996 3 if(temp >= htar) +1997 3 { +1998 4 err_flag=1; +1999 4 disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); +2000 4 delay(500); +2001 4 } +2002 3 else +2003 3 { +2004 4 ltar=temp; +2005 4 if(function>0 && function<=9)dat = function; +2006 4 else if(function>9 && function<=18) dat=(function-9); +2007 4 else if(function>18 && function<=27) dat=(function-18); +2008 4 else if(function>27 && function<=36) dat=(function-27); +2009 4 +2010 4 write_eeprom((0x10*dat)+0x0A,ltar / 0x100); +2011 4 write_eeprom((0x10*dat)+0x0B,ltar % 0x100); +2012 4 err_flag=0; +2013 4 } +2014 3 } +2015 2 } while(err_flag); +2016 1 dp_flag=0; +2017 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2018 1 if(!recipe)disp(0x0a,0x14,0x11,0x14,0x13,0x11,0x11,0x11); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 34 + +2019 1 //else disp(0x0a,function,0x11,0x11,0x11,0x11,0x11,0x11); +2020 1 else disp(function/10,function%10,0x0a,0x11,0x11,0x11,0x11,0x11); +2021 1 delay(500); +2022 1 if(!ed) dat=0; +2023 1 else dat=1; //Auto tare Enable / Disable. +2024 1 #ifdef _6_key + while(enter && set) + #elif defined( _4x4_key ) +2027 1 while(KeyPressed != set && KeyPressed != enter) +2028 1 #endif +2029 1 { +2030 2 blink(7,1); +2031 2 dat=incdec(dat,1,0); +2032 2 if(dat==0){ disp_data[7]=0x0d; ed=0;} +2033 2 else { disp_data[7]=0x0e; ed=1;} +2034 2 } +2035 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2038 1 //if(KeyPressed != set) +2039 1 if(KeyPressed == enter) +2040 1 #endif +2041 1 { +2042 2 if(function>0 && function<=9)write_eeprom((0x10*function)+0x0C,dat); +2043 2 else if(function>9 && function<=18) write_eeprom(((0x10*(function-9))+0x0C),dat); +2044 2 else if(function>18 && function<=27) write_eeprom(((0x10*(function-18))+0x0C),dat); +2045 2 else if(function>27 && function<=36) write_eeprom(((0x10*(function-27))+0x0C),dat); +2046 2 } +2047 1 while(KeyPressed == enter){delay(20);} +2048 1 dp_flag=1; +2049 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2050 1 dat=read_eeprom(EE_test_loc_Mem); +2051 1 if(dat != test_loc) write_eeprom(EE_test_loc_Mem, test_loc); +2052 1 read_values(); //loading new values +2053 1 } +2054 //=============================================================================================== +2055 void settings(void) +2056 { +2057 1 char dat; +2058 1 read_values(); +2059 1 EEPROM_block = Block_0; +2060 1 set_enter_flag=1; +2061 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2062 1 dat=wait_val;// Time delay for showing 'SA' after the weight has crossed the Fillset value. +2063 1 disp(0x05,0x0A,0x10,0x0D,0x16,0x11,dat/10,dat%10); +2064 1 bin2bcd(dat,2); +2065 1 delay(500); +2066 1 val_read(2); +2067 1 if(esc_flag) return; +2068 1 wait_val = bcd2bin(2); +2069 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2072 1 if(KeyPressed == enter) +2073 1 #endif +2074 1 { +2075 2 write_eeprom(EE_wait_val_Mem, wait_val); +2076 2 } +2077 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2078 1 //dat=drop_wait_val/10; // The time delay between drops. +2079 1 dat=read_eeprom(EE_drop_wait_val_Mem); +2080 1 disp(0x0D,0x13,0x12,0x0D,0x16,0x11,dat/10,dat%10); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 35 + +2081 1 bin2bcd(dat,2); +2082 1 delay(500); +2083 1 val_read(2); +2084 1 if(esc_flag) return; +2085 1 drop_wait_val = bcd2bin(2); +2086 1 +2087 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2090 1 if(KeyPressed == mode) return; +2091 1 #endif +2092 1 +2093 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2096 1 if(KeyPressed == enter) +2097 1 #endif +2098 1 { +2099 2 write_eeprom(EE_drop_wait_val_Mem, drop_wait_val); +2100 2 } +2101 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2102 1 //dat=on_time/100; // The drop ON TIME. +2103 1 dat=read_eeprom(EE_on_time_Mem); +2104 1 disp(0x00,0x18,0x14,0x01,0x1a,0x0e,dat/10,dat%10); +2105 1 bin2bcd(dat,2); +2106 1 delay(500); +2107 1 val_read(2); +2108 1 if(esc_flag) return; +2109 1 dat = bcd2bin(2); +2110 1 +2111 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2114 1 if(KeyPressed == mode) return; +2115 1 #endif +2116 1 +2117 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2120 1 if(KeyPressed == enter) +2121 1 #endif +2122 1 { +2123 2 write_eeprom(EE_on_time_Mem, dat); +2124 2 } +2125 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2126 1 disp(0x00,0x10,0x05,0x0E,0x14,0x00,0x00,0x00); +2127 1 bin2bcd(zset,3); // Zero set +2128 1 delay(500); +2129 1 //while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2130 1 //{ +2131 1 val_read(3); +2132 1 zset = bcd2bin(3); +2133 1 //} +2134 1 if(esc_flag) return; +2135 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2138 1 if(KeyPressed == enter) +2139 1 #endif +2140 1 { +2141 2 write_eeprom(EE_zset_Mem_MSB,zset / 0x100); +2142 2 write_eeprom((EE_zset_Mem_LSB),zset % 0x100); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 36 + +2143 2 } +2144 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2145 1 disp(0x05,0x12,0x0d,0x11,0x11,0x11,0x11,avg); +2146 1 delay(500); +2147 1 #ifdef _6_key + while(enter && set && mode) //speed(averaging). + #elif defined( _4x4_key ) +2150 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2151 1 #endif +2152 1 { +2153 2 blink(7,1); +2154 2 avg=incdec(avg,9,1); +2155 2 disp_data[7]=avg; +2156 2 } +2157 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2160 1 if(KeyPressed == mode) return; +2161 1 #endif +2162 1 +2163 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2166 1 if(KeyPressed == enter) +2167 1 #endif +2168 1 { +2169 2 write_eeprom(EE_avg_Mem,avg); +2170 2 avg_cnt=3*(10-avg); +2171 2 } +2172 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2173 1 if(cal_en) //calibration hardware lock to protect scale setting +2174 1 { +2175 2 disp(0x12,0x13,0x00,0x14,0x0E,0x0C,0x14,0x0D); +2176 2 //return; +2177 2 goto end; +2178 2 } +2179 1 else +2180 1 //-------------------------------------------------------------------- +2181 1 disp(0x05,0x10,0x0c,0x0a,0x12,0x11,0x00,0x00); +2182 1 bin2bcd(rng_array[rng_val][2],2); +2183 1 delay(500); +2184 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2187 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2188 1 #endif +2189 1 { +2190 2 blink(6,2); +2191 2 //rng_val=incdec(rng_val,6,0); +2192 2 //1 rng_val=incdec(rng_val,7,0); +2193 2 rng_val=incdec(rng_val,9,0); +2194 2 #ifdef _4x4_key +2195 2 //if(KeyPressed == right) +2196 2 if(KeyPressed == tare) +2197 2 { +2198 3 rng_val++; +2199 3 //if(rng_val>6) rng_val=0; +2200 3 // if(rng_val>7) rng_val=0; +2201 3 if(rng_val>9) rng_val=0; +2202 3 } +2203 2 #endif +2204 2 /*if(KeyPressed == left) + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 37 + +2205 2 { +2206 2 +2207 2 if(rng_val >= 1) rng_val--; +2208 2 else rng_val=4; +2209 2 }*/ +2210 2 bin2bcd(rng_array[rng_val][2],2); +2211 2 } +2212 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2215 1 if(KeyPressed == mode) return; +2216 1 #endif +2217 1 +2218 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2221 1 if(KeyPressed == enter) +2222 1 #endif +2223 1 { +2224 2 write_eeprom(EE_rng_val_Mem,rng_val); +2225 2 } +2226 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2227 1 disp(0x13,0x0e,0x05,0x11,0x11,0x11,res/10,res%10); +2228 1 delay(500); +2229 1 dat=res; +2230 1 if(res==5) dat=3; +2231 1 if(res==10) dat=0; +2232 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2235 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2236 1 #endif +2237 1 { +2238 2 blink(6,2); +2239 2 dat=incdec(dat,3,0); +2240 2 #ifdef _4x4_key +2241 2 //if(KeyPressed == right) +2242 2 if(KeyPressed == tare) +2243 2 { +2244 3 dat++; +2245 3 if(dat>3) dat=0; +2246 3 } +2247 2 #endif +2248 2 /*if(KeyPressed == left) +2249 2 { +2250 2 if(dat >= 1)dat--; +2251 2 else dat = 3; +2252 2 }*/ +2253 2 res=dat; +2254 2 if(dat==3) res=5; +2255 2 if(dat==0) res=10; +2256 2 disp_data[7]=res%10; +2257 2 disp_data[6]=res/10; +2258 2 } +2259 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2262 1 if(KeyPressed == mode) return; +2263 1 #endif +2264 1 +2265 1 #ifdef _6_key + if(set) + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 38 + + #elif defined( _4x4_key ) +2268 1 if(KeyPressed == enter) +2269 1 #endif +2270 1 { +2271 2 write_eeprom(EE_res_Mem,res); +2272 2 } +2273 1 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2274 1 div_factor=rng_array[rng_val][0]; +2275 1 mul_factor=rng_array[rng_val][1]; +2276 1 help_val=(rng_array[rng_val][2] * 1000) + (res * 9); +2277 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2278 1 disp(0x1a,0x0a,0x05,0x11,0x11,0x11,0x11,mas); +2279 1 delay(500); +2280 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2283 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2284 1 #endif +2285 1 { +2286 2 blink(7,1); +2287 2 mas=incdec(mas,5,0); +2288 2 #ifdef _4x4_key +2289 2 //if(KeyPressed == right) +2290 2 if(KeyPressed == tare) +2291 2 { +2292 3 mas++; +2293 3 if(mas>5) mas=0; +2294 3 } +2295 2 #endif +2296 2 /*if(KeyPressed == left) +2297 2 { +2298 2 if(mas >= 1)mas--; +2299 2 else mas=5; +2300 2 }*/ +2301 2 disp_data[7]=mas; +2302 2 } +2303 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2306 1 if(KeyPressed == mode) return; +2307 1 #endif +2308 1 +2309 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2312 1 if(KeyPressed == enter) +2313 1 #endif +2314 1 { +2315 2 write_eeprom(EE_mas_Mem,mas); +2316 2 } +2317 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2318 1 disp(0x00,0x10,0x14,0x13,0x0A,0x0C,0x11,ztc); +2319 1 delay(500); +2320 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2323 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2324 1 #endif +2325 1 { +2326 2 blink(7,1); +2327 2 ztc=incdec(ztc,5,0); +2328 2 #ifdef _4x4_key + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 39 + +2329 2 //if(KeyPressed == right) +2330 2 if(KeyPressed == tare) +2331 2 { +2332 3 ztc++; +2333 3 if(ztc>5) ztc=0; +2334 3 } +2335 2 #endif +2336 2 /*if(KeyPressed == left) +2337 2 { +2338 2 if(ztc >= 1)ztc--; +2339 2 else ztc=5; +2340 2 }*/ +2341 2 disp_data[7]=ztc; +2342 2 } +2343 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2346 1 if(KeyPressed == mode) return; +2347 1 #endif +2348 1 +2349 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2352 1 if(KeyPressed == enter) +2353 1 #endif +2354 1 { +2355 2 write_eeprom(EE_ztc_Mem,ztc); +2356 2 } +2357 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2358 1 dp_flag=1; +2359 1 disp(0x0D,0x0E,0x0C,0x11,0x11,0x11,0x11,dp_val); +2360 1 delay(500); +2361 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2364 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2365 1 #endif +2366 1 { +2367 2 blink(7,1); +2368 2 dp_val=incdec(dp_val,7,3); +2369 2 #ifdef _4x4_key +2370 2 //if(KeyPressed == right) +2371 2 if(KeyPressed == tare) +2372 2 { +2373 3 dp_val++; +2374 3 if(dp_val>7)dp_val=3; +2375 3 } +2376 2 #endif +2377 2 /*if(KeyPressed == left) +2378 2 { +2379 2 if(dp_val >= 3) dp_val--; +2380 2 else dp_val=7; +2381 2 }*/ +2382 2 disp_data[7]=dp_val; +2383 2 } +2384 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2387 1 if(KeyPressed == mode) return; +2388 1 #endif +2389 1 +2390 1 #ifdef _6_key + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 40 + + if(set) + #elif defined( _4x4_key ) +2393 1 if(KeyPressed == enter) +2394 1 #endif +2395 1 { +2396 2 write_eeprom(EE_dp_val_mem,dp_val); +2397 2 } +2398 1 dp_flag=0; +2399 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2400 1 end: +2401 1 dat=read_eeprom(EE_test_loc_Mem); +2402 1 if(dat != test_loc) write_eeprom(EE_test_loc_Mem, test_loc); +2403 1 read_values(); +2404 1 } +2405 //============================================================================================ +2406 void sys_paramts(void) +2407 { +2408 1 char dat; +2409 1 read_values(); +2410 1 dp_flag=0; +2411 1 set_enter_flag=1; +2412 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2413 1 //Instant fillset entry Enable / Disable. +2414 1 disp(0x01,0x18,0x05,0x14,0x18,0x14,0x11,0x11); +2415 1 dat=read_RTC(RTC_MEM_Instant_fill_enable); +2416 1 delay(500); +2417 1 //if(dat==1)Instant_fill_enable=1; +2418 1 //else Instant_fill_enable=0; +2419 1 if(dat==0)Instant_fill_enable=0; +2420 1 else Instant_fill_enable=1; +2421 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2424 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2425 1 #endif +2426 1 { +2427 2 blink(7,1); +2428 2 dat=incdec(dat,1,0); +2429 2 if(dat==0){ disp_data[7]=0x0d; Instant_fill_enable=0;} +2430 2 else { dat=1; disp_data[7]=0x0e; Instant_fill_enable=1;} +2431 2 } +2432 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2435 1 if(KeyPressed == mode) return; +2436 1 #endif +2437 1 +2438 1 #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) +2441 1 if(KeyPressed == enter) +2442 1 #endif +2443 1 { +2444 2 write_RTC(RTC_MEM_Instant_fill_enable,dat); +2445 2 } +2446 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2447 1 disp(0x0a,0x1B,0x14,0x05,0x11,0x11,0x11,0x11); //Auto start Enable / Disable. +2448 1 dat=read_RTC(RTC_MEM_Auto_start_enable); +2449 1 delay(500); +2450 1 //if(dat==1)auto_start=1; +2451 1 //else auto_start=0; +2452 1 if(dat==0)auto_start=0; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 41 + +2453 1 else auto_start=1; +2454 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2457 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2458 1 #endif +2459 1 { +2460 2 blink(7,1); +2461 2 dat=incdec(dat,1,0); +2462 2 if(dat==0){ disp_data[7]=0x0d; auto_start=0;} +2463 2 else { dat=1; disp_data[7]=0x0e; auto_start=1;} +2464 2 } +2465 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2468 1 if(KeyPressed == mode) return; +2469 1 #endif +2470 1 +2471 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2474 1 if(KeyPressed == enter) +2475 1 #endif +2476 1 { +2477 2 write_RTC(RTC_MEM_Auto_start_enable,dat); +2478 2 } +2479 1 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +2480 1 //disp(0x0a,0x1B,0x14,0x00,0x05,0x11,0x11,0x11); //Auto start delay +2481 1 disp(0x0A,0x14,0x05,0x0D,0x16,0x11,0x11,0x11); +2482 1 start_delay=read_RTC(RTC_MEM_start_delay); +2483 1 bin2bcd(start_delay,2); +2484 1 delay(500); +2485 1 val_read(2); +2486 1 if(esc_flag) return; +2487 1 start_delay = (unsigned char)bcd2bin(2); +2488 1 +2489 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2492 1 if(KeyPressed == mode) return; +2493 1 #endif +2494 1 +2495 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2498 1 if(KeyPressed == enter) +2499 1 #endif +2500 1 { +2501 2 write_RTC(RTC_MEM_start_delay,start_delay); +2502 2 } +2503 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2504 1 disp(0x13,0x0E,0x0C,0x01,0x12,0x0E,0x11,0x11); //Recipe Enable/Disable +2505 1 dat=read_RTC(RTC_MEM_recipe_enable); +2506 1 delay(500); +2507 1 //if(dat==1)recipe=1; +2508 1 //else recipe=0; +2509 1 if(dat==0)recipe=0; +2510 1 else recipe=1; +2511 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2514 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 42 + +2515 1 #endif +2516 1 { +2517 2 blink(7,1); +2518 2 dat=incdec(dat,1,0); +2519 2 if(dat==0){ disp_data[7]=0x0d; recipe=0;} +2520 2 else { dat=1; disp_data[7]=0x0e; recipe=1;} +2521 2 } +2522 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2525 1 if(KeyPressed == mode) return; +2526 1 #endif +2527 1 +2528 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2531 1 if(KeyPressed == enter) +2532 1 #endif +2533 1 { +2534 2 write_RTC(RTC_MEM_recipe_enable,dat); +2535 2 } +2536 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2537 1 disp(0x0B,0x05,0x0E,0x14,0x10,0x0F,0x11,0x11); //Batch filling enable +2538 1 dat=read_RTC(RTC_MEM_batch_set_enable); +2539 1 delay(500); +2540 1 //if(dat==1)bset_enable=1; +2541 1 //else bset_enable=0; +2542 1 if(dat==0)bset_enable=0; +2543 1 else bset_enable=1; +2544 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2547 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2548 1 #endif +2549 1 { +2550 2 blink(7,1); +2551 2 dat=incdec(dat,1,0); +2552 2 if(dat==0){ disp_data[7]=0x0d; bset_enable=0;} +2553 2 else { dat=1; disp_data[7]=0x0e; bset_enable=1;} +2554 2 } +2555 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2558 1 if(KeyPressed == mode) return; +2559 1 #endif +2560 1 +2561 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2564 1 if(KeyPressed == enter) +2565 1 #endif +2566 1 { +2567 2 write_RTC(RTC_MEM_batch_set_enable,dat); +2568 2 } +2569 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2570 1 disp(0x19,0x13,0x1D,0x14,0x11,0x11,0x11,0x11); //Grows weight display Enable/Disable +2571 1 dat=read_RTC(RTC_MEM_gross_weight_enable); +2572 1 delay(500); +2573 1 //if(dat==1)grwt=1; +2574 1 //else grwt=0; +2575 1 if(dat==0)grwt=0; +2576 1 else grwt=1; + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 43 + +2577 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +2580 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +2581 1 #endif +2582 1 { +2583 2 blink(7,1); +2584 2 dat=incdec(dat,1,0); +2585 2 if(dat==0){ disp_data[7]=0x0d; grwt=0;} +2586 2 else { dat=1; disp_data[7]=0x0e; grwt=1;} +2587 2 } +2588 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2591 1 if(KeyPressed == mode) return; +2592 1 #endif +2593 1 +2594 1 #ifdef _6_key + if(set) + #elif defined( _4x4_key ) +2597 1 if(KeyPressed == enter) +2598 1 #endif +2599 1 { +2600 2 write_RTC(RTC_MEM_gross_weight_enable,dat); +2601 2 } +2602 1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2603 1 //write_eeprom(EE_test_loc_Mem,test_loc); //write status update +2604 1 write_RTC(RTC_MEM_status,test_loc); +2605 1 read_values(); //loading new values +2606 1 dp_flag=1; +2607 1 } +2608 //================================================================================================== +2609 /* +2610 void memory_backup_restore(void) +2611 { +2612 char no=1; +2613 clr_disp(); +2614 #ifdef _6_key +2615 while(enter && mode) +2616 #elif defined( _4x4_key ) +2617 while(KeyPressed != enter && KeyPressed != mode) +2618 #endif +2619 { +2620 blink(0,8); +2621 no=incdec(no,2,1); +2622 rst_wdt(); +2623 switch(no) +2624 { +2625 case 1: +2626 disp(0x1A,0x0C,0x11,0x14,0x17,0x11,0x0E,0x0E); +2627 break; +2628 case 2: +2629 disp(0x0E,0x0E,0x11,0x14,0x17,0x11,0x1A,0x0C); +2630 break; +2631 } +2632 } +2633 #ifdef _6_key +2634 if(!mode) return; +2635 #elif defined( _4x4_key ) +2636 if(KeyPressed == mode)return; +2637 #endif +2638 switch(no) + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 44 + +2639 { +2640 rst_wdt(); +2641 case 1: +2642 sectors_copy_to_EEPROM(BLK1_DST_ADDR, 0x00); +2643 break; +2644 case 2: +2645 EEPROM_copy_to_sectors(BLK1_DST_ADDR, 0x00); +2646 break; +2647 } +2648 delay(500); +2649 read_values(); //loading new values +2650 } +2651 */ +2652 //===================================================================================== +2653 unsigned int bcd2bin(char no) // Converts bcd in the display and +2654 { // returns the equ. int value. +2655 1 unsigned int bin_val,mul=1; // char no.,determines how much +2656 1 char i; // digits in the display should be +2657 1 bin_val=0x00; // converted. +2658 1 for(i=7;i>=(8-no);i--) +2659 1 { +2660 2 bin_val = bin_val + disp_data[i] * mul; +2661 2 mul = mul * 10; +2662 2 } +2663 1 return(bin_val); +2664 1 } +2665 //==================================================================================== +2666 char incdec(char name,char max,char min) +2667 { +2668 1 #ifdef _6_key + if(!incr) + #elif defined( _4x4_key ) +2671 1 if(KeyPressed == incr) +2672 1 #endif +2673 1 { +2674 2 name++; +2675 2 if(name>max)name=min; +2676 2 } +2677 1 #ifdef _6_key + if(!decr) + #elif defined( _4x4_key ) +2680 1 else if(KeyPressed == decr) +2681 1 #endif +2682 1 { +2683 2 name--; +2684 2 if(name= 0x00) && (KeyPressed <= 0x09)) +2688 1 else if((KeyPressed >= min) && (KeyPressed <= max)) +2689 1 { +2690 2 name = KeyPressed; +2691 2 KeyPressed = 'S'; //for shifting digit +2692 2 } +2693 1 #endif +2694 1 return(name); +2695 1 } +2696 //====================================================================================== +2697 void cal(void) +2698 { +2699 1 unsigned char j; +2700 1 + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 45 + +2701 1 if(cal_en) //calibration hardware lock +2702 1 { +2703 2 disp(0x11,0x0C,0x0A,0x11,0x16,0x17,0x0C,0x11); +2704 2 return; +2705 2 } +2706 1 else +2707 1 +2708 1 disp(0x11,0x11,0x11,0x0c,0x0a,0x16,0x11,0x11); +2709 1 delay(1000); +2710 1 disp(0x11,0x1d,0x0e,0x01,0x19,0x15,0x14,0x11); +2711 1 delay(1000); +2712 1 #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) +2715 1 while(KeyPressed != enter && KeyPressed != mode) +2716 1 #endif +2717 1 {delay(2);} +2718 1 +2719 1 #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) +2722 1 if(KeyPressed == mode) +2723 1 #endif +2724 1 { +2725 2 #ifdef _6_key + while(!mode) { delay(2);} + #elif defined( _4x4_key ) +2728 2 //while(KeyPressed == mode) {KeyPressed = 'X'; delay(2);} +2729 2 while(KeyPressed == mode){delay(2);} +2730 2 #endif +2731 2 return; +2732 2 } +2733 1 #ifdef _6_key + while(!enter){delay(2);} + #elif defined( _4x4_key ) +2736 1 while(KeyPressed == enter){delay(2);} +2737 1 #endif +2738 1 +2739 1 disp(0x0c,0x0a,0x16,0x11,0x11,0x11,0x11,0x11); +2740 1 dp_flag=1; +2741 1 c_flag=1; +2742 1 tare_flag=0; +2743 1 while(!aco); +2744 1 aco=0; +2745 1 //filter_val=adc_val; +2746 1 process(); +2747 1 temp_val = disp_val; +2748 1 c_flag=0; +2749 1 for(j=7;j>2;j--) +2750 1 { +2751 2 disp_data[j]=temp_val % 10; +2752 2 temp_val=temp_val / 10; +2753 2 } +2754 1 j=3; +2755 1 #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) +2758 1 while(KeyPressed != enter && KeyPressed != mode) +2759 1 #endif +2760 1 { +2761 2 blink(j,1); +2762 2 disp_data[j]=incdec(disp_data[j],9,0); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 46 + +2763 2 #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) +2766 2 //if(('S' == KeyPressed) || (KeyPressed == right)) +2767 2 if(('S' == KeyPressed) || (KeyPressed == tare)) +2768 2 #endif +2769 2 { +2770 3 j++; +2771 3 if(j>7) j=3; +2772 3 } +2773 2 /*if(KeyPressed == left) +2774 2 { +2775 2 j--; +2776 2 if(j<3) j=7; +2777 2 }*/ +2778 2 +2779 2 } +2780 1 #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) +2783 1 if(KeyPressed == mode) +2784 1 #endif +2785 1 { +2786 2 #ifdef _6_key + while(!mode) + #elif defined( _4x4_key ) +2789 2 while(KeyPressed == mode) +2790 2 #endif +2791 2 {delay(2);} +2792 2 return; +2793 2 } +2794 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +2797 1 while(KeyPressed == enter) +2798 1 #endif +2799 1 {delay(2);} +2800 1 cal_flag=1; +2801 1 bin_val=bcd2bin(5); +2802 1 if(res==0)bin_val=bin_val + 10; +2803 1 else bin_val=bin_val + res; +2804 1 dp_flag=0; +2805 1 } +2806 //===================================================================================== +2807 void cal_find(void) +2808 { +2809 1 if(cal_flag) +2810 1 { +2811 2 cal_flag=0; +2812 2 temp1=(unsigned long int)bin_val; +2813 2 temp2=(unsigned long int)disp_val; +2814 2 +2815 2 if(disp_val > bin_val) temp_val = disp_val - bin_val; +2816 2 else temp_val = bin_val - disp_val; +2817 2 //if(temp_val <= (disp_val/10)) +2818 2 if(temp_val) +2819 2 { +2820 3 temp =(temp1 * 0x2710)/temp2; +2821 3 cal_val = (unsigned int)temp; +2822 3 //if((temp % temp2) > (temp2/2)) cal_val+=1; //it was enabled +2823 3 EEPROM_block = Block_0; //Following parameters in block0 of EEPROM +2824 3 write_eeprom(EE_cal_val_Mem_MSB,cal_val/0x100); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 47 + +2825 3 write_eeprom((EE_cal_val_Mem_LSB),cal_val%0x100); +2826 3 disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); +2827 3 delay(1000); +2828 3 clr_disp(); +2829 3 } +2830 2 else +2831 2 { +2832 3 disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); +2833 3 delay(1000); +2834 3 clr_disp(); +2835 3 calibrate(); +2836 3 } +2837 2 } +2838 1 } +2839 //========================================================================================== +2840 void calibrate(void) +2841 { +2842 1 temp1=(unsigned long int)disp_val; +2843 1 temp2=(unsigned long int)cal_val; +2844 1 temp =(temp1 * temp2)/0x2710; +2845 1 disp_val = (unsigned int)temp; +2846 1 //if(((temp1*temp2) % 0x2710) > 0x1388) disp_val+=1; //It was enabled +2847 1 } +2848 //========================================================================================= +2849 void cal_rst(void) +2850 { +2851 1 if(cal_en) //calibration hardware lock +2852 1 { +2853 2 disp(0x11,0x0C,0x0A,0x11,0x16,0x17,0x0C,0x11); +2854 2 return; +2855 2 } +2856 1 else +2857 1 +2858 1 disp(0x11,0x13,0x0e,0x05,0x0e,0x14,0x11,0x11); +2859 1 #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) +2862 1 while((KeyPressed != enter) && (KeyPressed != mode)) +2863 1 #endif +2864 1 {delay(2);} +2865 1 +2866 1 #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) +2869 1 if(KeyPressed == mode) +2870 1 #endif +2871 1 { +2872 2 #ifdef _6_key + while(!mode) {delay(2);} + #elif defined( _4x4_key ) +2875 2 while(KeyPressed == mode) {delay(2);} +2876 2 #endif +2877 2 return; +2878 2 } +2879 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +2882 1 while(KeyPressed == enter) +2883 1 #endif +2884 1 {delay(2);} +2885 1 clr_disp(); +2886 1 EEPROM_block = Block_0; //Following parameters in block0 of EEPROM + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 48 + +2887 1 write_eeprom(EE_cal_val_Mem_MSB,0x27); +2888 1 write_eeprom((EE_cal_val_Mem_LSB),0x10); +2889 1 read_values(); +2890 1 } +2891 //======================================================================================= +2892 void select_menu(void) +2893 { +2894 1 char no=1; +2895 1 clr_disp(); +2896 1 #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) +2899 1 while(KeyPressed != enter && KeyPressed != mode) +2900 1 #endif +2901 1 { +2902 2 blink(0,8); +2903 2 //no=incdec(no,5,1); +2904 2 no=incdec(no,9,1); +2905 2 rst_wdt(); +2906 2 switch(no) +2907 2 { +2908 3 case 1: +2909 3 disp(0x0f,0x01,0x16,0x11,0x12,0x0a,0x13,0x0a); +2910 3 break; +2911 3 case 2: +2912 3 disp(0x05,0x0c,0x16,0x11,0x05,0x0e,0x14,0x11); +2913 3 break; +2914 3 case 3: +2915 3 disp(0x11,0x0c,0x0a,0x16,0x11,0x11,0x11,0x11); +2916 3 break; +2917 3 case 4: +2918 3 disp(0x0c,0x0a,0x16,0x11,0x13,0x05,0x14,0x11); +2919 3 break; +2920 3 case 5: +2921 3 disp(0x0d,0x0e,0x0f,0x0a,0x1b,0x16,0x14,0x05); +2922 3 break; +2923 3 case 6: +2924 3 disp(0x0C,0x1B,0x1A,0x1B,0x16,0x0A,0x14,0x0E); +2925 3 break; +2926 3 case 7: +2927 3 disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x11,0x11); +2928 3 break; +2929 3 case 8: +2930 3 disp(0x0B,0x0A,0x14,0x0C,0x15,0x14,0x17,0x14); +2931 3 break; +2932 3 case 9: +2933 3 disp(0x0B,0x0A,0x14,0x15,0x11,0x0C,0x1B,0x1A); +2934 3 delay(500); +2935 3 disp(0x0C,0x16,0x0E,0x0A,0x13,0x11,0x11,0x11); +2936 3 break; +2937 3 } +2938 2 } +2939 1 #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) +2942 1 if(KeyPressed == mode)return; +2943 1 #endif +2944 1 switch(no) +2945 1 { +2946 2 // rst_wdt(); +2947 2 case 1: +2948 2 sys_paramts(); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 49 + +2949 2 rst_wdt(); +2950 2 break; +2951 2 case 2: +2952 2 settings(); +2953 2 break; +2954 2 case 3: +2955 2 cal(); +2956 2 break; +2957 2 case 4: +2958 2 cal_rst(); +2959 2 break; +2960 2 case 5: +2961 2 load_eep_defaults(); +2962 2 break; +2963 2 case 6: +2964 2 display_current_cumulative(); +2965 2 break; +2966 2 case 7: +2967 2 display_current_batch(); +2968 2 break; +2969 2 case 8: +2970 2 display_total_batch(); +2971 2 break; +2972 2 case 9: +2973 2 clear_batch_cumulative(); +2974 2 break; +2975 2 } +2976 1 } +2977 //======================================================================================== +2978 void display_total_cumulative(void) +2979 { +2980 1 cumulative = 0; +2981 1 dp_flag=1; +2982 1 cumulative = RTC_Readlong(RTC_MEM_F1_cumulative) + RTC_Readlong(RTC_MEM_F2_cumulative) + RTC_Readlong(RT + -C_MEM_F3_cumulative)+ \ +2983 1 RTC_Readlong(RTC_MEM_F4_cumulative) + RTC_Readlong(RTC_MEM_F5_cumulative)+ RTC_Readlong(RTC + -_MEM_F6_TO_F36_cumulative); +2984 1 long2bcd(cumulative,8); +2985 1 #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) +2988 1 while(KeyPressed != enter && KeyPressed != mode) +2989 1 #endif +2990 1 {delay(2);} +2991 1 } +2992 //============================================================================================= +2993 void display_total_batch(void) +2994 { +2995 1 batch=(read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(RTC_MEM_F1_batch_LSB))+ +2996 1 (read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB))+ +2997 1 (read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB))+ +2998 1 (read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB))+ +2999 1 (read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB))+ +3000 1 (read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB)); +3001 1 +3002 1 disp(0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11); +3003 1 batch2bcd(batch,5); +3004 1 #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) +3007 1 while(KeyPressed != enter && KeyPressed != mode) +3008 1 #endif + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 50 + +3009 1 {delay(2);} +3010 1 } +3011 //=========================================================================================== +3012 void display_current_cumulative(void) +3013 { +3014 1 unsigned char sdat=1,b=0; +3015 1 +3016 1 function = read_RTC(RTC_MEM_current_recipe); +3017 1 shift_flag=0; +3018 1 if(function>6)sdat=1; +3019 1 else sdat=function; +3020 1 +3021 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +3024 1 while(KeyPressed == enter) +3025 1 #endif +3026 1 {delay(2);} +3027 1 disp(sdat,0x0C,0x11,0x11,0x11,0x11,0x11,0x11); //"1C" +3028 1 delay(500); +3029 1 //b=1; +3030 1 b=0; //Digit from left one +3031 1 dp_flag=1; +3032 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +3035 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +3036 1 #endif +3037 1 { +3038 2 blink(b,1); +3039 2 disp_data[b]=incdec(disp_data[b],6,1); +3040 2 //sdat = ((disp_data[0] & 0x0F) << 4 ) + (disp_data[1] & 0x0F); +3041 2 sdat = (disp_data[0] & 0xFF); +3042 2 sdat = bcd2int(sdat); +3043 2 //delay(100); +3044 2 if(sdat==1) +3045 2 cumulative = RTC_Readlong(RTC_MEM_F1_cumulative); +3046 2 else if(sdat==2) +3047 2 cumulative = RTC_Readlong(RTC_MEM_F2_cumulative); +3048 2 else if(sdat==3) +3049 2 cumulative = RTC_Readlong(RTC_MEM_F3_cumulative); +3050 2 else if(sdat==4) +3051 2 cumulative = RTC_Readlong(RTC_MEM_F4_cumulative); +3052 2 else if(sdat==5) +3053 2 cumulative = RTC_Readlong(RTC_MEM_F5_cumulative); +3054 2 else if(sdat==6) +3055 2 cumulative = RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); +3056 2 +3057 2 //bin2bcd(batch,5); +3058 2 //long2bcd(cumulative,8); +3059 2 bin2bcd(cumulative,6); +3060 2 } +3061 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +3064 1 while(KeyPressed == enter) +3065 1 #endif +3066 1 {delay(2);} +3067 1 +3068 1 /*if(function==1) +3069 1 { +3070 1 cumulative = RTC_Readlong(RTC_MEM_F1_cumulative); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 51 + +3071 1 } +3072 1 else if(function==2) +3073 1 { +3074 1 cumulative = RTC_Readlong(RTC_MEM_F2_cumulative); +3075 1 } +3076 1 else if(function==3) +3077 1 { +3078 1 cumulative = RTC_Readlong(RTC_MEM_F3_cumulative); +3079 1 } +3080 1 else if(function==4) +3081 1 { +3082 1 cumulative = RTC_Readlong(RTC_MEM_F4_cumulative); +3083 1 } +3084 1 else if(function==5) +3085 1 { +3086 1 cumulative = RTC_Readlong(RTC_MEM_F5_cumulative); +3087 1 } +3088 1 else if((function>=6) && (function<=36)) +3089 1 { +3090 1 cumulative = RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); +3091 1 } +3092 1 long2bcd(cumulative,8); +3093 1 #ifdef _6_key +3094 1 while(enter && mode) +3095 1 #elif defined( _4x4_key ) +3096 1 while(KeyPressed != enter && KeyPressed != mode) +3097 1 #endif +3098 1 {delay(2);} */ +3099 1 } +3100 //============================================================================================ +3101 void display_current_batch(void) +3102 { +3103 1 unsigned char sdat=1,b=0;; +3104 1 function = read_RTC(RTC_MEM_current_recipe); +3105 1 shift_flag=0; +3106 1 if(function>6)sdat=1; +3107 1 else sdat=function; +3108 1 +3109 1 #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) +3112 1 while(KeyPressed == enter) +3113 1 #endif +3114 1 {delay(2);} +3115 1 +3116 1 //disp(function/10,function%10,0x0F,0x11,0x11,0x11,0x11,0x11); +3117 1 disp(0x0B,sdat,0x1E,0x11,0x11,0x11,0x11,0x11); //"B1=" +3118 1 delay(500); +3119 1 b=1; +3120 1 //b=0; +3121 1 dp_flag=0; +3122 1 #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) +3125 1 while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) +3126 1 #endif +3127 1 { +3128 2 blink(b,1); +3129 2 disp_data[b]=incdec(disp_data[b],6,1); +3130 2 //sdat = ((disp_data[0] & 0x0F) << 4 ) + (disp_data[1] & 0x0F); +3131 2 sdat = (disp_data[1] & 0xFF); +3132 2 sdat = bcd2int(sdat); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 52 + +3133 2 //delay(100); +3134 2 if(sdat==1) +3135 2 batch=read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(RTC_MEM_F1_batch_LSB); +3136 2 else if(sdat==2) +3137 2 batch=read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB); +3138 2 else if(sdat==3) +3139 2 batch=read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB); +3140 2 else if(sdat==4) +3141 2 batch=read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB); +3142 2 else if(sdat==5) +3143 2 batch=read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB); +3144 2 else if(sdat==6) +3145 2 batch=read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB); +3146 2 +3147 2 //batch2bcd(batch,5); +3148 2 bin2bcd(batch,5); +3149 2 } +3150 1 #ifdef _6_key + while(!enter){delay(2);} + #elif defined( _4x4_key ) +3153 1 while(KeyPressed == enter) {delay(2);} +3154 1 #endif +3155 1 dp_flag=1; +3156 1 } +3157 //--------------------------------------------------------------------------- +3158 /*if(function==1) +3159 { +3160 batch=read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(RTC_MEM_F1_batch_LSB); +3161 } +3162 else if(function==2) +3163 { +3164 batch=read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB); +3165 } +3166 else if(function==3) +3167 { +3168 batch=read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB); +3169 } +3170 else if(function==4) +3171 { +3172 batch=read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB); +3173 } +3174 else if(function==5) +3175 { +3176 batch=read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB); +3177 } +3178 else if((function>=6) && (function<=36)) +3179 { +3180 batch=read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB); +3181 } +3182 disp(0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11); +3183 batch2bcd(batch,5); +3184 #ifdef _6_key +3185 while(enter && mode) +3186 #elif defined( _4x4_key ) +3187 while(KeyPressed != enter && KeyPressed != mode) +3188 #endif +3189 {delay(2);} +3190 }*/ +3191 //=============================================================================================== +3192 void clear_current_cumulative_batch(void) +3193 { +3194 1 disp(0x11,0x0C,0x16,0x0E,0x0A,0x13,0x11,0x11); + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 53 + +3195 1 #ifdef _6_key + while(tare && set && mode) + #elif defined( _4x4_key ) +3198 1 while(KeyPressed != tare &&KeyPressed != set && KeyPressed != mode) +3199 1 #endif +3200 1 { +3201 2 blink(0,8); +3202 2 } +3203 1 #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) +3206 1 if(KeyPressed == tare) +3207 1 #endif +3208 1 { +3209 2 cumulative=0; +3210 2 batch=0; +3211 2 if(function==1) +3212 2 { +3213 3 RTC_Writelong(RTC_MEM_F1_cumulative,cumulative); //cumulative clear +3214 3 write_RTC(RTC_MEM_F1_batch_MSB,batch/0x100); //batch clear +3215 3 write_RTC(RTC_MEM_F1_batch_LSB,batch%0x100); +3216 3 } +3217 2 else if(function==2) +3218 2 { +3219 3 RTC_Writelong(RTC_MEM_F2_cumulative,cumulative); //cumulative clear +3220 3 write_RTC(RTC_MEM_F2_batch_MSB,batch/0x100); //batch clear +3221 3 write_RTC(RTC_MEM_F2_batch_LSB,batch%0x100); +3222 3 } +3223 2 else if(function==3) +3224 2 { +3225 3 RTC_Writelong(RTC_MEM_F3_cumulative,cumulative); //cumulative clear +3226 3 write_RTC(RTC_MEM_F3_batch_MSB,batch/0x100); //batch clear +3227 3 write_RTC(RTC_MEM_F3_batch_LSB,batch%0x100); +3228 3 } +3229 2 else if(function==4) +3230 2 { +3231 3 RTC_Writelong(RTC_MEM_F4_cumulative,cumulative); //cumulative clear +3232 3 write_RTC(RTC_MEM_F4_batch_MSB,batch/0x100); //batch clear +3233 3 write_RTC(RTC_MEM_F4_batch_LSB,batch%0x100); +3234 3 } +3235 2 else if(function==5) +3236 2 { +3237 3 RTC_Writelong(RTC_MEM_F5_cumulative,cumulative); //cumulative clear +3238 3 write_RTC(RTC_MEM_F5_batch_MSB,batch/0x100); //batch clear +3239 3 write_RTC(RTC_MEM_F5_batch_LSB,batch%0x100); +3240 3 } +3241 2 else if((function>=6) && (function<=36)) +3242 2 { +3243 3 RTC_Writelong(RTC_MEM_F6_TO_F36_cumulative,cumulative); //cumulative clear +3244 3 write_RTC(RTC_MEM_F6_TO_F36_batch_MSB,batch/0x100); //batch clear +3245 3 write_RTC(RTC_MEM_F6_TO_F36_batch_LSB,batch%0x100); +3246 3 } +3247 2 } +3248 1 } +3249 //================================================================================================= +3250 void clear_batch_cumulative(void) +3251 { +3252 1 disp(0x11,0x0C,0x16,0x0E,0x0A,0x13,0x11,0x11); +3253 1 #ifdef _6_key + while(tare && set && mode) + #elif defined( _4x4_key ) +3256 1 while(KeyPressed != tare &&KeyPressed != set && KeyPressed != mode) + C51 COMPILER V9.60.7.0 MAIN 07/10/2026 17:02:30 PAGE 54 + +3257 1 #endif +3258 1 { +3259 2 blink(0,8); +3260 2 } +3261 1 #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) +3264 1 if(KeyPressed == tare) +3265 1 #endif +3266 1 { +3267 2 cumulative=0; +3268 2 batch=0; +3269 2 +3270 2 RTC_Writelong(RTC_MEM_F1_cumulative,cumulative); //F1 cumulative clear +3271 2 write_RTC(RTC_MEM_F1_batch_MSB,batch/0x100); //F1 batch clear +3272 2 write_RTC(RTC_MEM_F1_batch_LSB,batch%0x100); +3273 2 +3274 2 RTC_Writelong(RTC_MEM_F2_cumulative,cumulative); //F2 cumulative clear +3275 2 write_RTC(RTC_MEM_F2_batch_MSB,batch/0x100); //F2 batch clear +3276 2 write_RTC(RTC_MEM_F2_batch_LSB,batch%0x100); +3277 2 +3278 2 RTC_Writelong(RTC_MEM_F3_cumulative,cumulative); //F3 cumulative clear +3279 2 write_RTC(RTC_MEM_F3_batch_MSB,batch/0x100); //F3 batch clear +3280 2 write_RTC(RTC_MEM_F3_batch_LSB,batch%0x100); +3281 2 +3282 2 RTC_Writelong(RTC_MEM_F4_cumulative,cumulative); //F4 cumulative clear +3283 2 write_RTC(RTC_MEM_F4_batch_MSB,batch/0x100); //F4 batch clear +3284 2 write_RTC(RTC_MEM_F4_batch_LSB,batch%0x100); +3285 2 +3286 2 RTC_Writelong(RTC_MEM_F5_cumulative,cumulative); //F5 cumulative clear +3287 2 write_RTC(RTC_MEM_F5_batch_MSB,batch/0x100); //F5batch clear +3288 2 write_RTC(RTC_MEM_F5_batch_LSB,batch%0x100); +3289 2 +3290 2 RTC_Writelong(RTC_MEM_F6_TO_F36_cumulative,cumulative); //F6~F36 cumulative clear +3291 2 write_RTC(RTC_MEM_F6_TO_F36_batch_MSB,batch/0x100); //batch clear +3292 2 write_RTC(RTC_MEM_F6_TO_F36_batch_LSB,batch%0x100); +3293 2 } +3294 1 } +3295 //====================================================================================================== + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 17047 ---- + CONSTANT SIZE = 76 ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 48 36 + IDATA SIZE = 84 ---- + BIT SIZE = 39 3 +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.OBJ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..b81b8e254e15faafa826a58e67f8452c2aee233a GIT binary patch literal 160457 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 literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.c new file mode 100644 index 0000000..5a0420b --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/main.c @@ -0,0 +1,3295 @@ +//#pragma ot(9,size) +//#pragma nointpromote + +//#include +//#include + +#include +#include //Library Header Files. +#include +#include +#include +#include +//----------------------------------------------------------------------------- +#include +#include +#include +//#include +//-------------------------------------------------------------------------- +//define type of key board here +//#define _6_key +#define _4x4_key +//-------------------------------------------------------------------------- +//define type of ADC here +#define _AD7780 +//#define _HX711 +//-------------------------------------------------------------------------- +#ifdef _4x4_key + #undef _6_key +#endif +#ifdef _6_key + #undef _4x4_key +#endif +//--------------------------------------------------------------------------- +#ifdef _4x4_key + #include <4x4_key.h> +#endif +//---------------------------------------------------------------------------- +#ifdef _AD7780 + #include +#endif +#ifdef _HX711 + #include +#endif +//----------------------------------------------------------------------------- +void init(void); //Function declaration. +void pwd(void); +void blink(start,no); +void menu(void); +unsigned int bcd2bin(char no); +void val_read(char a); +void bin2bcd(unsigned int value,char no); +void process(void); +void tare_chk(void); +void zero_track(void); +void read_values(void); +/*void time_date(void);*/ +void display_value(void); +void check_keypad(void); +void check_switch(void); +void check_values(void); +/*void tare_entry(void); +void print_values(void); +void set_clear(void);*/ +void filter(void); +char incdec(char name,char max,char min); +void cal(void); +void cal_find(void); +void calibrate(void); +void cal_rst(void); +void average(void); +void add_values(void); +void settings(void); +void sys_paramts(void); +void self_test(void); +void defaults(void); +void load_eep_defaults(void); +void select_menu(void); +void disp_check(void); +void fill_count(void); +void display_total_cumulative(void); +void display_total_batch(void); +void clear_current_cumulative_batch(void); +void display_current_cumulative(void); +void display_current_batch(void); +void clear_batch_cumulative(void); +void recipe_menu(void); +//void memory_backup_restore(void); +//--------------------------------------------- +sbit start=P1^0; +sbit cal_en=P1^7; //calibration lock +//--------------------------------------------- +#ifdef _6_key //6 key + sbit set = P2^0; + sbit incr = P2^1; + sbit decr = P2^2; + sbit tare = P2^3; + sbit enter= P2^4; + sbit mode = P2^5; +#endif + +#ifdef _4x4_key //16 key + #define set 'A' + #define tare 'C' + #define enter 'D' + #define mode 'B' + //#define left '*' + //#define right '#' + #define incr '*' + #define decr '#' +#endif +//-------------------------------------------- +sbit cf1 =P1^4; +sbit cf2 =P1^1; +sbit ff =P1^2; +sbit waled=P1^3; + +sbit v_down_rly =P1^5; +sbit v_up_rly =P1^6; +//--------------------Variable declaration,Char.-------------------------- +unsigned char idata EEPROM_block = 0x00; + +unsigned char data temp_data[8],disp_data[8]; +unsigned char idata temp_pwd[4],dp_val=4; + +unsigned char code pswd1[2]={3,6},pswd2[2]={6,3},pswd3[2]={1,9}; +unsigned char code pswd4[2]={9,1},pswd5[2]={2,8},pswd6[2]={8,2}; +unsigned char code pswd7[2]={5,5},pswd8[2]={1,1},pswd9[2]={2,2}; +unsigned char code pswd10[2]={7,7},pswd11[2]={6,6},pswd12[2]={3,3},pswd13[2]={4,4}; +unsigned char code pass_F1[2]={1,0},pass_F2[2]={2,0},pass_F3[2]={3,0},pass_F4[2]={4,0},pass_F5[2]={5,0}; +unsigned char code pass_F6[2]={6,0},pass_F7[2]={7,0},pass_F8[2]={8,0},pass_F9[2]={9,0},pass_F10[2]={9,9}; +//unsigned char data sec,min,hr,dt,mon,yr; +//unsigned char data data_rd=0x40,ctr=0,active_cnt=10; +unsigned char idata ztwc=0,res,tare_cnt=0,mul_factor,div_factor,ztc; +unsigned char idata rng_val=0,mas,avg=0,t; +unsigned char idata avg_cnt=10,add_cnt=0,test_loc=0x12,function=1; +//unsigned char idata wait_val=1,drop_wait_val=1,drop_ctr=0,wait_ctr=0; +unsigned char idata wait_val=1,drop_wait_val=1; +unsigned int idata wait_ctr=0,drop_ctr=0; + +/*unsigned char code rng_array[7][3]={ + 10,16,8, + 10,24,12, + 10,32,16, + 10,44,22, + 10,64,32, + 10,84,42, + 10,104,52 }; */ + +unsigned char code rng_array[10][3]={ + 10,4,2, + 10,16,8, + 10,24,12, + 10,32,16, + 10,44,22, + 10,64,32, + 10,84,42, + 10,104,50, + 10,104,52, + 10,104,62 }; + +//unsigned char clk_lsb=0x60,clk_msb=0x18,gain=0x26; + +unsigned char data Adc_Value_LSB,Adc_Value_MSB,Adc_Value_MLSB,Status_Bits; + +unsigned char idata KeyPressed; +unsigned char idata start_count=0x00,start_delay=0x50; +unsigned char idata disp_count=0; +//--------------------Variable declaration,Int.--------------------------- +unsigned int idata fillset=0,cf=0,ffd=0,nfl=0,zset=0,htar=0,ltar=0; +unsigned int idata cfd1,cfd2; +unsigned int data tare_val=0,scale_val,help_val,temp_tare; +unsigned int idata disp_val=0,adc_val=0,filter_val=0,prev_val[5]={0,0,0,0,0},start_disp=0; +//unsigned int data prn_cap,prn_nett,prn_tare,prn_gross; +unsigned int idata bin_val,cal_val=0x2710,temp_val,on_time=100; +unsigned long int data temp,temp1,temp2,add_adc=0; + +unsigned long hold_counter = 0; + +unsigned long idata cumulative=0; +unsigned int idata batch=0,bset=0; +unsigned int idata batch_count=0; +//--------------------Variable declaration,Bit.--------------------------- +bit adc_pol=0,aco=0,tare_pol=0,disp_pol,dp_flag=0,c_flag=0; +bit wt_ach=0,zset_flag=0,ed=1,drop_flag=0; +bit start_flag=0,busy_flag=0,tare_flag=0,help_flag; +bit cal_flag=0,ave_ok,esc_flag=0,wa_flag=0,wait_flag=0,process_flag=0; +bit cf1_flag=0,cf2_flag=0,ff_flag=0,autotare=1,fill_start=0,adc_err=0; +bit recipe=0,grwt=0,auto_start=0,bset_enable=0,grwt_ok=0; +bit start_wait_flag=0,shift_flag=0,Instant_fill_enable=0; +bit set_enter_flag=0,rd_ok=0,start_status=0; + +bit Adc_Data_Ready,Adc_Status_bit73; +//-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=- +void main(void) +{ + init(); + rst_wdt(); + #ifdef _6_key + if(!tare) autotare=0; + #elif defined( _4x4_key ) + if(KeyPressed == tare) autotare=0; + #endif + dp_flag=0; + disp(0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11); + display_name(); + //delay(500); + read_values(); + dp_flag=0; + t=read_eeprom(EE_test_loc_Mem); + if(t != test_loc) + { + disp(0x0d,0x0e,0x0f,0x0a,0x1b,0x16,0x14,0x05); + #ifdef _6_key + while(enter && mode && set && decr && incr){delay(2);} + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode && KeyPressed != set) {delay(2);} + #endif + + #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + disp(0x11,0x16,0x17,0x0a,0x0d,0x01,0x18,0x09); + load_eep_defaults(); + delay(500); + } + } + //init_adc(); + #ifdef _AD7780 + init_adc_AD7780(); + #elif defined( _HX711 ) + init_adc_HX711(); + #endif + //delay(500); + clr_disp(); + + if(autotare) + { + disp_check(); + self_test(); + clr_disp(); + tare_flag=1; + disp(0x11,0x11,0x14,0x0a,0x13,0x0e,0x11,0x11); + delay(1000); + clr_disp(); + } + dp_flag=1; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + while(1) + { + /*if(aco) + { + aco=0; + //ctr=0; + add_values(); + add_cnt++; + if(add_cnt >= avg_cnt) + { + add_cnt=0; + average(); + //filter(); + //process(); + } + } */ + process(); + #ifdef _4x4_key + KeyPressed=Read_Keypad(); + #endif + check_keypad(); + check_switch(); + rst_wdt(); + check_values(); + disp_count++; + if(!help_flag && !tare_flag) + {if(disp_count>2){display_value(); disp_count=0;}} + //if(!help_flag && !tare_flag) display_value(); + //delay(5); + #ifdef _4x4_key + KeyPressed='x'; + #endif + } +} +//========================================================================================= +void init(void) +{ + //#if defined(_6_key) + #ifdef _6_key + P0=P1=P2=0xff; //when 6 key + TMOD=0x1D; + TH0=0x00; + TL0=0x00; + TCON=0x55; + IE=0x81; + IP=0x01; + SCON=0x00; + #elif defined( _4x4_key ) + P1=P2=0xff; //when using 4x4 key + TMOD=0x1D; + TH0=0x00; + TL0=0x00; + TCON=0x55; + IE=0x89; + IP=0x01; + TH1=0xFC; + TL1=0x66; + SCON=0x00; + #endif + + //--------------------------------------------------------------------- + //Following value Only when HX710/HX711 ADC used + //IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2) + IT0 = 0; // Configure interrupt 0 for low level triggered /INT0 (P3.2) + EX0 = 1; // Enable EX0 Interrupt + EA = 1; // Enable Global Interrupt Flag + //--------------------------------------------------------------------- + + cf1=0; + cf2=0; + ff=0; + waled=0; +} +//=============================================================================================== +void adcint0_isr(void) interrupt 0 +{ + Adc_Data_Ready=1; + //Get_Adc_Result(); + #ifdef _AD7780 + Get_Adc_Result_AD7780(); + #elif defined( _HX711 ) + Get_Adc_Result_HX711(); + #endif + aco=1; + + if(rd_ok) + { + rd_ok=0; + add_values(); + add_cnt++; + if(add_cnt >= avg_cnt) + { + add_cnt=0; + average(); + if(!start_flag)filter(); + //process(); + } + } + EX0 = 1; +} +//=============================================================================================== +#ifdef _4x4_key +void timer1_isr(void) interrupt 3 +{ + TR1=0; + KeyPressed=Read_Keypad(); + TL1=0x66; + //TH1=0xFc; + TH1=0x32; + TR1=1; +} +#endif +//=============================================================================================== +void read_values(void) +{ + unsigned char dat; + + //write_RTC(RTC_MEM_start_status,0x00); //pause auto start when power failure + start_status=0; + + dat=read_RTC(RTC_MEM_Auto_start_enable); //Auto start Enable / Disable. + if(dat==1)auto_start=1; + else auto_start=0; + + dat=read_RTC(RTC_MEM_recipe_enable); //Recipe enable/disabled + if(dat==1)recipe=1; + else recipe=0; + + dat=read_RTC(RTC_MEM_Instant_fill_enable); //instant fillset entry enabled/disabled + if(dat==1)Instant_fill_enable=1; + else Instant_fill_enable=0; + + //if(!recipe)function=1; + if(!recipe)write_RTC(RTC_MEM_current_recipe,0x01); + function = read_RTC(RTC_MEM_current_recipe); + + dat=read_RTC(RTC_MEM_gross_weight_enable); //Gross weight display enable/disable + if(dat==1)grwt=1; + else grwt=0; + + start_delay = read_RTC(RTC_MEM_start_delay); + + dat=read_RTC(RTC_MEM_batch_set_enable); //Batch filling set enabled/disabled + if(dat==1)bset_enable=1; + else bset_enable=0; + bset=read_RTC(RTC_MEM_batch_set_MSB)*100 + read_RTC(RTC_MEM_batch_set_LSB); //batch set(no.of filling to be done) + rst_wdt(); + //------------------------------------------------------------------------------------ + if(function>0 && function<=9) {EEPROM_block = Block_0;dat = function;} + else if(function>9 && function<=18) {EEPROM_block = Block_1;dat=(function-9);} + else if(function>18 && function<=27) {EEPROM_block = Block_2;dat=(function-18);} + else if(function>27 && function<=36) {EEPROM_block = Block_3;dat=(function-27);} + //-------------------------------------------------------------------------------------- + if(Instant_fill_enable) //if instant fillset entry enabled + fillset=read_RTC(RTC_fillset_MSB) *0x100 + read_RTC(RTC_fillset_LSB); + else //if instant fillset entry disabled + fillset=read_eeprom(0x10*dat) *0x100 + read_eeprom((0x10*dat)+0x01); + + cf=read_eeprom((0x10*dat)+0x02) *0x100 + read_eeprom((0x10*dat)+0x03); + ffd=read_eeprom((0x10*dat)+0x04) *0x100 + read_eeprom((0x10*dat)+0x05); + nfl=read_eeprom((0x10*dat)+0x06) *0x100 + read_eeprom((0x10*dat)+0x07); + htar=read_eeprom((0x10*dat)+0x08) *0x100 + read_eeprom((0x10*dat)+0x09); + ltar=read_eeprom((0x10*dat)+0x0A) *0x100 + read_eeprom((0x10*dat)+0x0B); + dat=read_eeprom((0x10*dat)+0x0C); + if(dat==0) ed=0; + else ed=1; + //----------------------------------------------------------------------- + EEPROM_block = Block_0; //Following parameters in block0 of EEPROM + + cal_val=read_eeprom(EE_cal_val_Mem_MSB)*0x100 + read_eeprom(EE_cal_val_Mem_LSB); + zset=read_eeprom(EE_zset_Mem_MSB)*0x100 + read_eeprom(EE_zset_Mem_LSB); + + rng_val=read_eeprom(EE_rng_val_Mem); + res=read_eeprom(EE_res_Mem); + mas=read_eeprom(EE_mas_Mem); + ztc=read_eeprom(EE_ztc_Mem); + dp_val=read_eeprom(EE_dp_val_mem); + + avg=read_eeprom(EE_avg_Mem); + avg_cnt=3*(10-avg); + rst_wdt(); + div_factor=rng_array[rng_val][0]; + mul_factor=rng_array[rng_val][1]; + help_val=(rng_array[rng_val][2] * 1000) + (res * 9); + //help_val=20090; + + wait_val=read_eeprom(EE_wait_val_Mem); + drop_wait_val=read_eeprom(EE_drop_wait_val_Mem); + //on_time=read_eeprom(EE_on_time_Mem) * 100; + on_time=read_eeprom(EE_on_time_Mem) * 10; + //---------------------------------------------------------------------- + /*cfd1=fillset-ffd; + cfd2=fillset-ffd; + //ffd=fillset-ffd;*/ + + //cfd1=fillset-cf; + cfd1=fillset-ffd; + cfd2=fillset-ffd; + + start_wait_flag=0; +} +//============================================================================================= +void self_test(void) +{ + unsigned char dat,i; + bit aok=0; + + disp(0x05,0x0e,0x16,0x0f,0x14,0x0e,0x05,0x14); + delay(500); + //-------------------------------------------- + //EEPROM test + disp(0x11,0x1a,0x0e,0x1a,0x17,0x13,0x1c,0x11); + delay(500); + dat=read_eeprom(EE_test_loc_Mem); + if(dat==test_loc) + disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS" + else + { + disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + //defaults(); + } + delay(500); + //-------------------------------------------- + //RTC test + disp(0x11,0x11,0x13,0x14,0x0C,0x11,0x11,0x11); + delay(500); + dat=read_RTC(RTC_MEM_status); + if(dat==test_loc) + disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS" + else + { + disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + //defaults(); + } + delay(500); + //--------------------------------------------- + //ADC test + disp(0x11,0x11,0x0a,0x0d,0x0c,0x11,0x11,0x11); + //delay(1000); + aco=0; + for(i=0;i<255;i++) + { + if(aco) + { + aco=0; + aok=1; + } + delay(4); + } + if(aok) + { + disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS" + adc_err=0; + } + else + { + disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); //"Fail" + adc_err=1; + } + delay(500); +} +//======================================================================================= +void disp_check(void) +{ + char i; + for(i=0;i<10;i++) + { + disp(i,i,i,i,i,i,i,i); + delay(200); + } +} +//====================================================================================== +void defaults(void) +{ + fillset=1000; + //cf=800; + //ffd=950; + cf=200; + ffd=50; + nfl=0; + zset=10; + htar=100; + ltar=0; + ed=1; + avg=9; + avg_cnt=3*(10-avg); + +// cal_val=0x2710; + + //RCAP2L=clk_array[spd]; + + rng_val=1; //2 for 20 Kg,4 for 50 Kg. + res=05; + mas=1; + ztc=1; + dp_val=4; + + div_factor=rng_array[rng_val][0]; + mul_factor=rng_array[rng_val][1]; + //help_val=20090; + help_val=(rng_array[rng_val][2] * 1000) + (res * 9); + + /*cfd1=cf; + cfd2=cf; + ffd=cf;*/ + + wait_val=3; + drop_wait_val=2; + on_time=30; +} +//======================================================================================= +void load_eep_defaults(void) +{ + unsigned char rcpe=0,dat=0x01; + disp(0x0d,0x0e,0x0f,0x0a,0x1b,0x16,0x14,0x05); + delay(3000); + defaults(); + disp(0x16,0x17,0x0a,0x0d,0x01,0x18,0x09,0x10); + write_eeprom(EE_test_loc_Mem,test_loc); + write_RTC(RTC_MEM_current_recipe,0x01); + //------------------------------------------------------------- + for(rcpe=1;rcpe<=36;rcpe++) + { + if(rcpe>0 && rcpe<=9) {EEPROM_block = Block_0; dat=rcpe;} + else if(rcpe>9 && rcpe<=18) {EEPROM_block = Block_1; dat=(rcpe-9);} + else if(rcpe>18 && rcpe<=27) {EEPROM_block = Block_2; dat=(rcpe-18);} + else if(rcpe>27 && rcpe<=36) {EEPROM_block = Block_3; dat=(rcpe-27);} + + write_eeprom((0x10*dat),fillset / 0x100); + write_eeprom((0x10*dat)+0x01,fillset % 0x100); + write_eeprom((0x10*dat)+0x02,cf / 0x100); + write_eeprom((0x10*dat)+0x03,cf % 0x100); + write_eeprom((0x10*dat)+0x04,ffd / 0x100); + write_eeprom((0x10*dat)+0x05,ffd % 0x100); + write_eeprom((0x10*dat)+0x06,nfl / 0x100); + write_eeprom((0x10*dat)+0x07,nfl % 0x100); + write_eeprom((0x10*dat)+0x08,htar / 0x100); + write_eeprom((0x10*dat)+0x09,htar % 0x100); + write_eeprom((0x10*dat)+0x0A,ltar / 0x100); + write_eeprom((0x10*dat)+0x0B,ltar % 0x100); + write_eeprom((0x10*dat)+0x0C,0x01); + blink(7,1); + rst_wdt(); + } + //-------------------------------------------------------------------- + EEPROM_block = Block_0; //following values store in first 16 bytes of block0 + + write_eeprom(EE_zset_Mem_MSB,zset / 0x100); + write_eeprom(EE_zset_Mem_LSB,zset % 0x100); + + write_eeprom(EE_rng_val_Mem,rng_val); + write_eeprom(EE_res_Mem,res); + write_eeprom(EE_mas_Mem,mas); + write_eeprom(EE_ztc_Mem,ztc); + write_eeprom(EE_dp_val_mem,dp_val); + write_eeprom(EE_avg_Mem,avg); + +// write_eeprom(EE_cal_val_Mem_MSB,0x27); +// write_eeprom((EE_cal_val_Mem_LSB),0x10); + + write_eeprom(EE_wait_val_Mem,wait_val); + write_eeprom(EE_drop_wait_val_Mem,drop_wait_val); + write_eeprom(EE_on_time_Mem,on_time); + //---------------------------------------------------------------- + write_RTC(RTC_MEM_Auto_start_enable,0x00); //Auto start disable + write_RTC(RTC_MEM_recipe_enable,0x00); //Recipe disable + write_RTC(RTC_MEM_gross_weight_enable,0x00); //Gross weight display disable + write_RTC(RTC_MEM_start_delay,0x37); //Auto start delay + write_RTC(RTC_MEM_batch_set_enable,0x00);//Batch filling disabled + write_RTC(RTC_MEM_status,test_loc); //RTC_memory status + write_RTC(RTC_MEM_Instant_fill_enable,0x00);//Instant filling disabled + //---------------------------------------------------------------- + read_values(); + clr_disp(); +} +//======================================================================================= +void add_values(void) +{ + add_adc = add_adc + adc_val; +} +//======================================================================================= +void average(void) +{ + filter_val = add_adc / avg_cnt; + add_adc=0; +} +//======================================================================================= +void filter(void) +{ + unsigned char i; + bit ave_ok=1; + + for(i=4;i>0;i--) prev_val[i]=prev_val[i-1]; + prev_val[0]=filter_val; + + for(i=0;i<4;i++) + { + if(abs(prev_val[i] - prev_val[i+1]) > 5) ave_ok=0; + } + + if(ave_ok) + { + temp=0; + for(i=0;i<5;i++) temp = temp + (long int)prev_val[i]; + temp = temp / 0x05; + filter_val = (unsigned int)temp; + } +} +//====================================================================================== +void process(void) +{ + /*temp=(unsigned long int)filter_val * (unsigned long int)mul_factor; + temp=temp / (unsigned long int)div_factor; + temp=temp/10; + scale_val = (unsigned int)temp;*/ + scale_val = filter_val; + tare_chk(); + rst_wdt(); + zero_track(); + if(!c_flag) + { + cal_find(); + calibrate(); + } + if(disp_val > help_val && autotare) + { + dp_flag=0; + rst_wdt(); + help_flag=1; + disp(0x11,0x11,0x15,0x0e,0x16,0x12,0x11,0x11); //"Help" + blink(0,8); + dp_flag=1; + } + else help_flag=0; + + if(adc_err) + { + dp_flag=0; + rst_wdt(); + help_flag=1; + disp(0x11,0x0a,0x0d,0x0c,0x11,0x0e,0x13,0x13); //"ADC err" + blink(0,8); + dp_flag=1; + } +} +//==================================================================================== +void tare_chk(void) +{ + if(tare_flag) //tare switch.. + { + tare_val=scale_val; + tare_pol=adc_pol; + if(++tare_cnt>3) + { + tare_flag=0; + tare_cnt=0; + } + } + +// Deducting tare value. + + if(tare_pol != adc_pol) + { + disp_val = scale_val + tare_val; + disp_pol = adc_pol; + } + else + { + if(scale_val > tare_val) + { + disp_pol = adc_pol; + disp_val = scale_val - tare_val; + } + else + { + disp_pol = ~(adc_pol); + disp_val = tare_val - scale_val; + } + } + + /* if(scale_val >= tare_val) + { + disp_pol = 1; + disp_val = scale_val - tare_val; + } + else + { + disp_pol = 0; + disp_val = tare_val - scale_val; + }*/ + +} +//================================================================================== +void zero_track(void) +{ + if(disp_val <= ztc) ztwc++; + else ztwc = 0; + + if(ztwc > 3) + { + tare_val = scale_val; + tare_pol = adc_pol; + ztwc = 0; + } +} +//================================================================================= +void bin2bcd(unsigned int value,char no) +{ + char i; // Converts a bin value to bcd & display. + // char no determines how many digits to be + for(i=7;i>=(8-no);i--) // displayed. + { + disp_data[i]=value % 10; + value=value / 10; + } + display(); +} +//================================================================================= +void display_value(void) +{ + unsigned int value; + char i; // Converts a bin value to bcd & display. + // char no determines how many digits to be + // displayed. + //disp_val=(disp_val/res)*res; + //value=disp_val; + value=(disp_val/res)*res; + for(i=7;i>=3;i--) + { + disp_data[i]=value % 10; + value=value / 10; + } + + if(disp_data[3]==0x00)disp_data[3]=0x11; + if(disp_pol) disp_data[3]=0x10; //"-" sign + + disp_data[7] = (disp_data[7] / res) * res; + + if(disp_val <= (mas * res)) + { + disp_data[7]=0x00; + disp_data[6]=0x00; + disp_data[3]=0x11; + disp_pol=0; + } + if(disp_val==0x00) + { + disp_data[0]=0x11; + disp_data[1]=0x11; + disp_data[2]=0x11; + disp_data[3]=0x11; + } + + if(cf1_flag) + { + disp_data[0]=0x0c; + disp_data[1]=0x01; // Display "CF1". + disp_data[2]=0x11; + } + else if(cf2_flag) + { + disp_data[0]=0x0c; + disp_data[1]=0x02; // Display "CF2". + disp_data[2]=0x11; + } + else if(ff_flag) + { + disp_data[0]=0x0f; + disp_data[1]=0x0f; + disp_data[2]=0x11; // Display "FF". + } + else if(start_wait_flag && !wa_flag) + { + disp_data[0]=0x0A; + disp_data[1]=0x05; // Display "ast". + disp_data[2]=0x14; + } + else if(wa_flag) + { + if(grwt && grwt_ok) //Gross weight display + { + disp_data[0]=0x19; + disp_data[1]=0x1D; // Display "Gross weight". + disp_data[2]=0x14; + } + else + { + disp_data[0]=0x05; + disp_data[1]=0x0a; // Display "SA". + disp_data[2]=0x11; + } + } + else + { + if(!recipe) + { + disp_data[0]=0x13; + disp_data[1]=0x0d; // Display "RDY". + disp_data[2]=0x1c; + } + else + { + //disp_data[1]=function; // Display "F1 ~ F5". + //disp_data[2]=0x11; + if(function<=9) + { + disp_data[0]=0x0F; //Display "F" + disp_data[1]=function % 10; + //disp_data[0]=function / 10; + disp_data[2]=0x11; + } + else + { + disp_data[1]=function % 10; + disp_data[0]=function / 10; + disp_data[2]=0x0F; //Display "F" + //disp_data[2]=0x1E; //Display "=" + } + } + } + display(); +} +//========================================================================================== +void check_keypad(void) // Keypad checking routine. +{ + unsigned char sdat=0,b=0; + //----------------------------------------------------------------------- + #ifdef _6_key + if(!shift_flag && !set && !process_flag) // SET key for value entry. + #elif defined( _4x4_key ) + if(!shift_flag && KeyPressed==set && !process_flag) + #endif + { // Asks password,go to appropriate routines + dp_flag=0; // on entry of password. + rst_wdt(); + pwd(); + rst_wdt(); + arr_cpy(&temp_pwd[0],&disp_data[6],2); + // arr_cpy(&temp_pwd[0],&disp_data[4],4); + //if(arr_cmp(pswd1,temp_pwd,4)&& !recipe) menu(); //Pswd. 36 (if recipe disabled) + #ifdef _6_key + if(arr_cmp(pswd1,temp_pwd,2))do{if(recipe)recipe_menu(); if(!mode){while(!mode){dp_flag=1;}return;} menu();if(!recipe)return;}while(mode); + #elif defined( _4x4_key ) +// if(arr_cmp(pswd1,temp_pwd,2))do{if(recipe)recipe_menu(); if(KeyPressed==mode){while(KeyPressed==mode){dp_flag=1;}return;} menu();if(!recipe)return;}while(KeyPressed!=mode); + if(arr_cmp(pswd1,temp_pwd,2))do{if(recipe)recipe_menu(); if(KeyPressed==mode){while(KeyPressed==mode){ KeyPressed = 'X'; dp_flag=1;}return;} menu();if(!recipe)return;}while(KeyPressed!=mode); + + #endif + else if(arr_cmp(pswd2,temp_pwd,2)) cal(); //Pswd. 63 + // else if(arr_cmp(pswd3,temp_pwd,2)) cal_rst(); //Pswd. 19 +// else if(arr_cmp(pswd3,temp_pwd,2)) memory_backup_restore(); //Pswd. 19 + else if(arr_cmp(pswd4,temp_pwd,2)) settings(); //Pswd. 91 + else if(arr_cmp(pswd5,temp_pwd,2)) sys_paramts(); //Pswd. 28 + else if(arr_cmp(pswd6,temp_pwd,2)) load_eep_defaults(); //Pswd. 82 + else if(arr_cmp(pswd7,temp_pwd,2)) select_menu(); //Pswd. 55 + else if(arr_cmp(pswd8,temp_pwd,2)) display_total_cumulative(); //Pswd. 11 + else if(arr_cmp(pswd9,temp_pwd,2)) display_current_batch(); //Pswd. 22 + else if(arr_cmp(pswd10,temp_pwd,2)) clear_current_cumulative_batch(); //Pswd. 77 + else if(arr_cmp(pswd11,temp_pwd,2)) display_current_cumulative(); //Pswd. 66 + else if(arr_cmp(pswd12,temp_pwd,2)) clear_batch_cumulative(); //Pswd. 33 + else if(arr_cmp(pswd13,temp_pwd,2)) display_total_batch(); //Pswd. 44 + else if(arr_cmp(pass_F1,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x01); menu();}} //Pswd. 10 + else if(arr_cmp(pass_F2,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x02); menu();}} //Pswd. 20 + else if(arr_cmp(pass_F3,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x03); menu();}} //Pswd. 30 + else if(arr_cmp(pass_F4,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x04); menu();}} //Pswd. 40 + else if(arr_cmp(pass_F5,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x05); menu();}} //Pswd. 50 + else if(arr_cmp(pass_F6,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x06); menu();}} //Pswd. 60 + else if(arr_cmp(pass_F7,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x07); menu();}} //Pswd. 70 + else if(arr_cmp(pass_F8,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x08); menu();}} //Pswd. 80 + else if(arr_cmp(pass_F9,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x09); menu();}} //Pswd. 90 + else if(arr_cmp(pass_F10,temp_pwd,2)){if(recipe){write_RTC(RTC_MEM_current_recipe,0x0A); menu();}} //Pswd. 99 + + else disp(0x11,0x11,0x0e,0x13,0x13,0x17,0x13,0x11); //"error" + delay(1000); // Don't check for SET & TARE sw while in start + clr_disp(); // mode. + dp_flag=1; + } + rst_wdt(); + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //tare switch pressed + #ifdef _6_key + if(!tare && !process_flag) + #elif defined( _4x4_key ) + if(KeyPressed == tare && !process_flag) + #endif + { + disp(0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10); //"-----" + #ifdef _6_key + while(!tare) {delay(2);} + #elif defined( _4x4_key )// {delay(2);} + while(KeyPressed == tare) {delay(2);} + #endif + tare_flag=1; + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Instant fillset direct entry option + #ifdef _6_key + if(!shift_flag && !decr && !process_flag) //fillset direct entry + #elif defined( _4x4_key ) + if(!shift_flag && KeyPressed == decr && !process_flag) + #endif + { + shift_flag=0; + if(Instant_fill_enable) + { + disp(0x0F,0x01,0x16,0x00,0x00,0x00,0x00,0x00); + bin2bcd(fillset,5); // Fill set + delay(500); + val_read(5); + temp=bcd2bin(5); + //if(t<=15000) + if(temp > (rng_array[rng_val][2] * 1000) ) + { + disp(0x11,0x11,0x0e,0x13,0x13,0x17,0x13,0x11); + delay(1000); + clr_disp(); + } + else + { + start_status=0; //TO STOP AUTO START AND TO READ FULL VALUR FROM EEPROM + fillset=(temp/res)*res; + write_RTC(RTC_fillset_MSB,fillset/0x100); + write_RTC(RTC_fillset_LSB,fillset%0x100); + } + } + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //shift key pressed and press "set" or "enter" or "dec" key for short cut + #ifdef _6_key + if(!incr && !process_flag && !shift_flag) + #elif defined( _4x4_key ) + if(KeyPressed == incr && !process_flag && !shift_flag) + #endif + { + shift_flag=1; + #ifdef _6_key + while(!incr) + #elif defined( _4x4_key ) + while(KeyPressed == incr) + #endif + {delay(2);} + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Shift and set key for Set fill parameters. + #ifdef _6_key + if(shift_flag && !set && !process_flag) + #elif defined( _4x4_key ) + if(shift_flag && KeyPressed == set && !process_flag) + #endif + { + #ifdef _6_key + while(!set) + #elif defined( _4x4_key ) + while(KeyPressed == set) + #endif + {delay(2);} + shift_flag=0; + sys_paramts(); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Set batch count to be filled. shift and enter + #ifdef _6_key + if(shift_flag && !enter && !process_flag && bset_enable) + #elif defined( _4x4_key ) + if(shift_flag && KeyPressed == enter && !process_flag && bset_enable) + #endif + { + shift_flag=0; + dp_flag=0; + disp(0x0B,0x05,0x0E,0x14,0x11,0x11,0x11,0x11); //"bset" + bset=read_RTC(RTC_MEM_batch_set_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_LSB); + bin2bcd(bset,4); + delay(500); + val_read(4); + bset = bcd2bin(4); + + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + //if(KeyPressed != set) + #endif + { + write_RTC(RTC_MEM_batch_set_MSB,bset / 0x100); //bset value fixed memory + write_RTC(RTC_MEM_batch_set_LSB,bset % 0x100); + + write_RTC(RTC_MEM_batch_set_count_MSB,bset / 0x100); //count down bset memory + write_RTC(RTC_MEM_batch_set_count_LSB,bset % 0x100); + } + dp_flag=1; + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Recipe selection. Only mode key press + #ifdef _6_key + //if(!mode && !process_flag && recipe) + if(!mode && !process_flag && recipe && !start_status) + #elif defined( _4x4_key ) + //if(KeyPressed == mode && !process_flag && recipe) + if(KeyPressed == mode && !process_flag && recipe && !start_status) + #endif + { +rtn: + function = read_RTC(RTC_MEM_current_recipe); + shift_flag=0; + if(function<1)function=1; + disp(function/10,function%10,0x0F,0x11,0x11,0x11,0x11,0x11); + //disp(function/10,function%10,0x1E,0x11,0x11,0x11,0x11,0x11); //"01=" + delay(500); + b=1; + //b=0; + dp_flag=1; + #ifdef _6_key + while(enter && set) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set) + #endif + { + //blink(1,2); + //disp_data[1]=incdec(disp_data[1],5,1); + blink(b,1); + disp_data[b]=incdec(disp_data[b],9,0); + //dat = (char)bcd2bin(2); + //sdat = ((disp_data[1] & 0x0F) << 4 ) + (disp_data[2] & 0x0F); + sdat = ((disp_data[0] & 0x0F) << 4 ) + (disp_data[1] & 0x0F); + sdat = bcd2int(sdat); + + #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) + if(('S' == KeyPressed) || (KeyPressed == tare)) + #endif + { // blinking digit to right. + b++; + //if(b>7) b=8-2; + //if(b>2) b=1; + if(b>1) b=0; + #ifdef _4x4_key + KeyPressed = 'X'; //clear keyPressed + #endif + } + #ifdef _4x4_key + //if(sdat > 36){disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11);delay(500);sdat=1;goto rtn;} + if(sdat > 36){disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11);delay(500);sdat=36;} //"error" + #endif + delay(100); + if(sdat>0 && sdat<=9) + {EEPROM_block = Block_0;fillset=read_eeprom((0x10*sdat)) *0x100 + read_eeprom((0x10*sdat)+0x01);} + else if(sdat>9 && sdat<=18) + {EEPROM_block = Block_1;fillset=read_eeprom(0x10*(sdat-9)) *0x100 + read_eeprom((0x10*(sdat-9))+0x01);} + else if(sdat>18 && sdat<=27) + {EEPROM_block = Block_2;fillset=read_eeprom(0x10*(sdat-18)) *0x100 + read_eeprom((0x10*(sdat-18))+0x01);} + else if(sdat>27 && sdat<=36) + {EEPROM_block = Block_3;fillset=read_eeprom(0x10*(sdat-27)) *0x100 + read_eeprom((0x10*(sdat-27))+0x01);} + bin2bcd(fillset,5); // display selected receipe Fill set + } + #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + if(sdat>36 || sdat<1) + { + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); //"error" + delay(500); + sdat = 36; + goto rtn; + } + else + { + write_RTC(RTC_MEM_current_recipe,(sdat*0x01)); + function = read_RTC(RTC_MEM_current_recipe); + read_values(); + delay(500); + } + } + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + } + //------------------------------------------------- + // display batch_count left to be filled + #ifdef _6_key + if(shift_flag && !decr && !process_flag && bset_enable) + #elif defined( _4x4_key ) + if(shift_flag && KeyPressed == decr && !process_flag && bset_enable) + #endif + { + dp_flag=0; + batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_count_LSB); + disp(0x0B,0x0C,0x18,0x14,0x11,0x11,0x11,0x11); //"bcnt" + bin2bcd(batch_count,4); + delay(3000); + dp_flag=1; + } + //------------------------------------------------- + // display current batch number filled + #ifdef _6_key + if(!shift_flag && !decr && !process_flag && !Instant_fill_enable && bset_enable) + #elif defined( _4x4_key ) + if(!shift_flag && KeyPressed == decr && !process_flag && !Instant_fill_enable && bset_enable) + #endif + { + display_current_batch(); + } +} +//============================================================================================================== +void check_switch(void) +{ + unsigned char dat=0,stop=0; + + if(set_enter_flag){read_values(); set_enter_flag=0;} //If entered any settings read all values +bgn: + //if(start_flag) // if filling or auto start + #ifdef _6_key + if((start_flag || start_status) && (!mode)) + #elif defined( _4x4_key ) + if((start_flag || start_status) && (KeyPressed==mode)) + #endif + { + hold_counter++; + + if (hold_counter >= 1200) + { + + dp_flag=0; + disp(0x0A,0x0B,0x17,0x13,0x14,0x11,0x11,0x11); // "Abort" + ff=0; + cf1=0; + cf2=0; + waled=0; + cf1_flag=0; + cf2_flag=0; + ff_flag=0; + wa_flag=0; + start_flag=0; + drop_flag=0; + tare_val=temp_tare; + + avg_cnt=3*(10-avg); + add_cnt=0; + add_adc=0; + + process_flag=0; + //write_RTC(RTC_MEM_start_status,0x00); //pause auto start + start_status=0; + disp(0x0A,0x0B,0x17,0x13,0x14,0x0E,0x0D,0x11); // "Aborted" + delay(2000); + dp_flag=1; + + + while (Read_Keypad() == mode); + hold_counter = 0; // Reset counter for next press + } + + } +else // if not filling + { + hold_counter = 0; + + + // Manual start Only first time after power on in auto mode + //if(auto_start && !process_flag &&(read_RTC(RTC_MEM_start_status)==0x00)) + if(auto_start && !process_flag && !start_status) + { + //dp_flag=0; + //disp(0x11,0x05,0x14,0x0A,0x13,0x14,0x11,0x11); //start + //blink(0,8); + start_wait_flag=1; + if(!start) // if start button pressed + { + read_values(); + //start_wait_flag=0; + if(bset_enable) {batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_count_LSB);} + + if(batch_count<1 && bset_enable) + { + //disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x17,0x13); // batch over + disp(0x0B,0x11,0x11,0x0e,0x13,0x13,0x11,0x11); //b err + delay(1000); + return; + } + //else if(batch_count>0 && bset_enable) start_wait_flag=0; + //write_RTC(RTC_MEM_start_status,0x01); + start_wait_flag=0; + start_status=1; + goto srt; + } + } + // continuous auto start(filling) in auto mode if started + //if(auto_start && !process_flag && (read_RTC(RTC_MEM_start_status) == 0x01)) + if(auto_start && !process_flag && start_status) + { + if((disp_val <= htar && disp_val >= ltar) && !disp_pol) + { + if(start_count == 0) start_disp = disp_val; + if(start_disp == disp_val)start_count++; + else start_count = 0; + if(start_count >= start_delay*4) + { + start_count = 0; + goto srt; + } + } + } + //Manual start + if(!start && !process_flag && !disp_pol) // Checking of Start button. + { + read_values(); + if(bset_enable) {batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_count_LSB);} + + if(batch_count<1 && bset_enable) + { + //disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x17,0x13); // batch over + disp(0x0B,0x11,0x11,0x0e,0x13,0x13,0x11,0x11); //b err + delay(1000); + return; + } +//srt: if(cf>=fillset || ffd>=fillset || nfl>=(fillset-ffd) || zset>=fillset || ltar>=htar) +//srt:if(cf>=fillset || ffd>=cf || nfl>=ffd || zset>=fillset || ltar>=htar) +srt:if(ffd>=fillset || nfl>=ffd || zset>=fillset || ltar>=htar) + { + rst_wdt(); + dp_flag=0; + disp(0x05,0x0e,0x14,0x11,0x0e,0x13,0x13,0x11); + delay(500); + dp_flag=1; + //write_RTC(RTC_MEM_start_status,0x00);// Error in setting pause auto start + start_status=0; + goto bgn; + } + else + { + if(ed && (disp_val <= htar && disp_val >= ltar) && !disp_pol) + { + fill_start=1; // Condition for filling to be started. + temp_tare=tare_val; // If in tare enable mode, store current + tare_val=scale_val; // tare value in a temp loc and tare + } // the display value. + else if(!ed && !disp_pol) + { + fill_start=1; + temp_tare=tare_val; + } + else fill_start=0; + + process(); //To calculate scale value using new tare value + + if(fill_start) + { + fill_start=0; + start_flag=1; + process_flag=1; + delay(100); + ff=1; + delay(50); + cf2=1; // Filling started.,CF1,CF2,FF all ON. + delay(50); + cf1=1; + cf1_flag=1; + cf2_flag=1; + ff_flag=1; + + avg_cnt=1*(10-avg); + add_cnt=0; // No averaging, since in course feed. + add_adc=0; + } + else + { + dp_flag=0; + disp(0x14,0x0a,0x13,0x0e,0x11,0x0e,0x13,0x13); + delay(500); // Display tare error. + dp_flag=1; + } + } + } + } +} +//======================================================================================= +void check_values(void) +{ +if(process_flag) + { + if(start_flag && !drop_flag && !disp_pol) + { + if(disp_val >= cfd1) //CF2 condition.(CF2 & FF ON, CF1 OFF) + { + cf1=0; // normal operation + /*if(cf1_flag) + { + ff=0; + }*/ + cf1_flag=0; + } + if(disp_val >= cfd2) + { // FF condition.(FF ON, CF1 & CF2 OFF) + if(cf2_flag) + { + //avg_cnt=2*(10-avg); + avg_cnt=1*(10-avg); + add_cnt=0; // In FF 2 count averaging. + add_adc=0; + //ff=1; + } + cf1=0; + cf2=0; // normal operation + cf2_flag=0; + } + if((disp_val + nfl) >= fillset) + { + ff=0; + wait_flag=1; + } // Final value is reached.but, + } + + if(wait_flag) // should wait for some time + { // for liquid to be settled. + wait_ctr++; + //delay(10); //if necessary enable + //if(wait_ctr >= wait_val*10) + if(wait_ctr >= wait_val*100) + { + wait_ctr=0; + drop_flag=1; + wait_flag=0; + } + } + + if(drop_flag && !disp_pol) + { + /*if(disp_val < cfd2) // After waiting time if value is + { // less than CF2 value,Turn ON CF2. + cf1=0; + cf1_flag=0; + cf2=1; + cf2_flag=1; + ff=1; + ff_flag=1; + drop_flag=0; + } */ + if((disp_val + nfl) < fillset) // After waiting time if value is + { // less than FF value,Turn ON FF. + ff=1; + drop_flag=0; + } + else if(disp_val < fillset) + { + drop_ctr++; + //if(drop_ctr >= drop_wait_val) + if(drop_ctr >= drop_wait_val*100) + { + drop_ctr=0; // Else, + ff=1; // Final stage of filling. + delay(on_time); // Proceeds drop by drop for accuracy. + ff=0; + } + } + else + { + waled=1; + wa_flag=1; // Weight is acheived. + start_flag=0; + drop_ctr=0; + drop_flag=0; + cf1=0; + cf1_flag=0; + cf2=0; + cf2_flag=0; + ff=0; + ff_flag=0; + wait_ctr=0; + wait_flag=0; + + avg_cnt=3*(10-avg); + add_cnt=0; + add_adc=0; + //------------------------batch set-------------------------------------------------------------- + batch_count=read_RTC(RTC_MEM_batch_set_count_MSB)*0x100 + read_RTC(RTC_MEM_batch_set_count_LSB); + batch_count--; + write_RTC(RTC_MEM_batch_set_count_MSB,batch_count / 0x100); + write_RTC(RTC_MEM_batch_set_count_LSB,batch_count % 0x100); + //------------------------------------------------------------------------------------------------ + if(function == 1) + { + cumulative = RTC_Readlong(RTC_MEM_F1_cumulative); + cumulative = cumulative + (unsigned long)((disp_val/res)*res); + if(cumulative > 99999999) cumulative = 0; + //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; + RTC_Writelong(RTC_MEM_F1_cumulative,cumulative); + + batch=read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(0x11); + batch = batch + 1; + write_RTC(RTC_MEM_F1_batch_MSB,batch / 0x100); + write_RTC(RTC_MEM_F1_batch_LSB,batch % 0x100); + } + else if(function == 2) + { + cumulative = RTC_Readlong(RTC_MEM_F2_cumulative); + cumulative = cumulative + (unsigned long)((disp_val/res)*res); + if(cumulative > 99999999) cumulative = 0; + //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; + RTC_Writelong(RTC_MEM_F2_cumulative,cumulative); + + batch=read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB); + batch = batch + 1; + write_RTC(RTC_MEM_F2_batch_MSB,batch / 0x100); + write_RTC(RTC_MEM_F2_batch_LSB,batch % 0x100); + } + else if(function == 3) + { + cumulative = RTC_Readlong(RTC_MEM_F3_cumulative); + cumulative = cumulative + (unsigned long)((disp_val/res)*res); + if(cumulative > 99999999) cumulative = 0; + //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; + RTC_Writelong(RTC_MEM_F3_cumulative,cumulative); + + batch=read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB); + batch = batch + 1; + write_RTC(RTC_MEM_F3_batch_MSB,batch / 0x100); + write_RTC(RTC_MEM_F3_batch_LSB,batch % 0x100); + } + else if(function == 4) + { + cumulative = RTC_Readlong(RTC_MEM_F4_cumulative); + cumulative = cumulative + (unsigned long)((disp_val/res)*res); + if(cumulative > 99999999) cumulative = 0; + //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; + RTC_Writelong(RTC_MEM_F4_cumulative,cumulative); + + batch=read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB); + batch = batch + 1; + write_RTC(RTC_MEM_F4_batch_MSB,batch / 0x100); + write_RTC(RTC_MEM_F4_batch_LSB,batch % 0x100); + } + else if(function == 5) + { + cumulative = RTC_Readlong(RTC_MEM_F5_cumulative); + cumulative = cumulative + (unsigned long)((disp_val/res)*res); + if(cumulative > 99999999) cumulative = 0; + //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; + RTC_Writelong(RTC_MEM_F5_cumulative,cumulative); + + batch=read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB); + batch = batch + 1; + write_RTC(RTC_MEM_F5_batch_MSB,batch / 0x100); + write_RTC(RTC_MEM_F5_batch_LSB,batch % 0x100); + } + else if((function >= 6)&& (function <= 36)) + { + cumulative = RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); + cumulative = cumulative + (unsigned long)((disp_val/res)*res); + if(cumulative > 99999999) cumulative = 0; + //if(cumulative > 0x5F5E0FF) cumulative = 0x00000000; + RTC_Writelong(RTC_MEM_F6_TO_F36_cumulative,cumulative); + + batch=read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB); + batch = batch + 1; + write_RTC(RTC_MEM_F6_TO_F36_batch_MSB,batch / 0x100); + write_RTC(RTC_MEM_F6_TO_F36_batch_LSB,batch % 0x100); + } + } + } + //----------------------------------------------------- + if(wa_flag && grwt && !grwt_ok) // should wait for some time + { // before gross weight display. + wait_ctr++; + if(wait_ctr >= wait_val*60) + { + grwt_ok=1; + tare_val=temp_tare; + wait_ctr=0; + } + } + //------------------------------------------------------------- + if(batch_count<1 && bset_enable && wa_flag) //Batch over if batch set enabled + { + if(grwt && grwt_ok)wait_ctr++; + else if(!grwt && !grwt_ok)wait_ctr++; + if(wait_ctr >= wait_val*50) + { + wait_ctr=0; + dp_flag=0; + //disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x17,0x13); // batch over + disp(0x0B,0x11,0x11,0x0e,0x13,0x13,0x11,0x11); //b err + //write_RTC(RTC_MEM_start_status,0x00); //pause auto start when batch over + start_status=0; + + #ifdef _6_key + while(enter) + #elif defined( _4x4_key ) + while(KeyPressed != enter) + #endif + {delay(20); dp_flag=1;} + } + } + //------------------------------------------------------------- + // Can Removed. Resetting for next filling + if(((disp_val <= zset) || disp_pol) && wa_flag) + { + waled=0; + wa_flag=0; + tare_val=temp_tare; + avg_cnt=3*(10-avg); + + add_cnt=0; + add_adc=0; + process_flag=0; + grwt_ok=0; + } + } +} +//======================================================================================= +void pwd(void) +{ + unsigned char b=6; + //unsigned char b=4; + KeyPressed = 'X'; + disp(0x0c,0x17,0x0d,0x0e,0x11,0x11,0x00,0x00); + //disp(0x0c,0x17,0x0d,0x0e,0x00,0x00,0x00,0x00); + rst_wdt(); + #ifdef _6_key + while(enter) // will overloop to back on reaching max. + #elif defined( _4x4_key ) + while(KeyPressed != enter) + #endif + { + blink(b,1); + disp_data[b]=incdec(disp_data[b],9,0); + #ifdef _6_key + if(!tare) // shift key is also checked which shifts + #elif defined( _4x4_key ) + if(('S' == KeyPressed)||(KeyPressed == tare)) // blinking digit to right. + #endif + { + b++; + if(b>7)b=6; + //if(b>7) b=4; + #ifdef _4x4_key + KeyPressed = 'X'; + #endif + } + /*if(KeyPressed == left) + { + b--; + if(b<4) b=7; + KeyPressed = 'X'; //clear keyPressed + }*/ + } + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} +} +//============================================================================================= +void val_read(char a) // Will read value which is entered. +{ + unsigned char b; // Up to 'char a' characters from max to + b=8-a; // back are read one by one. + // current entry char will blink. + #ifdef _6_key + while(enter && set && mode) // will overloop to back on reaching max. + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(b,1); + disp_data[b]=incdec(disp_data[b],9,0); + #ifdef _6_key + if(!tare) // shift key is also checked which shifts + #elif defined( _4x4_key ) + //if(('S' == KeyPressed) || (KeyPressed == right)) + if(('S' == KeyPressed) || (KeyPressed == tare)) + #endif + { // blinking digit to right. + b++; + if(b>7) b=8-a; + #ifdef _4x4_key + KeyPressed = 'X'; //clear keyPressed + #endif + } + /*if(KeyPressed == left) + { + b--; + if(b<(8-a)) b=7; + KeyPressed = 'X'; //clear keyPressed + }*/ + } + #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) + if(KeyPressed == mode) + #endif + { + #ifdef _6_key + while(!mode) + #elif defined( _4x4_key ) + while(KeyPressed == mode) + #endif + {delay(2);} + esc_flag=1; + } + else esc_flag=0; + /*#ifdef _4x4_key + KeyPressed = 'X'; // "keyPressed" clearing + #endif */ +} +//========================================================================================== +void blink(start,no) // Will create blinking display. +{ + unsigned char k; // Blinking display will be from 'start' to + // display numbered no. + arr_cpy(&temp_data[0],&disp_data[0],8); + for(k=start;k7)b=6; + //if(b>7) b=4; + #ifdef _4x4_key + KeyPressed = 'X'; + #endif + } + #ifdef _6_key + if(!mode)return; + #elif defined( _4x4_key ) + if(KeyPressed == mode)return; + #endif + /*if(KeyPressed == left) + { + b--; + if(b<4) b=7; + KeyPressed = 'X'; //clear keyPressed + }*/ + } + #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + b = ((disp_data[6] & 0x0F) << 4 ) + (disp_data[7] & 0x0F); + b = bcd2int(b); + if(b > 36) + { + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + goto err_rtn; + } + write_RTC(RTC_MEM_current_recipe,b); + } + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed==enter) + #endif + {delay(2);} +} +//============================================================================================ +void menu(void) // Main menu entry. +{ + char dat; + bit err_flag=0; + unsigned int temp; + + read_values(); + dp_flag=1; + set_enter_flag=1; + + if(function>0 && function<=9) {EEPROM_block = Block_0;} + else if(function>9 && function<=18) {EEPROM_block = Block_1;} + else if(function>18 && function<=27) {EEPROM_block = Block_2;} + else if(function>27 && function<=36) {EEPROM_block = Block_3;} + //-------------------------------------------------------------------- + do + { + if(!recipe) disp(0x0F,0x01,0x16,0x11,0x00,0x00,0x00,0x00); + //else disp(0x0F,function,0x11,0x11,0x00,0x00,0x00,0x00); + else disp(function/10,function%10,0x0F,0x11,0x00,0x00,0x00,0x00); + bin2bcd(fillset,5); // Fill set + delay(500); + val_read(5); + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + temp=bcd2bin(5); + if(temp > (rng_array[rng_val][2] * 1000) ) + { + err_flag=1; + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + } + else + { + fillset=temp; + if(function>0 && function<=9)dat = function; + else if(function>9 && function<=18) dat=(function-9); + else if(function>18 && function<=27) dat=(function-18); + else if(function>27 && function<=36) dat=(function-27); + + write_eeprom((0x10*dat),fillset/0x100); + write_eeprom(((0x10*dat)+0x01),fillset%0x100); + err_flag=0; + } + } + } while(err_flag); + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /*do + { + //disp(0x0C,0x0F,0x11,0x11,0x00,0x00,0x00,0x00); + if(!recipe) disp(0x0C,0x0F,0x11,0x11,0x11,0x00,0x00,0x00); + //else disp(0x0C,0x0F,function,0x11,0x11,0x00,0x00,0x00); // Course feed + else disp(function/10,function%10,0x0C,0x11,0x11,0x00,0x00,0x00); // Course feed + //cf=(fillset-cf); + bin2bcd(cf,3); + delay(500); + val_read(3); + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + temp=bcd2bin(3); + if(temp >= fillset) + //if(temp >= fillset || (fillset-temp > ffd)) + { + err_flag=1; + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + } + else + { + cf=temp; + //cf=(fillset-temp); + if(function>0 && function<=9)dat = function; + else if(function>9 && function<=18) dat=(function-9); + else if(function>18 && function<=27) dat=(function-18); + else if(function>27 && function<=36) dat=(function-27); + + write_eeprom((0x10*dat)+0x02,cf / 0x100); + write_eeprom((0x10*dat)+0x03,cf % 0x100); + err_flag=0; + } + } + } while(err_flag); */ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + do + { + if(!recipe) disp(0x0F,0x0F,0x11,0x11,0x11,0x00,0x00,0x00); + //else disp(0x0F,0x0F,function,0x11,0x11,0x00,0x00,0x00); + else disp(function/10,function%10,0x0D,0x11,0x11,0x00,0x00,0x00); + //ffd=(fillset-ffd); +//14_02_24 bin2bcd(ffd,3); + bin2bcd(ffd,4); + delay(500); + //val_read(5); +//14_02_24 val_read(3); + val_read(4); + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + //temp=bcd2bin(5); +//14_02_24 temp=bcd2bin(3); + temp=bcd2bin(4); + //if((temp >= fillset) || (fillset-temp <= cf)) + if(temp >= fillset) + { + err_flag=1; + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + } + else + { + //ffd=(fillset-temp); + ffd=temp; + if(function>0 && function<=9)dat = function; + else if(function>9 && function<=18) dat=(function-9); + else if(function>18 && function<=27) dat=(function-18); + else if(function>27 && function<=36) dat=(function-27); + + write_eeprom((0x10*dat)+0x04,ffd / 0x100); + write_eeprom((0x10*dat)+0x05,ffd % 0x100); + err_flag=0; + } + } + } while(err_flag); + + /*cfd1=fillset-ffd; + //cfd1=cf; + cfd2=fillset-ffd; + ffd=fillset-ffd;*/ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + do + { + if(!recipe)disp(0x18,0x0F,0x16,0x11,0x11,0x00,0x00,0x00); + //else disp(0x18,0x0F,function,0x11,0x11,0x00,0x00,0x00); + else disp(function/10,function%10,0x18,0x11,0x11,0x00,0x00,0x00); + bin2bcd(nfl,3); // Inflight + delay(500); + val_read(3); + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + temp=bcd2bin(3); + //if(temp > fillset) + if((temp+ffd) > fillset) + { + err_flag=1; + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + } + else + { + nfl=temp; + if(function>0 && function<=9)dat = function; + else if(function>9 && function<=18) dat=(function-9); + else if(function>18 && function<=27) dat=(function-18); + else if(function>27 && function<=36) dat=(function-27); + + write_eeprom((0x10*dat)+0x06,nfl / 0x100); + write_eeprom((0x10*dat)+0x07,nfl % 0x100); + err_flag=0; + } + } + } while(err_flag); + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + do + { + if(!recipe)disp(0x15,0x14,0x13,0x11,0x11,0x00,0x00,0x00); + //else disp(0x15,function,0x11,0x11,0x11,0x00,0x00,0x00); + else disp(function/10,function%10,0x15,0x11,0x11,0x00,0x00,0x00); + bin2bcd(htar,5); // High tare + delay(500); + val_read(5); + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + temp=bcd2bin(5); + //if(temp > (rng_array[rng_val][2] * 1000) ) + if(temp+fillset > (rng_array[rng_val][2] * 1000) ) + { + err_flag=1; + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + } + else + { + htar=temp; + if(function>0 && function<=9)dat = function; + else if(function>9 && function<=18) dat=(function-9); + else if(function>18 && function<=27) dat=(function-18); + else if(function>27 && function<=36) dat=(function-27); + + write_eeprom((0x10*dat)+0x08,htar / 0x100); + write_eeprom((0x10*dat)+0x09,htar % 0x100); + err_flag=0; + } + } + }while(err_flag); + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + do + { + if(!recipe)disp(0x16,0x14,0x13,0x11,0x11,0x00,0x00,0x00); + //else disp(0x16,function,0x11,0x11,0x11,0x00,0x00,0x00); + else disp(function/10,function%10,0x16,0x11,0x11,0x00,0x00,0x00); + bin2bcd(ltar,3); // Low tare + delay(500); + val_read(3); + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + temp=bcd2bin(3); + if(temp >= htar) + { + err_flag=1; + disp(0x11,0x0e,0x13,0x13,0x17,0x13,0x11,0x11); + delay(500); + } + else + { + ltar=temp; + if(function>0 && function<=9)dat = function; + else if(function>9 && function<=18) dat=(function-9); + else if(function>18 && function<=27) dat=(function-18); + else if(function>27 && function<=36) dat=(function-27); + + write_eeprom((0x10*dat)+0x0A,ltar / 0x100); + write_eeprom((0x10*dat)+0x0B,ltar % 0x100); + err_flag=0; + } + } + } while(err_flag); + dp_flag=0; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if(!recipe)disp(0x0a,0x14,0x11,0x14,0x13,0x11,0x11,0x11); + //else disp(0x0a,function,0x11,0x11,0x11,0x11,0x11,0x11); + else disp(function/10,function%10,0x0a,0x11,0x11,0x11,0x11,0x11); + delay(500); + if(!ed) dat=0; + else dat=1; //Auto tare Enable / Disable. + #ifdef _6_key + while(enter && set) + #elif defined( _4x4_key ) + while(KeyPressed != set && KeyPressed != enter) + #endif + { + blink(7,1); + dat=incdec(dat,1,0); + if(dat==0){ disp_data[7]=0x0d; ed=0;} + else { disp_data[7]=0x0e; ed=1;} + } + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + //if(KeyPressed != set) + if(KeyPressed == enter) + #endif + { + if(function>0 && function<=9)write_eeprom((0x10*function)+0x0C,dat); + else if(function>9 && function<=18) write_eeprom(((0x10*(function-9))+0x0C),dat); + else if(function>18 && function<=27) write_eeprom(((0x10*(function-18))+0x0C),dat); + else if(function>27 && function<=36) write_eeprom(((0x10*(function-27))+0x0C),dat); + } + while(KeyPressed == enter){delay(20);} + dp_flag=1; + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + dat=read_eeprom(EE_test_loc_Mem); + if(dat != test_loc) write_eeprom(EE_test_loc_Mem, test_loc); + read_values(); //loading new values +} +//=============================================================================================== +void settings(void) +{ + char dat; + read_values(); + EEPROM_block = Block_0; + set_enter_flag=1; + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + dat=wait_val;// Time delay for showing 'SA' after the weight has crossed the Fillset value. + disp(0x05,0x0A,0x10,0x0D,0x16,0x11,dat/10,dat%10); + bin2bcd(dat,2); + delay(500); + val_read(2); + if(esc_flag) return; + wait_val = bcd2bin(2); + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_wait_val_Mem, wait_val); + } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //dat=drop_wait_val/10; // The time delay between drops. + dat=read_eeprom(EE_drop_wait_val_Mem); + disp(0x0D,0x13,0x12,0x0D,0x16,0x11,dat/10,dat%10); + bin2bcd(dat,2); + delay(500); + val_read(2); + if(esc_flag) return; + drop_wait_val = bcd2bin(2); + + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_drop_wait_val_Mem, drop_wait_val); + } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //dat=on_time/100; // The drop ON TIME. + dat=read_eeprom(EE_on_time_Mem); + disp(0x00,0x18,0x14,0x01,0x1a,0x0e,dat/10,dat%10); + bin2bcd(dat,2); + delay(500); + val_read(2); + if(esc_flag) return; + dat = bcd2bin(2); + + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_on_time_Mem, dat); + } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + disp(0x00,0x10,0x05,0x0E,0x14,0x00,0x00,0x00); + bin2bcd(zset,3); // Zero set + delay(500); + //while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + //{ + val_read(3); + zset = bcd2bin(3); + //} + if(esc_flag) return; + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_zset_Mem_MSB,zset / 0x100); + write_eeprom((EE_zset_Mem_LSB),zset % 0x100); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + disp(0x05,0x12,0x0d,0x11,0x11,0x11,0x11,avg); + delay(500); + #ifdef _6_key + while(enter && set && mode) //speed(averaging). + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + avg=incdec(avg,9,1); + disp_data[7]=avg; + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_avg_Mem,avg); + avg_cnt=3*(10-avg); + } +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if(cal_en) //calibration hardware lock to protect scale setting + { + disp(0x12,0x13,0x00,0x14,0x0E,0x0C,0x14,0x0D); + //return; + goto end; + } + else +//-------------------------------------------------------------------- + disp(0x05,0x10,0x0c,0x0a,0x12,0x11,0x00,0x00); + bin2bcd(rng_array[rng_val][2],2); + delay(500); + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(6,2); + //rng_val=incdec(rng_val,6,0); +//1 rng_val=incdec(rng_val,7,0); + rng_val=incdec(rng_val,9,0); + #ifdef _4x4_key + //if(KeyPressed == right) + if(KeyPressed == tare) + { + rng_val++; + //if(rng_val>6) rng_val=0; + // if(rng_val>7) rng_val=0; + if(rng_val>9) rng_val=0; + } + #endif + /*if(KeyPressed == left) + { + + if(rng_val >= 1) rng_val--; + else rng_val=4; + }*/ + bin2bcd(rng_array[rng_val][2],2); + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_rng_val_Mem,rng_val); + } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + disp(0x13,0x0e,0x05,0x11,0x11,0x11,res/10,res%10); + delay(500); + dat=res; + if(res==5) dat=3; + if(res==10) dat=0; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(6,2); + dat=incdec(dat,3,0); + #ifdef _4x4_key + //if(KeyPressed == right) + if(KeyPressed == tare) + { + dat++; + if(dat>3) dat=0; + } + #endif + /*if(KeyPressed == left) + { + if(dat >= 1)dat--; + else dat = 3; + }*/ + res=dat; + if(dat==3) res=5; + if(dat==0) res=10; + disp_data[7]=res%10; + disp_data[6]=res/10; + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_res_Mem,res); + } + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + div_factor=rng_array[rng_val][0]; + mul_factor=rng_array[rng_val][1]; + help_val=(rng_array[rng_val][2] * 1000) + (res * 9); +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + disp(0x1a,0x0a,0x05,0x11,0x11,0x11,0x11,mas); + delay(500); + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + mas=incdec(mas,5,0); + #ifdef _4x4_key + //if(KeyPressed == right) + if(KeyPressed == tare) + { + mas++; + if(mas>5) mas=0; + } + #endif + /*if(KeyPressed == left) + { + if(mas >= 1)mas--; + else mas=5; + }*/ + disp_data[7]=mas; + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_mas_Mem,mas); + } +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + disp(0x00,0x10,0x14,0x13,0x0A,0x0C,0x11,ztc); + delay(500); + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + ztc=incdec(ztc,5,0); + #ifdef _4x4_key + //if(KeyPressed == right) + if(KeyPressed == tare) + { + ztc++; + if(ztc>5) ztc=0; + } + #endif + /*if(KeyPressed == left) + { + if(ztc >= 1)ztc--; + else ztc=5; + }*/ + disp_data[7]=ztc; + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_ztc_Mem,ztc); + } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + dp_flag=1; + disp(0x0D,0x0E,0x0C,0x11,0x11,0x11,0x11,dp_val); + delay(500); + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + dp_val=incdec(dp_val,7,3); + #ifdef _4x4_key + //if(KeyPressed == right) + if(KeyPressed == tare) + { + dp_val++; + if(dp_val>7)dp_val=3; + } + #endif + /*if(KeyPressed == left) + { + if(dp_val >= 3) dp_val--; + else dp_val=7; + }*/ + disp_data[7]=dp_val; + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_eeprom(EE_dp_val_mem,dp_val); + } + dp_flag=0; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +end: + dat=read_eeprom(EE_test_loc_Mem); + if(dat != test_loc) write_eeprom(EE_test_loc_Mem, test_loc); + read_values(); +} +//============================================================================================ +void sys_paramts(void) +{ + char dat; + read_values(); + dp_flag=0; + set_enter_flag=1; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Instant fillset entry Enable / Disable. + disp(0x01,0x18,0x05,0x14,0x18,0x14,0x11,0x11); + dat=read_RTC(RTC_MEM_Instant_fill_enable); + delay(500); + //if(dat==1)Instant_fill_enable=1; + //else Instant_fill_enable=0; + if(dat==0)Instant_fill_enable=0; + else Instant_fill_enable=1; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + dat=incdec(dat,1,0); + if(dat==0){ disp_data[7]=0x0d; Instant_fill_enable=0;} + else { dat=1; disp_data[7]=0x0e; Instant_fill_enable=1;} + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(!enter) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_RTC(RTC_MEM_Instant_fill_enable,dat); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + disp(0x0a,0x1B,0x14,0x05,0x11,0x11,0x11,0x11); //Auto start Enable / Disable. + dat=read_RTC(RTC_MEM_Auto_start_enable); + delay(500); + //if(dat==1)auto_start=1; + //else auto_start=0; + if(dat==0)auto_start=0; + else auto_start=1; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + dat=incdec(dat,1,0); + if(dat==0){ disp_data[7]=0x0d; auto_start=0;} + else { dat=1; disp_data[7]=0x0e; auto_start=1;} + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_RTC(RTC_MEM_Auto_start_enable,dat); + } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //disp(0x0a,0x1B,0x14,0x00,0x05,0x11,0x11,0x11); //Auto start delay + disp(0x0A,0x14,0x05,0x0D,0x16,0x11,0x11,0x11); + start_delay=read_RTC(RTC_MEM_start_delay); + bin2bcd(start_delay,2); + delay(500); + val_read(2); + if(esc_flag) return; + start_delay = (unsigned char)bcd2bin(2); + + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_RTC(RTC_MEM_start_delay,start_delay); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + disp(0x13,0x0E,0x0C,0x01,0x12,0x0E,0x11,0x11); //Recipe Enable/Disable + dat=read_RTC(RTC_MEM_recipe_enable); + delay(500); + //if(dat==1)recipe=1; + //else recipe=0; + if(dat==0)recipe=0; + else recipe=1; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + dat=incdec(dat,1,0); + if(dat==0){ disp_data[7]=0x0d; recipe=0;} + else { dat=1; disp_data[7]=0x0e; recipe=1;} + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_RTC(RTC_MEM_recipe_enable,dat); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + disp(0x0B,0x05,0x0E,0x14,0x10,0x0F,0x11,0x11); //Batch filling enable + dat=read_RTC(RTC_MEM_batch_set_enable); + delay(500); + //if(dat==1)bset_enable=1; + //else bset_enable=0; + if(dat==0)bset_enable=0; + else bset_enable=1; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + dat=incdec(dat,1,0); + if(dat==0){ disp_data[7]=0x0d; bset_enable=0;} + else { dat=1; disp_data[7]=0x0e; bset_enable=1;} + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_RTC(RTC_MEM_batch_set_enable,dat); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + disp(0x19,0x13,0x1D,0x14,0x11,0x11,0x11,0x11); //Grows weight display Enable/Disable + dat=read_RTC(RTC_MEM_gross_weight_enable); + delay(500); + //if(dat==1)grwt=1; + //else grwt=0; + if(dat==0)grwt=0; + else grwt=1; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(7,1); + dat=incdec(dat,1,0); + if(dat==0){ disp_data[7]=0x0d; grwt=0;} + else { dat=1; disp_data[7]=0x0e; grwt=1;} + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode) return; + #endif + + #ifdef _6_key + if(set) + #elif defined( _4x4_key ) + if(KeyPressed == enter) + #endif + { + write_RTC(RTC_MEM_gross_weight_enable,dat); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //write_eeprom(EE_test_loc_Mem,test_loc); //write status update + write_RTC(RTC_MEM_status,test_loc); + read_values(); //loading new values + dp_flag=1; +} +//================================================================================================== +/* +void memory_backup_restore(void) +{ + char no=1; + clr_disp(); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + { + blink(0,8); + no=incdec(no,2,1); + rst_wdt(); + switch(no) + { + case 1: + disp(0x1A,0x0C,0x11,0x14,0x17,0x11,0x0E,0x0E); + break; + case 2: + disp(0x0E,0x0E,0x11,0x14,0x17,0x11,0x1A,0x0C); + break; + } + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode)return; + #endif + switch(no) + { + rst_wdt(); + case 1: + sectors_copy_to_EEPROM(BLK1_DST_ADDR, 0x00); + break; + case 2: + EEPROM_copy_to_sectors(BLK1_DST_ADDR, 0x00); + break; + } + delay(500); + read_values(); //loading new values +} +*/ +//===================================================================================== +unsigned int bcd2bin(char no) // Converts bcd in the display and +{ // returns the equ. int value. + unsigned int bin_val,mul=1; // char no.,determines how much + char i; // digits in the display should be + bin_val=0x00; // converted. + for(i=7;i>=(8-no);i--) + { + bin_val = bin_val + disp_data[i] * mul; + mul = mul * 10; + } + return(bin_val); +} +//==================================================================================== +char incdec(char name,char max,char min) +{ + #ifdef _6_key + if(!incr) + #elif defined( _4x4_key ) + if(KeyPressed == incr) + #endif + { + name++; + if(name>max)name=min; + } + #ifdef _6_key + if(!decr) + #elif defined( _4x4_key ) + else if(KeyPressed == decr) + #endif + { + name--; + if(name= 0x00) && (KeyPressed <= 0x09)) + else if((KeyPressed >= min) && (KeyPressed <= max)) + { + name = KeyPressed; + KeyPressed = 'S'; //for shifting digit + } + #endif + return(name); +} +//====================================================================================== +void cal(void) +{ + unsigned char j; + + if(cal_en) //calibration hardware lock + { + disp(0x11,0x0C,0x0A,0x11,0x16,0x17,0x0C,0x11); + return; + } + else + + disp(0x11,0x11,0x11,0x0c,0x0a,0x16,0x11,0x11); + delay(1000); + disp(0x11,0x1d,0x0e,0x01,0x19,0x15,0x14,0x11); + delay(1000); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + {delay(2);} + + #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) + if(KeyPressed == mode) + #endif + { + #ifdef _6_key + while(!mode) { delay(2);} + #elif defined( _4x4_key ) + //while(KeyPressed == mode) {KeyPressed = 'X'; delay(2);} + while(KeyPressed == mode){delay(2);} + #endif + return; + } + #ifdef _6_key + while(!enter){delay(2);} + #elif defined( _4x4_key ) + while(KeyPressed == enter){delay(2);} + #endif + + disp(0x0c,0x0a,0x16,0x11,0x11,0x11,0x11,0x11); + dp_flag=1; + c_flag=1; + tare_flag=0; + while(!aco); + aco=0; + //filter_val=adc_val; + process(); + temp_val = disp_val; + c_flag=0; + for(j=7;j>2;j--) + { + disp_data[j]=temp_val % 10; + temp_val=temp_val / 10; + } + j=3; + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + { + blink(j,1); + disp_data[j]=incdec(disp_data[j],9,0); + #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) + //if(('S' == KeyPressed) || (KeyPressed == right)) + if(('S' == KeyPressed) || (KeyPressed == tare)) + #endif + { + j++; + if(j>7) j=3; + } + /*if(KeyPressed == left) + { + j--; + if(j<3) j=7; + }*/ + + } + #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) + if(KeyPressed == mode) + #endif + { + #ifdef _6_key + while(!mode) + #elif defined( _4x4_key ) + while(KeyPressed == mode) + #endif + {delay(2);} + return; + } + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + cal_flag=1; + bin_val=bcd2bin(5); + if(res==0)bin_val=bin_val + 10; + else bin_val=bin_val + res; + dp_flag=0; +} +//===================================================================================== +void cal_find(void) +{ + if(cal_flag) + { + cal_flag=0; + temp1=(unsigned long int)bin_val; + temp2=(unsigned long int)disp_val; + + if(disp_val > bin_val) temp_val = disp_val - bin_val; + else temp_val = bin_val - disp_val; + //if(temp_val <= (disp_val/10)) + if(temp_val) + { + temp =(temp1 * 0x2710)/temp2; + cal_val = (unsigned int)temp; + //if((temp % temp2) > (temp2/2)) cal_val+=1; //it was enabled + EEPROM_block = Block_0; //Following parameters in block0 of EEPROM + write_eeprom(EE_cal_val_Mem_MSB,cal_val/0x100); + write_eeprom((EE_cal_val_Mem_LSB),cal_val%0x100); + disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); + delay(1000); + clr_disp(); + } + else + { + disp(0x11,0x11,0x0f,0x0a,0x01,0x16,0x11,0x11); + delay(1000); + clr_disp(); + calibrate(); + } + } +} +//========================================================================================== +void calibrate(void) +{ + temp1=(unsigned long int)disp_val; + temp2=(unsigned long int)cal_val; + temp =(temp1 * temp2)/0x2710; + disp_val = (unsigned int)temp; + //if(((temp1*temp2) % 0x2710) > 0x1388) disp_val+=1; //It was enabled +} +//========================================================================================= +void cal_rst(void) +{ + if(cal_en) //calibration hardware lock + { + disp(0x11,0x0C,0x0A,0x11,0x16,0x17,0x0C,0x11); + return; + } + else + + disp(0x11,0x13,0x0e,0x05,0x0e,0x14,0x11,0x11); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while((KeyPressed != enter) && (KeyPressed != mode)) + #endif + {delay(2);} + + #ifdef _6_key + if(!mode) + #elif defined( _4x4_key ) + if(KeyPressed == mode) + #endif + { + #ifdef _6_key + while(!mode) {delay(2);} + #elif defined( _4x4_key ) + while(KeyPressed == mode) {delay(2);} + #endif + return; + } + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + clr_disp(); + EEPROM_block = Block_0; //Following parameters in block0 of EEPROM + write_eeprom(EE_cal_val_Mem_MSB,0x27); + write_eeprom((EE_cal_val_Mem_LSB),0x10); + read_values(); +} +//======================================================================================= +void select_menu(void) +{ + char no=1; + clr_disp(); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + { + blink(0,8); + //no=incdec(no,5,1); + no=incdec(no,9,1); + rst_wdt(); + switch(no) + { + case 1: + disp(0x0f,0x01,0x16,0x11,0x12,0x0a,0x13,0x0a); + break; + case 2: + disp(0x05,0x0c,0x16,0x11,0x05,0x0e,0x14,0x11); + break; + case 3: + disp(0x11,0x0c,0x0a,0x16,0x11,0x11,0x11,0x11); + break; + case 4: + disp(0x0c,0x0a,0x16,0x11,0x13,0x05,0x14,0x11); + break; + case 5: + disp(0x0d,0x0e,0x0f,0x0a,0x1b,0x16,0x14,0x05); + break; + case 6: + disp(0x0C,0x1B,0x1A,0x1B,0x16,0x0A,0x14,0x0E); + break; + case 7: + disp(0x0B,0x0A,0x14,0x0C,0x15,0x11,0x11,0x11); + break; + case 8: + disp(0x0B,0x0A,0x14,0x0C,0x15,0x14,0x17,0x14); + break; + case 9: + disp(0x0B,0x0A,0x14,0x15,0x11,0x0C,0x1B,0x1A); + delay(500); + disp(0x0C,0x16,0x0E,0x0A,0x13,0x11,0x11,0x11); + break; + } + } + #ifdef _6_key + if(!mode) return; + #elif defined( _4x4_key ) + if(KeyPressed == mode)return; + #endif + switch(no) + { +// rst_wdt(); + case 1: + sys_paramts(); + rst_wdt(); + break; + case 2: + settings(); + break; + case 3: + cal(); + break; + case 4: + cal_rst(); + break; + case 5: + load_eep_defaults(); + break; + case 6: + display_current_cumulative(); + break; + case 7: + display_current_batch(); + break; + case 8: + display_total_batch(); + break; + case 9: + clear_batch_cumulative(); + break; + } +} +//======================================================================================== +void display_total_cumulative(void) +{ + cumulative = 0; + dp_flag=1; + cumulative = RTC_Readlong(RTC_MEM_F1_cumulative) + RTC_Readlong(RTC_MEM_F2_cumulative) + RTC_Readlong(RTC_MEM_F3_cumulative)+ \ + RTC_Readlong(RTC_MEM_F4_cumulative) + RTC_Readlong(RTC_MEM_F5_cumulative)+ RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); + long2bcd(cumulative,8); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + {delay(2);} +} +//============================================================================================= +void display_total_batch(void) +{ + batch=(read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(RTC_MEM_F1_batch_LSB))+ + (read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB))+ + (read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB))+ + (read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB))+ + (read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB))+ + (read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB)); + + disp(0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11); + batch2bcd(batch,5); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + {delay(2);} +} +//=========================================================================================== +void display_current_cumulative(void) +{ + unsigned char sdat=1,b=0; + + function = read_RTC(RTC_MEM_current_recipe); + shift_flag=0; + if(function>6)sdat=1; + else sdat=function; + + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + disp(sdat,0x0C,0x11,0x11,0x11,0x11,0x11,0x11); //"1C" + delay(500); + //b=1; + b=0; //Digit from left one + dp_flag=1; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(b,1); + disp_data[b]=incdec(disp_data[b],6,1); + //sdat = ((disp_data[0] & 0x0F) << 4 ) + (disp_data[1] & 0x0F); + sdat = (disp_data[0] & 0xFF); + sdat = bcd2int(sdat); + //delay(100); + if(sdat==1) + cumulative = RTC_Readlong(RTC_MEM_F1_cumulative); + else if(sdat==2) + cumulative = RTC_Readlong(RTC_MEM_F2_cumulative); + else if(sdat==3) + cumulative = RTC_Readlong(RTC_MEM_F3_cumulative); + else if(sdat==4) + cumulative = RTC_Readlong(RTC_MEM_F4_cumulative); + else if(sdat==5) + cumulative = RTC_Readlong(RTC_MEM_F5_cumulative); + else if(sdat==6) + cumulative = RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); + + //bin2bcd(batch,5); + //long2bcd(cumulative,8); + bin2bcd(cumulative,6); + } + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + + /*if(function==1) + { + cumulative = RTC_Readlong(RTC_MEM_F1_cumulative); + } + else if(function==2) + { + cumulative = RTC_Readlong(RTC_MEM_F2_cumulative); + } + else if(function==3) + { + cumulative = RTC_Readlong(RTC_MEM_F3_cumulative); + } + else if(function==4) + { + cumulative = RTC_Readlong(RTC_MEM_F4_cumulative); + } + else if(function==5) + { + cumulative = RTC_Readlong(RTC_MEM_F5_cumulative); + } + else if((function>=6) && (function<=36)) + { + cumulative = RTC_Readlong(RTC_MEM_F6_TO_F36_cumulative); + } + long2bcd(cumulative,8); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + {delay(2);} */ +} +//============================================================================================ +void display_current_batch(void) +{ + unsigned char sdat=1,b=0;; + function = read_RTC(RTC_MEM_current_recipe); + shift_flag=0; + if(function>6)sdat=1; + else sdat=function; + + #ifdef _6_key + while(!enter) + #elif defined( _4x4_key ) + while(KeyPressed == enter) + #endif + {delay(2);} + + //disp(function/10,function%10,0x0F,0x11,0x11,0x11,0x11,0x11); + disp(0x0B,sdat,0x1E,0x11,0x11,0x11,0x11,0x11); //"B1=" + delay(500); + b=1; + //b=0; + dp_flag=0; + #ifdef _6_key + while(enter && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != set && KeyPressed != mode) + #endif + { + blink(b,1); + disp_data[b]=incdec(disp_data[b],6,1); + //sdat = ((disp_data[0] & 0x0F) << 4 ) + (disp_data[1] & 0x0F); + sdat = (disp_data[1] & 0xFF); + sdat = bcd2int(sdat); + //delay(100); + if(sdat==1) + batch=read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(RTC_MEM_F1_batch_LSB); + else if(sdat==2) + batch=read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB); + else if(sdat==3) + batch=read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB); + else if(sdat==4) + batch=read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB); + else if(sdat==5) + batch=read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB); + else if(sdat==6) + batch=read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB); + + //batch2bcd(batch,5); + bin2bcd(batch,5); + } + #ifdef _6_key + while(!enter){delay(2);} + #elif defined( _4x4_key ) + while(KeyPressed == enter) {delay(2);} + #endif + dp_flag=1; +} + //--------------------------------------------------------------------------- + /*if(function==1) + { + batch=read_RTC(RTC_MEM_F1_batch_MSB)*0x100 + read_RTC(RTC_MEM_F1_batch_LSB); + } + else if(function==2) + { + batch=read_RTC(RTC_MEM_F2_batch_MSB)*0x100 + read_RTC(RTC_MEM_F2_batch_LSB); + } + else if(function==3) + { + batch=read_RTC(RTC_MEM_F3_batch_MSB)*0x100 + read_RTC(RTC_MEM_F3_batch_LSB); + } + else if(function==4) + { + batch=read_RTC(RTC_MEM_F4_batch_MSB)*0x100 + read_RTC(RTC_MEM_F4_batch_LSB); + } + else if(function==5) + { + batch=read_RTC(RTC_MEM_F5_batch_MSB)*0x100 + read_RTC(RTC_MEM_F5_batch_LSB); + } + else if((function>=6) && (function<=36)) + { + batch=read_RTC(RTC_MEM_F6_TO_F36_batch_MSB)*0x100 + read_RTC(RTC_MEM_F6_TO_F36_batch_LSB); + } + disp(0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11); + batch2bcd(batch,5); + #ifdef _6_key + while(enter && mode) + #elif defined( _4x4_key ) + while(KeyPressed != enter && KeyPressed != mode) + #endif + {delay(2);} +}*/ +//=============================================================================================== +void clear_current_cumulative_batch(void) +{ + disp(0x11,0x0C,0x16,0x0E,0x0A,0x13,0x11,0x11); + #ifdef _6_key + while(tare && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != tare &&KeyPressed != set && KeyPressed != mode) + #endif + { + blink(0,8); + } + #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) + if(KeyPressed == tare) + #endif + { + cumulative=0; + batch=0; + if(function==1) + { + RTC_Writelong(RTC_MEM_F1_cumulative,cumulative); //cumulative clear + write_RTC(RTC_MEM_F1_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F1_batch_LSB,batch%0x100); + } + else if(function==2) + { + RTC_Writelong(RTC_MEM_F2_cumulative,cumulative); //cumulative clear + write_RTC(RTC_MEM_F2_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F2_batch_LSB,batch%0x100); + } + else if(function==3) + { + RTC_Writelong(RTC_MEM_F3_cumulative,cumulative); //cumulative clear + write_RTC(RTC_MEM_F3_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F3_batch_LSB,batch%0x100); + } + else if(function==4) + { + RTC_Writelong(RTC_MEM_F4_cumulative,cumulative); //cumulative clear + write_RTC(RTC_MEM_F4_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F4_batch_LSB,batch%0x100); + } + else if(function==5) + { + RTC_Writelong(RTC_MEM_F5_cumulative,cumulative); //cumulative clear + write_RTC(RTC_MEM_F5_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F5_batch_LSB,batch%0x100); + } + else if((function>=6) && (function<=36)) + { + RTC_Writelong(RTC_MEM_F6_TO_F36_cumulative,cumulative); //cumulative clear + write_RTC(RTC_MEM_F6_TO_F36_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F6_TO_F36_batch_LSB,batch%0x100); + } + } +} +//================================================================================================= +void clear_batch_cumulative(void) +{ + disp(0x11,0x0C,0x16,0x0E,0x0A,0x13,0x11,0x11); + #ifdef _6_key + while(tare && set && mode) + #elif defined( _4x4_key ) + while(KeyPressed != tare &&KeyPressed != set && KeyPressed != mode) + #endif + { + blink(0,8); + } + #ifdef _6_key + if(!tare) + #elif defined( _4x4_key ) + if(KeyPressed == tare) + #endif + { + cumulative=0; + batch=0; + + RTC_Writelong(RTC_MEM_F1_cumulative,cumulative); //F1 cumulative clear + write_RTC(RTC_MEM_F1_batch_MSB,batch/0x100); //F1 batch clear + write_RTC(RTC_MEM_F1_batch_LSB,batch%0x100); + + RTC_Writelong(RTC_MEM_F2_cumulative,cumulative); //F2 cumulative clear + write_RTC(RTC_MEM_F2_batch_MSB,batch/0x100); //F2 batch clear + write_RTC(RTC_MEM_F2_batch_LSB,batch%0x100); + + RTC_Writelong(RTC_MEM_F3_cumulative,cumulative); //F3 cumulative clear + write_RTC(RTC_MEM_F3_batch_MSB,batch/0x100); //F3 batch clear + write_RTC(RTC_MEM_F3_batch_LSB,batch%0x100); + + RTC_Writelong(RTC_MEM_F4_cumulative,cumulative); //F4 cumulative clear + write_RTC(RTC_MEM_F4_batch_MSB,batch/0x100); //F4 batch clear + write_RTC(RTC_MEM_F4_batch_LSB,batch%0x100); + + RTC_Writelong(RTC_MEM_F5_cumulative,cumulative); //F5 cumulative clear + write_RTC(RTC_MEM_F5_batch_MSB,batch/0x100); //F5batch clear + write_RTC(RTC_MEM_F5_batch_LSB,batch%0x100); + + RTC_Writelong(RTC_MEM_F6_TO_F36_cumulative,cumulative); //F6~F36 cumulative clear + write_RTC(RTC_MEM_F6_TO_F36_batch_MSB,batch/0x100); //batch clear + write_RTC(RTC_MEM_F6_TO_F36_batch_LSB,batch%0x100); + } +} +//====================================================================================================== \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.c new file mode 100644 index 0000000..550e5bb --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.c @@ -0,0 +1,205 @@ +/* + * _4x4_key.c + * + * Created: 11-03-2015 15:22:49 + * Author: stanly + */ +#include +#include +#include + + +//extern unsigned char idata keyPressed, key_digit=0; +extern unsigned char idata KeyPressed; +unsigned char key_value[2]={0,0}; + +#define KB_PORT_OUT P0 +#define KB_PORT_IN P0 + +//***********************************************************************/ +void init_matrixKeypad(void) +{ + P0=0x0F; + //pull_up_matrix_key_port; +} + +void read_matrixKeypad(void) +{ + //unsigned char upperNibble, keyCode, i, keyPressed; + unsigned char idata upperNibble, keyCode, i; + upperNibble = 0xff; + + KeyPressed = '@'; //clearing every time + + for(i=0; i<4; i++) + { + delay(1); + KB_PORT_OUT = ~(0x01 << i); + delay(1); //delay for port o/p settling + upperNibble = KB_PORT_IN | 0x0f; + + if (upperNibble != 0xff) + { + delay(20); //key debouncing delay + upperNibble = KB_PORT_IN | 0x0f; + if(upperNibble == 0xff) goto OUT; + keyCode = (upperNibble & 0xf0) | (0x0f & ~(0x01 << i)); + while (upperNibble != 0xff) + upperNibble = KB_PORT_IN | 0x0f; + delay(20); //key debouncing delay + switch (keyCode) //generating key character to display on LCD + { + case (0xd7): + if(KEY_LAYOUT)KeyPressed = 0x00; + else KeyPressed = 0x07; + break; + case (0xee): + if(KEY_LAYOUT)KeyPressed = 0x01; + else KeyPressed = 'D'; + break; + case (0xde): + if(KEY_LAYOUT)KeyPressed = 0x02; + else KeyPressed = 'C'; + break; + case (0xbe): + if(KEY_LAYOUT)KeyPressed = 0x03; + else KeyPressed = 'B'; + break; + case (0xed): + if(KEY_LAYOUT)KeyPressed = 0x04; + else KeyPressed = '#'; + break; + case (0xdd): + if(KEY_LAYOUT)KeyPressed = 0x05; + else KeyPressed = 0x09; + break; + case (0xbd): KeyPressed = 0x06; + break; + case (0xeb): + if(KEY_LAYOUT)KeyPressed = 0x07; + else KeyPressed = 0x00; + break; + case (0xdb): KeyPressed = 0x08; + break; + case (0xbb): + if(KEY_LAYOUT)KeyPressed = 0x05; + KeyPressed = 0x09; + break; + case (0x7e): KeyPressed = 'A'; + break; + case (0x7d): + if(KEY_LAYOUT)KeyPressed = 'B'; + else KeyPressed = 0x03; + break; + case (0x7b): + if(KEY_LAYOUT)KeyPressed = 'C'; + else KeyPressed = 0x02; + break; + case (0x77): + if(KEY_LAYOUT)KeyPressed = 'D'; + else KeyPressed = 0x01; + break; + case (0xe7): KeyPressed = '*'; + break; + case (0xb7): + if(KEY_LAYOUT)KeyPressed = '#'; + else KeyPressed = 0x04; + break; + default : KeyPressed = 'X'; + }//end of switch + //lcd_gotoxy(0x0F, 0x00); + //lcd_putc(keyPressed); + OUT:; + }//end of if + }//end of for +} +/*void read_matrixKeypad(void) +{ + //unsigned char upperNibble, keyCode, i, keyPressed; + unsigned char upperNibble, keyCode, i; + upperNibble = 0xff; + + keyPressed = '@'; //clearing every time + + for(i=0; i<4; i++) + { + _delay_ms(1); + KB_PORT_OUT = ~(0x01 << i); + _delay_ms(1); //delay for port o/p settling + upperNibble = KB_PORT_IN | 0x0f; + + if (upperNibble != 0xff) + { + _delay_ms(20); //key debouncing delay + upperNibble = KB_PORT_IN | 0x0f; + if(upperNibble == 0xff) goto OUT; + keyCode = (upperNibble & 0xf0) | (0x0f & ~(0x01 << i)); + while (upperNibble != 0xff) + upperNibble = KB_PORT_IN | 0x0f; + _delay_ms(20); //key debouncing delay + switch (keyCode) //generating key character to display on LCD + { + case (0xd7): + if(KEY_LAYOUT)keyPressed = 0; + else keyPressed = 7; + break; + case (0xee): + if(KEY_LAYOUT)keyPressed = 1; + else keyPressed = 'D'; + break; + case (0xde): + if(KEY_LAYOUT)keyPressed = 2; + else keyPressed = 'C'; + break; + case (0xbe): + if(KEY_LAYOUT)keyPressed = 3; + else keyPressed = 'B'; + break; + case (0xed): + if(KEY_LAYOUT)keyPressed = 4; + else keyPressed = '#'; + break; + case (0xdd): + if(KEY_LAYOUT)keyPressed = 5; + else keyPressed = 9; + break; + case (0xbd): keyPressed = 6; + break; + case (0xeb): + if(KEY_LAYOUT)keyPressed = 7; + else keyPressed = 0; + break; + case (0xdb): keyPressed = 8; + break; + case (0xbb): + if(KEY_LAYOUT)keyPressed = 5; + keyPressed = 9; + break; + case (0x7e): keyPressed = 'A'; + break; + case (0x7d): + if(KEY_LAYOUT)keyPressed = 'B'; + else keyPressed = 3; + break; + case (0x7b): + if(KEY_LAYOUT)keyPressed = 'C'; + else keyPressed = 2; + break; + case (0x77): + if(KEY_LAYOUT)keyPressed = 'D'; + else keyPressed = 1; + break; + case (0xe7): keyPressed = '*'; + break; + case (0xb7): + if(KEY_LAYOUT)keyPressed = '#'; + else keyPressed = 4; + break; + default : keyPressed = 'X'; + }//end of switch + lcd_gotoxy(0x0F, 0x00); + lcd_putc(keyPressed); + OUT:; + }//end of if + }//end of for +} */ diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.h b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.h new file mode 100644 index 0000000..02992ea --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/matrix_key.h @@ -0,0 +1,22 @@ +/* + * _4x4_key.h + * + * Created: 11-03-2015 15:29:39 + * Author: stanly + */ + +#ifndef MATRIX_KEY_H_ +#define MATRIX_KEY_H_ + + +//#define KEY_LAYOUT 0 //straight +#define KEY_LAYOUT 1 //reverse + + +//extern unsigned char keyPressed, key_digit; +extern unsigned char key_value[2]; + +extern void init_matrixKeypad(void); +extern void read_matrixKeypad(void); + +#endif /* MATRIX_KEY_H_ */ \ No newline at end of file diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.LST b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.LST new file mode 100644 index 0000000..c947cfa --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.LST @@ -0,0 +1,180 @@ +C51 COMPILER V9.60.7.0 SER_DISP 07/10/2026 17:02:31 PAGE 1 + + +C51 COMPILER V9.60.7.0, COMPILATION OF MODULE SER_DISP +OBJECT MODULE PLACED IN ser_disp.OBJ +COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ser_disp.c BROWSE DEBUG OBJECTEXTEND + +line level source + + 1 //#pragma nointpromote + 2 #include + 3 //#include + 4 //#include + 5 + 6 //#include + 7 #include + 8 #include + 9 #include + 10 #include + 11 + 12 #include + 13 #include + 14 + 15 sbit ser_clk =P2^6; + 16 sbit ser_data=P2^7; + 17 + 18 /* Display code storage. + 19 Display Code. + 20 0 to F 0x00 to 0x0F + 21 - 0x10 + 22 Blank 0x11 + 23 P 0x12 + 24 R 0x13 + 25 T 0x14 + 26 H 0x15 + 27 L 0x16 + 28 O 0x17 + 29 N 0x18 + 30 G 0x19 + 31 M 0x1A + 32 U 0x1B + 33 Y 0x1C + 34 W 0x1D + 35 = 0x1E + 36 */ + 37 + 38 unsigned char code h_7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, + 39 0x88,0x83,0xC6,0xA1,0x86,0x8E, + 40 0xBF,0xFF,0x8C,0xAF,0x87,0x89,0xC7, + 41 0xA3,0xAB,0xC2,0xAA,0xC1,0x91,0x95,0xF6}; + 42 + 43 unsigned char code filltronics[]={0x0F,0x01,0x16,0x16,0x14,0x13,0x17,0x18,0x01,0x0C,0x05, + 44 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}; //Filltronics + 45 + 46 extern unsigned char data disp_data[8]; + 47 extern unsigned char idata dp_val; + 48 extern bit dp_flag; + 49 + 50 //--------------------------------------------------------------------- + 51 void display(void) + 52 { + 53 1 unsigned char i,j,temp; + 54 1 //EX0 = 0; + 55 1 EA=0; + C51 COMPILER V9.60.7.0 SER_DISP 07/10/2026 17:02:31 PAGE 2 + + 56 1 for(i=0;i<8;i++) + 57 1 { + 58 2 if(i == dp_val && dp_flag) temp=h_7[disp_data[i]] & 0x7F; + 59 2 else temp=h_7[disp_data[i]]; + 60 2 for(j=0;j<=7;j++) + 61 2 { + 62 3 if(temp & 0x80) ser_data=1; + 63 3 else ser_data=0; + 64 3 + 65 3 ser_clk=1; + 66 3 _nop_(); + 67 3 _nop_(); + 68 3 _nop_(); + 69 3 ser_clk=0; + 70 3 + 71 3 temp<<=1; + 72 3 _nop_(); + 73 3 _nop_(); + 74 3 _nop_(); + 75 3 + 76 3 rst_wdt(); + 77 3 } + 78 2 } + 79 1 //EX0 = 1; + 80 1 EA=1; + 81 1 } + 82 //--------------------------------------------------------------------- + 83 void disp(char i1,i2,i3,i4,i5,i6,i7,i8) + 84 { + 85 1 disp_data[0]=i1; + 86 1 disp_data[1]=i2; + 87 1 disp_data[2]=i3; + 88 1 disp_data[3]=i4; + 89 1 disp_data[4]=i5; + 90 1 disp_data[5]=i6; + 91 1 disp_data[6]=i7; + 92 1 disp_data[7]=i8; + 93 1 display(); + 94 1 } + 95 //------------------------------------------------------------------------ + 96 void clr_disp(void) + 97 { + 98 1 disp_data[0]=0x11; + 99 1 disp_data[1]=0x11; + 100 1 disp_data[2]=0x11; + 101 1 disp_data[3]=0x11; + 102 1 disp_data[4]=0x11; + 103 1 disp_data[5]=0x11; + 104 1 disp_data[6]=0x11; + 105 1 disp_data[7]=0x11; + 106 1 display(); + 107 1 } + 108 //------------------------------------------------------------------------ + 109 void long2bcd(unsigned long value,char no) + 110 { + 111 1 char i; // Converts a bin value to bcd & display. + 112 1 // char no determines how many digits to be + 113 1 for(i=7;i>=(8-no);i--) // displayed. + 114 1 { + 115 2 disp_data[i]=value % 10; + 116 2 if(value==0 && i=(8-no);i--) // displayed. + 129 1 { + 130 2 disp_data[i]=value % 10; + 131 2 if(value==0 && i<7 && disp_data[i]==0x00)disp_data[i]=0x11; //masking zero + 132 2 value=value / 10; + 133 2 rst_wdt(); + 134 2 } + 135 1 disp_data[0]=0x0B; //Display "Bat" + 136 1 disp_data[1]=0x0A; + 137 1 disp_data[2]=0x14; + 138 1 display(); + 139 1 } + 140 //----------------------------------------------------------------------------- + 141 void display_name(void) + 142 { + 143 1 char i,j; + 144 1 //for(i=0;i<22;i++) + 145 1 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 literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.c new file mode 100644 index 0000000..9cc897f --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/ser_disp.c @@ -0,0 +1,153 @@ +//#pragma nointpromote +#include +//#include +//#include + +//#include +#include +#include +#include +#include + +#include +#include + +sbit ser_clk =P2^6; +sbit ser_data=P2^7; + +/* Display code storage. + Display Code. + 0 to F 0x00 to 0x0F + - 0x10 + Blank 0x11 + P 0x12 + R 0x13 + T 0x14 + H 0x15 + L 0x16 + O 0x17 + N 0x18 + G 0x19 + M 0x1A + U 0x1B + Y 0x1C + W 0x1D + = 0x1E +*/ + +unsigned char code h_7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, + 0x88,0x83,0xC6,0xA1,0x86,0x8E, + 0xBF,0xFF,0x8C,0xAF,0x87,0x89,0xC7, + 0xA3,0xAB,0xC2,0xAA,0xC1,0x91,0x95,0xF6}; + +unsigned char code filltronics[]={0x0F,0x01,0x16,0x16,0x14,0x13,0x17,0x18,0x01,0x0C,0x05, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}; //Filltronics + +extern unsigned char data disp_data[8]; +extern unsigned char idata dp_val; +extern bit dp_flag; + +//--------------------------------------------------------------------- +void display(void) +{ + unsigned char i,j,temp; + //EX0 = 0; + EA=0; + for(i=0;i<8;i++) + { + if(i == dp_val && dp_flag) temp=h_7[disp_data[i]] & 0x7F; + else temp=h_7[disp_data[i]]; + for(j=0;j<=7;j++) + { + if(temp & 0x80) ser_data=1; + else ser_data=0; + + ser_clk=1; + _nop_(); + _nop_(); + _nop_(); + ser_clk=0; + + temp<<=1; + _nop_(); + _nop_(); + _nop_(); + + rst_wdt(); + } + } + //EX0 = 1; + EA=1; +} +//--------------------------------------------------------------------- +void disp(char i1,i2,i3,i4,i5,i6,i7,i8) +{ + disp_data[0]=i1; + disp_data[1]=i2; + disp_data[2]=i3; + disp_data[3]=i4; + disp_data[4]=i5; + disp_data[5]=i6; + disp_data[6]=i7; + disp_data[7]=i8; + display(); +} +//------------------------------------------------------------------------ +void clr_disp(void) +{ + disp_data[0]=0x11; + disp_data[1]=0x11; + disp_data[2]=0x11; + disp_data[3]=0x11; + disp_data[4]=0x11; + disp_data[5]=0x11; + disp_data[6]=0x11; + disp_data[7]=0x11; + display(); +} +//------------------------------------------------------------------------ +void long2bcd(unsigned long value,char no) +{ + char i; // Converts a bin value to bcd & display. + // char no determines how many digits to be + for(i=7;i>=(8-no);i--) // displayed. + { + disp_data[i]=value % 10; + if(value==0 && i=(8-no);i--) // displayed. + { + disp_data[i]=value % 10; + if(value==0 && i<7 && disp_data[i]==0x00)disp_data[i]=0x11; //masking zero + value=value / 10; + rst_wdt(); + } + disp_data[0]=0x0B; //Display "Bat" + disp_data[1]=0x0A; + disp_data[2]=0x14; + display(); +} +//----------------------------------------------------------------------------- +void display_name(void) +{ + char i,j; + //for(i=0;i<22;i++) + for(i=0;i /* Library header files */ + 5 //#include + 6 //#include + 7 #include + 8 #include + 9 #include + 10 #include + 11 + 12 #include + 13 //----------------------------------------------------------------------------- + 14 extern int idata len; + 15 //----------------------------------------------------------------------------- + 16 sfr wdt =0xA6; + 17 //------------------------------------------------------------------------ + 18 void delay(unsigned int del) + 19 { + 20 1 unsigned int j; + 21 1 unsigned int i; // Delay of 'del' mS. + 22 1 for(j=0;j> 4) + (bcd & 0xF); + 59 1 } + 60 //------------------------------------------------------------------------------ + 61 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 162 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 12 + IDATA SIZE = ---- ---- + BIT SIZE = ---- 1 +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.OBJ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..b5a004e1fa19a58f225eabd4265578785ff5d124 GIT binary patch literal 6917 zcmd5>eQZ^R4P@iX!lP$tqj_2Lh4p^e@va$ZJM-I+qzX+_eZB`bP^L9Oq6N+V`S%d-@VVz z&g`k`{@4+@@11w<`Ml?zd#=fmHoq~{wcY2REoP^)#S@(=zprm(_`qny7moCe?eh)y z-4_YPBjfSNP?%`=cd^3_YATa7I`o@dwoZLXIq1!CyC?6@WTz)t@?>-Hi>gwF@pf`9@YvrUwvXDrnI;X0T3&nhP<{?F1S;?K90llE;3#1o{>FI0| z= zXu8R_mzD~?-jNX_G#FEyPLtEiRB%>MU9=8zHKz7O7f{`%W0p-Glj@;6pm$_6 zZX93@(qOMiY?iEjp>QxdWKmD9Y#|5hrTU&wPiP=K9E*?qZN-DcTnt`APG=1a9x0lw zVepzR#3r0VLQ~1;zKM8*V^Nwj7=v#_ZZnqW7uT~eY2Rz>nn0?PXlKY5Sc(q}t_C9- ziWuRs!NCcm$Csr*1Nk7yrKdB~frd6lJf!Q%R63vsIy7A@o5Kg)?ao9#zg;(C8+(Ti@Z(7>F=SqYh^}Qz*KqLoehxbcwlZ;ozrKmDF%i>sUW3gIauH2$q z^!A7J9N{mv`pW$6=C?>|x}MGs*TXT&b!DKI_av%&Bkmc|I2|O>4@|aVcZ>JT+ZWCS|P?(9{seE z$97u9<5pTteHd8u>ZwCC>;~XEK$RmE$&DS8m%4}-)G_W^B zPtjRALxXkDq-jnWQ}&wU0o*}9EXCHvV)<*5W6PTVL(1)z&zGzf(5Z*~=K|fFcFcd5aAA!Y*YfD4 zHXd79KE?o#yIF@$pXQYS=X!dOWACzJKW1Br*u(%w-! zNb3-68^ySZ$HlZ+j9YkIPMtiqa!P?`8(p%w6Pt)~eRHT{`MhTluL#lXg*CGm{>U-& zkq$g4zU~m?P9AmY;?YgJ=q$6l6#KJgXk;CJ9(&sK3{~$1&r(sTum3pSJbR=58@I2= zn>*+I%L1!NN44n|)O*Fao5v>l6n)DyRSJBTb?K@UU(D}jra7gW=I7;3A^jukD4?4+ zt#zZH+^|l8*AMPw!!){wMX+vHHk~LYT*t+j!{`)4>S#LS%80L17{8ln5gmj^)`^^Y zC$V015f1tK77W};0>soqmOQcH~4S9sYIbQX@1CsVH` zQJjbt8Afm4Xm2QF>^F?JQe5%)BLL5*)4V_ViP|Up@c>hC}lhf7&@BruYO@P98l;Li!8g{yy>vaiF zCApe2>WUp09tmqzE!DXumALZBdch@j_8+9F2mwTWHQml;!c-3%XM$-OpW8M(qQWE& z$J~h*SdN#S6h|D-%Sk!t6_lJ)yJ9T2BnNnBa*@#ME@V$;jN-po%wA?kv|!GC)+#x9 zADIAi9#)?Bhd$dovbu)n_V_(iX7rKVD>aNpg#{?1?=n$=?^bfS8lb88Qw=$yYp}`b zw#m6Oi8GU^#W)b!-#cQ&xl`+p4n@L7Z&i;_22DU5rqx=a?^?-BNGVh+i2ZW9i<8@2 zOXUujum;K<;Cz7cabfZRUt<#*Z2g}JP7-# z-ec)mPA53zuGlxIn-~`}luOuzv zt0}dpQoEmT9laAjt-)sB)Q6HyLaf&?LgQWA4WqsaqsBh3u<1LhtP~CKSD34OLz>Be z4T*ICsNCjGM*wj2qbnu8j-MYT(c=*{axsl}-+R2P3)M7V#U^x~_GOPc<(2c}xChlLh0Qjuhm)piEwPjJVDBJ}V9euI$>tu& z#(~smV;u8Ts@V4q68i3n`A8)-|E$uO+#xkW8~&b5M_50STPrK_(1`rNqS-at@ph&` z2I#-EPQSt4fq~(WF&G&%e!d`#8F4ycC&4^`DcsF{s0j-1tiZQc;Pw-Zd*ZU4=~eEg zg3?`>4O5@6+~q5}O(GTn0R_MU;K)OO!r?9e_zz0?$v5ng=+G$g6TyWR0G_2i>MG06 z6Ux5qW@(=~c^v(aNY=(ETdIdDl%YkWnhY@EZUbSYmtfLME!ZTEcr& zGKZ1O%c}aKmvtb=l`n@kEwDo!>bR$wpnQQ|<;(rb7rqGhNf|m*Vb^KvFwwXvFPFhR zXjyu8+3;)1s+kQ^VyT)x$9E=hIz>bw(~ORj+j|ofZa>8_-=34e?KuhDo|C{UyR2Y^ ze0$e*T-Bd`ZY>Vh2)_MDnNn`%+NGP&fWV!x0$0AZu=UE#c9)s`3)N)E-#JdP-135M z)(aGLBrO019Lb~#IB*=a3P;i*`IP&he@D5C4(zwm_|h&=MQNe&iuva)kht!;lu^ahVq<>MbfAdCS{Wz+`cn|M?P^5b{z>e7JXQddK>y%n>r zH-$_wA~l!#%+mGdlPJCSX0rEuPurz8XCC#F|jng<)M|4eRVjL_uldE60@7 zgtCn+d)%rp<}Wg^57uF)tLp}ER0jOk03P61l_eo$!txrHV5I@zI$=-z@IbT=iT`3% zW_MZQA5VIPdPiaVb?HSZi{2B*88)81tp$z)7XbahSDC1VR~{Gk%8dCR_xPxNT)0IC zShB}m(ZION8kqMimxF(mE`t?|a3=kVh|d4J%O}+lVH6JKKa@_CvQIS^uChjnf6Oks Ps)n77)_*_1{n!5uN8BJx literal 0 HcmV?d00001 diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.c b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.c new file mode 100644 index 0000000..429165b --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.c @@ -0,0 +1,61 @@ +// Routines which are commonly used in all programs. + +//#pragma code +#include /* Library header files */ +//#include +//#include +#include +#include +#include +#include + +#include +//----------------------------------------------------------------------------- +extern int idata len; +//----------------------------------------------------------------------------- +sfr wdt =0xA6; +//------------------------------------------------------------------------ +void delay(unsigned int del) +{ + unsigned int j; + unsigned int i; // Delay of 'del' mS. + for(j=0;j> 4) + (bcd & 0xF); +} +//------------------------------------------------------------------------------ + diff --git a/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.h b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.h new file mode 100644 index 0000000..235225c --- /dev/null +++ b/Tin_fill_ 4x4-&_6Key_8digit_new_key_36_recipe_HX711_AD7780- 55wd_V3.2/utility.h @@ -0,0 +1,6 @@ +#define nop(); _nop_(); _nop_(); _nop_(); +void delay(unsigned int del); +extern bit arr_cmp(char arr1[],char arr2[],int len); +void arr_cpy(char idata *dest,char idata *src,int len); +void rst_wdt(void); +unsigned char bcd2int(unsigned char bcd); \ No newline at end of file