Added Tinfilling program

This commit is contained in:
Anurag 2026-09-06 16:38:55 +05:30
parent f787344bdf
commit 865d4f9435
47 changed files with 19681 additions and 1 deletions

View file

@ -1 +0,0 @@
Some text

View file

@ -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<REGX55.h> //including sfr registers for ports of the controller
2 //#include <SST89x5x4.H>
3 //#include <REGF51RC.H>
4
5 //#include <REGX55.H>
6 #include <REG51.H>
7 #include<utility.h>
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)

View file

@ -0,0 +1,81 @@
//#include<REGX55.h> //including sfr registers for ports of the controller
//#include <SST89x5x4.H>
//#include <REGF51RC.H>
//#include <REGX55.H>
#include <REG51.H>
#include<utility.h>
#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';
}

View file

@ -0,0 +1 @@
unsigned char Read_Keypad(void);

View file

@ -0,0 +1,87 @@
/*this is the pgm for ADC 7780 using SPI Protocol*/
//#pragma ot(9,size)
//#pragma nointpromote
//#include <REGX55.H>
//#include <SST89x5x4.H>
//#include <REGF51RC.H>
//#include <REG51.H>
#include <REGX55.H>
#include <absacc.h>
#include <intrins.h>
#include <math.h>
#include <ser_disp.h>
#include <utility.h>
#include <ADC_AD7780.h>
//-----------------------------------------------------------------------------
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;
}
}
//-------------------------------------------------------------------------

View file

@ -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 <REGX55.H>
6 //#include <SST89x5x4.H>
7 //#include <REGF51RC.H>
8
9 //#include <REG51.H>
10 #include <REGX55.H>
11
12 #include <absacc.h>
13 #include <intrins.h>
14 #include <math.h>
15
16 #include <ser_disp.h>
17 #include <utility.h>
18 #include <ADC_AD7780.h>
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)

View file

@ -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);

View file

@ -0,0 +1,201 @@
/*this is the pgm for ADC 7780 using SPI Protocol*/
#if defined( _HX711 )
//#pragma ot(9,size)
//#pragma nointpromote
//#include <SST89x5x4.H>
//#include <REGF51RC.H>
// #include <REG51.H>
#include <REGX55.H>
#include <absacc.h>
#include <intrins.h>
#include <math.h>
#include <ser_disp.h>
#include <utility.h>
#include <ADC_HX711.h>
//-----------------------------------------------------------------------------
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

View file

@ -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 <SST89x5x4.H>
//#include <REGF51RC.H>
// #include <REG51.H>
#include <REGX55.H>
#include <absacc.h>
#include <intrins.h>
#include <math.h>
#include <ser_disp.h>
#include <utility.h>
#include <ADC_HX711.h>
//-----------------------------------------------------------------------------
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)

View file

@ -0,0 +1,17 @@
/*sbit dout = P1^3;
sbit clk = P1^2;
sbit PDRST = P1^1;*/
/*sbit dout = P3^2;
sbit clk = P3^3;
sbit PDRST = P3^4;*/
/*sbit SPEED = P3^5;
sbit GAIN = P0^0;*/
//extern void Get_Adc_Result(void);
//extern void init_adc(void);
extern void init_adc_HX711(void);
extern void Get_Adc_Result_HX711(void);

View file

@ -0,0 +1,249 @@
/***********************************************************************************************************
* demoIAP.c - Sample IAP C51 code for SST89x516RDx/SST89x58RDx Devices
*
*
* This sample code provides programming routines using In-Application
* Programming (IAP).
* This sample code is for the user’s reference only. SST does not
* guarantee the functionality or the usefulness of the sample code.
*
* In the SST89x516RDx/SST89x58RDx MCU, there are two blocks of flash
* memory. This code is to write data to block1 starting at 1000H
* (for the SST89x516RDx) or E000H (for the SST89x58RDx) by running IAP
* operations from block 0. The default set up is for SST89x516RDx.
* When using SST89x58RDx, please modify the global variable BLK1_DST_ADDR
* following the instruction below the variable definition.
*
* The companion SST89x516RDx/SST89x58RDx MCU data sheet should be
* reviewed in conjunction with this sample code.
*
* Note: This demo program is specifically for SST89x516RDx/SST89x58RDx devices.
***********************************************************************************************************/
//#include <SST89x5x4.H>
//#include <REGF51RC.H>
#include <IAP.h>
#include <eeprom.h>
#include <utility.h>
#include <ser_disp.h>
//**********************************************************************************************************
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<SECT_SIZE; byteCnt++)
{
origData=read_eeprom(EEdataByteAddr);
byte_program(destAddr, origData); //program a byte
verifyData=byte_verify(destAddr); //verify byte programmed correctly
if(verifyData!=origData)error(); //go to error if programmed incorrectly
destAddr++;
origData++;
EEdataByteAddr++;
}
}
ErrorCode=0; //IAP correct
disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS"
}
/***********************************************************************************************************
* IAP SUBROUTINES
* 1. Sector-Erase
* 2. Byte-Program
* 3. Byte-Verify
***********************************************************************************************************/
/***********************************************************************************************************
* Sector-Erase Subroutine
***********************************************************************************************************/
void sector_erase(unsigned short int dataAddr)
//void sector_erase(void)
{
unsigned short int destAddr = dataAddr;
//unsigned short int destAddr = BLK1_DST_ADDR;
SFCF = SFCF | 0x40; /*enable IAP */
SFAH = destAddr>>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<SECT_SIZE; byteCnt++)
{
verifyData=byte_verify(destAddr); //verify byte programmed correctly
//if(verifyData!=origData)error(); //go to error if programmed incorrectly
write_eeprom(EEdataByteAddr,verifyData);
destAddr++;
EEdataByteAddr++;
}
}
ErrorCode=0; //IAP correct
disp(0x11,0x05,0x1b,0x0c,0x0c,0x0e,0x05,0x05); //"SUCCESS"
}
//**********************************************************************************************************

View file

@ -0,0 +1,14 @@
#ifndef __IAP_H__
#define __IAP_H__
//-----------------------------------------------------------------
extern const unsigned short int BLK1_DST_ADDR;
extern const unsigned char SECT_SIZE;
//-------------------------------------------------------------------
void EEPROM_copy_to_sectors(unsigned short int dataAddr, unsigned char EEdataByteAddr);
void sector_erase(unsigned short int dataAddr);
//void sector_erase(void);
void byte_program(unsigned short int dataAddr, unsigned char dataByte);
unsigned char byte_verify(unsigned short int dataAddr);
void sectors_copy_to_EEPROM(unsigned short int dataAddr, unsigned char EEdataByteAddr);
//--------------------------------------------------------------------
#endif

View file

@ -0,0 +1,35 @@
Tin filling machine program.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Last update:08-01-2017
Card : AD7780 board
ADC : AD7780
Controller : SST89E516RD
--------------------------------------------------------
Ports used:
ADC : P3.2,P3.3,P3.4.
OUTPUT: P1.1 TO P1.4.
DISPLAY: P2.6,P2,7.
KEY BOARD: P2.0 TO P2.5(for 6Key) and P0 (for 4x4 key board)
EEP : P3.6,P3.7.
-----------------------------------------------
Program variations:
Types of pgm given : 2.
1. 6 key program with 36 recipe
2. 4x4 key program with 36 recipe
---------------------------------------------------
Other features
Recipies stored in EEPROM 4 blocks (24C08)
Cumulative and functions enable values stored in RTC
----------------------------------------------------

View file

@ -0,0 +1,45 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Project:</h2>
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
<h2>Output:</h2>
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).

View file

@ -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)

View file

@ -0,0 +1,35 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Project:</h2>
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
<h2>Output:</h2>
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).

View file

@ -0,0 +1,2 @@
[.ShellClassInfo]
IconResource=C:\Program Files\Google\Drive File Stream\130.0.2.0\GoogleDriveFS.exe,27

View file

@ -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 <SST89x5x4.H>
4 //#include <REGF51RC.H>
5
6 //#include <REG51.H>
7 #include <REGX55.H>
8
9 #include <absacc.h>
10 #include <string.h>
11 #include <intrins.h>
12
13 #include <eeprom.h>
14 #include <utility.h>
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 <AT898252.H>
195 //#include <absacc.h>
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)

View file

@ -0,0 +1,228 @@
// Reads from & writes to eeprom
//#include <SST89x5x4.H>
//#include <REGF51RC.H>
//#include <REG51.H>
#include <REGX55.H>
#include <absacc.h>
#include <string.h>
#include <intrins.h>
#include <eeprom.h>
#include <utility.h>
//------------------------------------------------------------------------------
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 <AT898252.H>
//#include <absacc.h>
/*
* 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);
}*/
//------------------------------------------------------------------

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<TargetCommonOption>
<Device>AT89C55WD</Device>
<Vendor>Atmel</Vendor>
<Cpu>IRAM(0-0xFF) IROM(0-0x4FFF) CLOCK(33000000) MODAT2</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>3414</DeviceId>
<RegisterFile>REGX55.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>Atmel\</RegisterFilePath>
<DBRegisterFilePath>Atmel\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\</OutputDirectory>
<OutputName>Tin_fill_4x4_key_36Recipe_ad7780_55WD_default</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>D:\VEN\CPGM\fill\Tin\h.bat fill</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>DP51.DLL</SimDlgDll>
<SimDlgDllArguments>-pAT52</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pAT52</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>1</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
</Simulator>
<Target>
<UseTarget>0</UseTarget>
<LoadApplicationAtStartup>0</LoadApplicationAtStartup>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>0</RestoreBreakpoints>
<RestoreWatchpoints>0</RestoreWatchpoints>
<RestoreMemoryDisplay>0</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>0</RestoreToolbox>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>0</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver></Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>0</DriverSelection>
</Flash1>
<Flash2></Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x5000</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>1</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group 1</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\main.c</FilePath>
</File>
<File>
<FileName>ser_disp.c</FileName>
<FileType>1</FileType>
<FilePath>.\ser_disp.c</FilePath>
</File>
<File>
<FileName>utility.c</FileName>
<FileType>1</FileType>
<FilePath>.\utility.c</FilePath>
</File>
<File>
<FileName>eeprom.c</FileName>
<FileType>1</FileType>
<FilePath>.\eeprom.c</FilePath>
</File>
<File>
<FileName>4x4_key.c</FileName>
<FileType>1</FileType>
<FilePath>.\4x4_key.c</FilePath>
</File>
<File>
<FileName>ADC_AD7780.C</FileName>
<FileType>1</FileType>
<FilePath>.\ADC_AD7780.C</FilePath>
</File>
<File>
<FileName>ADC_HX711.C</FileName>
<FileType>1</FileType>
<FilePath>.\ADC_HX711.C</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>Documentation</GroupName>
<Files>
<File>
<FileName>Notes.txt</FileName>
<FileType>5</FileType>
<FilePath>.\Notes.txt</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

View file

@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<TargetCommonOption>
<Device>AT89C55WD</Device>
<Vendor>Atmel</Vendor>
<Cpu>IRAM(0-0xFF) IROM(0-0x4FFF) CLOCK(33000000) MODAT2</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>3414</DeviceId>
<RegisterFile>REGX55.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>Atmel\</RegisterFilePath>
<DBRegisterFilePath>Atmel\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\</OutputDirectory>
<OutputName>Tin_fill_4x4_key_36Recipe_ad7780_55WD</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>D:\VEN\CPGM\fill\Tin\h.bat fill</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>DP51.DLL</SimDlgDll>
<SimDlgDllArguments>-pAT52</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pAT52</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>1</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
</Simulator>
<Target>
<UseTarget>0</UseTarget>
<LoadApplicationAtStartup>0</LoadApplicationAtStartup>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>0</RestoreBreakpoints>
<RestoreWatchpoints>0</RestoreWatchpoints>
<RestoreMemoryDisplay>0</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>0</RestoreToolbox>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>0</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver></Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>0</DriverSelection>
</Flash1>
<Flash2></Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x5000</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>1</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group 1</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\main.c</FilePath>
</File>
<File>
<FileName>ser_disp.c</FileName>
<FileType>1</FileType>
<FilePath>.\ser_disp.c</FilePath>
</File>
<File>
<FileName>utility.c</FileName>
<FileType>1</FileType>
<FilePath>.\utility.c</FilePath>
</File>
<File>
<FileName>eeprom.c</FileName>
<FileType>1</FileType>
<FilePath>.\eeprom.c</FilePath>
</File>
<File>
<FileName>4x4_key.c</FileName>
<FileType>1</FileType>
<FilePath>.\4x4_key.c</FilePath>
</File>
<File>
<FileName>ADC_AD7780.C</FileName>
<FileType>1</FileType>
<FilePath>.\ADC_AD7780.C</FilePath>
</File>
<File>
<FileName>ADC_HX711.C</FileName>
<FileType>1</FileType>
<FilePath>.\ADC_HX711.C</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>Documentation</GroupName>
<Files>
<File>
<FileName>Notes.txt</FileName>
<FileType>5</FileType>
<FilePath>.\Notes.txt</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

View file

@ -0,0 +1,52 @@
//INCLUDE KEYBOARD HEADER FILE
#include <REGX55.h>
#include <keyboard4x4.h>
#include <utility.h>
//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];
}
//-----------------------------------------------------------------------------------

View file

@ -0,0 +1,25 @@
#ifndef KEYBOARD4_4_H
#define KEYBOARD4_4_H
#include<REGX55.h>
//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

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,205 @@
/*
* _4x4_key.c
*
* Created: 11-03-2015 15:22:49
* Author: stanly
*/
#include <REGX55.h>
#include <matrix_key.h>
#include <utility.h>
//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
} */

View file

@ -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_ */

View file

@ -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 <REGX55.H>
3 //#include <SST89x5x4.H>
4 //#include <REGF51RC.H>
5
6 //#include <REG51.H>
7 #include <absacc.h>
8 #include <string.h>
9 #include <intrins.h>
10 #include <stdlib.h>
11
12 #include <ser_disp.h>
13 #include <utility.h>
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<dp_val && disp_data[i]==0x00)disp_data[i]=0x11; //masking zero
117 2 value=value / 10;
C51 COMPILER V9.60.7.0 SER_DISP 07/10/2026 17:02:31 PAGE 3
118 2 rst_wdt();
119 2 }
120 1 if(disp_data[0]==0x11 && disp_data[1]==0x11){disp_data[0]=0x0C;disp_data[1]=0x1B;} //Display "CU"
121 1 display();
122 1 }
123 //----------------------------------------------------------------------------
124 void batch2bcd(unsigned int value,char no)
125 {
126 1 char i; // Converts a bin value to bcd & display.
127 1 // char no determines how many digits to be
128 1 for(i=7;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 for(i=0;i<sizeof(filltronics);i++)
146 1 {
147 2 disp_data[8]=filltronics[i];
148 2 delay(200);
149 2 for(j=0;j<8;j++)disp_data[j]=disp_data[j+1];
150 2 display();
151 2 }
152 1 }
153 //-----------------------------------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 468 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 29
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View file

@ -0,0 +1,153 @@
//#pragma nointpromote
#include <REGX55.H>
//#include <SST89x5x4.H>
//#include <REGF51RC.H>
//#include <REG51.H>
#include <absacc.h>
#include <string.h>
#include <intrins.h>
#include <stdlib.h>
#include <ser_disp.h>
#include <utility.h>
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<dp_val && disp_data[i]==0x00)disp_data[i]=0x11; //masking zero
value=value / 10;
rst_wdt();
}
if(disp_data[0]==0x11 && disp_data[1]==0x11){disp_data[0]=0x0C;disp_data[1]=0x1B;} //Display "CU"
display();
}
//----------------------------------------------------------------------------
void batch2bcd(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;
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<sizeof(filltronics);i++)
{
disp_data[8]=filltronics[i];
delay(200);
for(j=0;j<8;j++)disp_data[j]=disp_data[j+1];
display();
}
}
//-----------------------------------------------------------------------------

View file

@ -0,0 +1,6 @@
extern void display(void);
extern void disp(char i1,i2,i3,i4,i5,i6,i7,i8);
extern void clr_disp(void);
extern void long2bcd(unsigned long value,char no);
extern void batch2bcd(unsigned int value,char no);
extern void display_name(void);

View file

@ -0,0 +1,86 @@
C51 COMPILER V9.60.7.0 UTILITY 07/10/2026 17:02:31 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE UTILITY
OBJECT MODULE PLACED IN utility.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE utility.c BROWSE DEBUG OBJECTEXTEND
line level source
1 // Routines which are commonly used in all programs.
2
3 //#pragma code
4 #include <REGX55.H> /* Library header files */
5 //#include <SST89x5x4.H>
6 //#include <REG51.H>
7 #include <absacc.h>
8 #include <string.h>
9 #include <intrins.h>
10 #include <stdlib.h>
11
12 #include <utility.h>
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<del;j++)
23 1 {
24 2 for(i=0;i<105;i++);
25 2 rst_wdt();
26 2 }
27 1 }
28 //-----------------------------------------------------------------------------
29 bit arr_cmp(char arr1[],char arr2[],int len)
30 {
31 1 bit b=1; // Compare two arrays and returns 1 if they are same.
32 1 unsigned char a;
33 1 for(a=0;a<len;a++)
34 1 {
35 2 if(arr1[a] != arr2[a]) b=0;
36 2 }
37 1 return(b);
38 1 }
39 //-----------------------------------------------------------------------------
40 void arr_cpy(char idata *dest,char idata *src,int len)
41 {
42 1 unsigned char a; // Copies src array to dest array.
43 1 for(a=0;a<len;a++)
44 1 {
45 2 *dest=*src;
46 2 dest++;src++;
47 2 }
48 1 }
49 //-----------------------------------------------------------------------------
50 void rst_wdt(void)
51 {
52 1 wdt=0x1e;
53 1 wdt=0xe1;
54 1 }
55 //-----------------------------------------------------------------------------
C51 COMPILER V9.60.7.0 UTILITY 07/10/2026 17:02:31 PAGE 2
56 unsigned char bcd2int(unsigned char bcd)
57 {
58 1 return 10 * (bcd >> 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)

View file

@ -0,0 +1,61 @@
// Routines which are commonly used in all programs.
//#pragma code
#include <REGX55.H> /* Library header files */
//#include <SST89x5x4.H>
//#include <REG51.H>
#include <absacc.h>
#include <string.h>
#include <intrins.h>
#include <stdlib.h>
#include <utility.h>
//-----------------------------------------------------------------------------
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<del;j++)
{
for(i=0;i<105;i++);
rst_wdt();
}
}
//-----------------------------------------------------------------------------
bit arr_cmp(char arr1[],char arr2[],int len)
{
bit b=1; // Compare two arrays and returns 1 if they are same.
unsigned char a;
for(a=0;a<len;a++)
{
if(arr1[a] != arr2[a]) b=0;
}
return(b);
}
//-----------------------------------------------------------------------------
void arr_cpy(char idata *dest,char idata *src,int len)
{
unsigned char a; // Copies src array to dest array.
for(a=0;a<len;a++)
{
*dest=*src;
dest++;src++;
}
}
//-----------------------------------------------------------------------------
void rst_wdt(void)
{
wdt=0x1e;
wdt=0xe1;
}
//-----------------------------------------------------------------------------
unsigned char bcd2int(unsigned char bcd)
{
return 10 * (bcd >> 4) + (bcd & 0xF);
}
//------------------------------------------------------------------------------

View file

@ -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);